デジタル・デザイン・ラボラトリーな日々

アラフィフプログラマーが数学と物理と英語を基礎からやり直す。https://qiita.com/yaju

MacBook Proを買いました

はじめに

今年初めての記事になります。ここ数年は「サザエさんのじゃんけん データ分析」の結果報告を1月1日に書いていたりしましたが、結果報告をやめた訳ではないです。
ディープラーニングを使ってやりたいと思って出来ずに先延ばしで数年経ってしまったので、機械学習をきちんと理解した上で納得してから記事を書くつもりです。

今記事はタイトルにあるようにMacBook Proを購入しました。届いたのは2020/01/12(日)になります。
数ヶ月前からNEC「LaVie LL750/M」のCPUファンから異音がなるようになっていたので我慢ならなくなったんですよね。
ついに個人としてはWindowsメインから脱出したわけです。 まー仕事では相変わらずWindowsですからね。
Mac自体は2008/06/23にiMacを購入したのですが、ノートタイプではなかったのであまりメインで使うことはなく7年くらいしたらモニターが時間が経つとチラついて何も見えない状態になってしまい、2017/09/02に買取業者に700円で売却しました。しかし、今度はノートタイプですから肌にあっています。

購入内容

本体

16インチMacBook Pro - スペースグレイ ¥ 288,800
システム構成:
第9世代の2.3GHz 8コアIntel Core i9プロセッサ(Turbo Boost使用時最大4.8GHz)
16GB 2,666MHz DDR4メモリ
AMD Radeon Pro 5500M(4GB GDDR6メ‍モ‍リ搭載)
1TB SSDストレージ
True Toneを採用した16インチRetinaディスプレイ
Thunderbolt 3ポート x 4
Touch BarとTouch ID
バックライトキーボード - 日本語(JIS)
アクセサリキット

付属品

  • Magic Mouse 2 - スペースグレイ ¥ 9,800
  • USB-C - Lightningケーブル(1 m)¥ 1,800
  • USB-C - USBアダプタ ¥ 1,800

ソフトウェア

  • Microsoft Office Home and Student 2019(1ユーザー Mac 2台)¥ 23,800

別途購入

  • USB-C Digital AV Multiportアダプタ ¥ 6,800
  • Parallels Desktop 15 for Mac ¥ 6,480
    ベクターで購入
  • Windows 10 Home

最後に

消費税入れて35万円を超えるなど結構な額になりました。消費税 10%って30万超えたら3万円ですからね、痛いです。
ローンを組みたくなかったんですが、流石に24回払いにしました。5年以上は使える性能と考えれば仕方ないですね。

Macにおけるバックスラッシュ(\)の入力方法

TensorFlow 2.xによる sin波予測

はじめに

時系列データを使用した予測をやりたいと思って、良さげな教材が下記サイトになります。
qiita.com qiita.com

記事自体が、2016~2017年ということで少し古いですが、機械学習のリハビリもかねて動かしてみました。

環境

  • Google Colaboratory
  • TensorFlow 2.1.0-rc1

現時点(2019/12/30)ではGoogle Colaboratoryでは標準で「TensorFlow 2.x」になってないですが、もうすぐなると思います。
下記コードを入力することで「TensorFlow 2.x」に切り替えることができます。

%tensorflow_version 2.x
import tensorflow as tf
print(tf.__version__)

ソース

説明

4000件(50 x 80)のノイズ入りのサイン関数データを用意します。
左図は全体、右図は先頭160件(80 x 2)です。
f:id:Yaju3D:20191231204538p:plain

これを訓練データ、テストデータに分類し、100ステップ分の入力Xがあった際の出力yが101ステップ目になる様なデータセットを作ります。
この「100ステップ分の入力Xがあった際の出力yが101ステップ目になる」をしている意味がよく分からなくて悩んでいたところ、下記サイトに「普通の regression と異なるのは、履歴 sequence から next value を予測することです。」と書かれていて、なるほどと思いました。
https://tensorflow.classcat.com/2016/09/17/sine-wave-prediction-by-rnn-lstm/

つまり、1~100の履歴値の予測値は101番目の値、2~101の履歴値の予測値は102番目の値、3~102の履歴値の予測値は103番目の値というようにするわけです。

訓練データは、全体の9割 4000 \times (1 - 0.1) = 3600 件で、テストデータは残りの 400 件となります。

in_out_neurons = 1
hidden_neurons = 300

model = Sequential()  
model.add(tf.keras.layers.LSTM(hidden_neurons, batch_input_shape=(None, length_of_sequences, in_out_neurons), return_sequences=False))  
model.add(Dense(in_out_neurons))  
model.add(Activation("linear"))

ニューラルネットの構造は model にさまざまなレイヤを add() することで構築できます。
300個の LSTM 中間層に投げ、それを1個の出力層に集約し、linear 活性化関数を掛け合わせています。

model.compile(loss="mean_squared_error", optimizer="rmsprop")

modelのコンパイル時に、誤差関数(平均二乗誤差)、最適化アルゴリズム(RMSprop)を指定しています。

学習データを用いた予測は、predict() を用いて行います。

predicted = model.predict(X_test) 

dataf =  pd.DataFrame(predicted[:200])
dataf.columns = ["predict"]
dataf["input"] = y_test[:200]
dataf.plot(figsize=(15, 5))

予測値と入力値の 200 件分を同時に表示します。

最後に

ちゃんと中身を理解していかないとですね。

英語の勉強の習慣化

はじめに

毎年数ヶ月もすれば何もしないで終わっていた英語の勉強ですが、11ヶ月経った今でも続けることが出来ています。
平日の会社終わりにコワーキングの「エニシア静岡 丸井店」に行って、そこで英語の勉強をしています。

ただ時間が30分~40分くらいと確かに短いかなと思いますが、仕事終わりということで長いと集中力が続かないですね。たまに寝てしまうし・・・

何をしているか

瞬間英作文のiPhoneアプリ版を使用して、ひたすら繰り返しています。
そして疑問に思ったことは調べて下記にまとめています。 yaju3d.hatenablog.jp

以前は、英文法の整序問題で正しい順序にして英文法を作成する「英語組み立てTOWN」もやっていたのですが、今はやめてしまっています。
これは瞬間英作文を結構やっているのに進歩がないような気がしていて、瞬間英作文のみに絞っています。

家でやる習慣を付ける

家だと何もしたくない。でも、それだと平日の30分しかしていないわけで、土日も何もしていないわけです。
当然、進捗が遅いわけですよ。TOEIC受験なんて今のレベルでは全然駄目だと思って今年も受けなかったです。

今後は家でやる習慣を付けるようにしたいですね。

Audio版「Doraemon」は半年前くらいに準備だけして、その後に何もしていなかったので家ではこれをひたすら聞いていこうと思います。
「Doraemon」は勉強って感じではなく、気分転換で読むイメージですからね。

最後に

ひらすら続けるのみ。

ステップ関数を理解してみる

はじめに

活性化関数としてステップ関数がある、ニューラルネットワークの起源となるアルゴリズムのパーセプトロンでAND回路やOR回路の構成に使用されたものです。

yaju3d.hatenablog.jp

過去にシグモイド関数をやってきてるのに、なんで初期の活性化関数であるステップ関数に戻るのかというと、それは微分不可能だから。
活性化関数 Relu も微分不可能なのにディープラーニングの隠れ層では推奨されています。

私の方で活性化関数で「微分不可能」というところに理解が引っかかっているので、原点に戻って整理しようと考えたのです。

あとで追記します。

参考

ステップ関数

形式ニューロン

f:id:Yaju3D:20170528144340p:plain f:id:Yaju3D:20170528154127p:plain
左図が本物の神経細胞(ニューロン) で、右図が形式ニューロンです。
形式ニューロンをWikipediaから引用します。

形式ニューロン(けいしきニューロン、英: formal neuron)や Threshold Logic Unit とは、1943年に神経生理学者・外科医であるウォーレン・マカロックと論理学者・数学者であるウォルター・ピッツが発表した最初の人工ニューロン(英: artificial neuron)[1]。伝達関数としてはヘヴィサイドの階段関数を使い、入出力の値は 0 または 1 の二値だけをとる。

簡単に説明すると、入力が2つあり各入力に対して重みが掛け算され、その値が閾値を超えれば出力は「1」、そうでなければ出力は「0」となります。 たとえば、入力が(1,0)、重みが(0.5, 0.7)だとすると、1×0.5 + 0×0.7 = 0.5 を計算して閾値と比較します。

形式ニューロンの場合、入力が「0」か「1」、重みが「実数」、出力が「0」か「1」となります。

単位ステップ関数

後述するヘヴィサイド関数との違いは、x = 0 の時も1の値を持つものとして定義していること。

f(x) = \begin{cases} 1 & (x \geq 0) \\ 0 & (x < 0) \end{cases}

機械学習のサンプルプログラムで使用されるステップ関数は、x = 0 の時は0の値になっているので用途によって定義が違うんでしょうね。

def step(x): 
    return 1 if x > 0 else 0
f(x) = \begin{cases} 1 & (x > 0) \\ 0 & (x \leq 0) \end{cases}

f:id:Yaju3D:20170603024904p:plain

ヘヴィサイド関数

ヘヴィサイドの階段関数 は、正負の引数に対しそれぞれ 1, 0 を返す階段関数となります。

f(x) = \begin{cases} 1 & (x > 0) \\ 0 & (x < 0) \end{cases}

又は、原点を埋めて

f(x) = \begin{cases} 1 & (x > 0) \\ \frac{1}{2} & (x = 0)  \\ 0 & (x < 0) \end{cases}

パーセプトロン

単純パーセプトロン

単純パーセプトロンの活性化関数としてステップ関数を使用しています。
qiita.com

rightcode.co.jp

多層パーセプトロン

多層パーセプトロンの活性化関数としてステップ関数を使用しています。
rightcode.co.jp

ステップ関数の限界

多層パーセプトロンの精度をよくするための誤差逆伝播(バックプロパゲーション)が生み出されたのですが、ステップ関数は微分が出来ないため、ラメルハートらは誤差を伝播できるような微分可能な活性化関数として、シグモイド関数を用いるようになりました。
rightcode.co.jp

最後に

今の自分は本やWebサイトを見て知識を得ているだけで、本当の意味で理解出来ていないことがあらためて分かったので、ちゃんと理解するようにプログラムを組んでみることにします。

静岡の勉強会の構想を考える

はじめに

2016/4/23に静岡Developers勉強会で「人工知能ハンズオン」を開催しました。 yaju3d.hatenablog.jp

当時はTensorFlowが出始めて人工知能がバズワードでした。TensorFlowに関する本も少ない上に自分自分が機械学習に関する知識が全然なかったです。
ともかくネットで検索しまくって、分かりやすいと評判があった上野山徹さんが作成した八百屋の問題のスライドや定番のMNISTの文字認識をやりました。

いつかリベンジしないと思いつつ時が経ってしまいましたが、3年半の間に何もしていなかったわけではありません。ペースは遅いながらも着実に基礎的な部分の勉強はしてきました。

11月か12月を目処に「人工知能ハンズオン リベンジ」として勉強会を開催しようと思っています。

構想

9月中にTensorFlow 2.0がロードマップを見るとリリース予定になっています。だた、今回はTensorFlowを使うかは考え中です。

例えば画面に円を描きたいといった場合、APIを使えば難なく円を描けるでしょう。しかし、APIを使わないで円を描こうとしたらどうでしょう?
三角関数の知識が必要となりますね。一方でAPIを使えば円も描けて目的の表現が出来るなら別に数学の知識はいらないとも言えます。
以前、人工知能できゅうりの仕分けをしたとして話題がありましたが、TensorFlowの文字認識MNISTのサンプルを改良したら出来てしまったわけで、数学の知識を必要となったわけではありませんが、きゅうりの仕分けをする目的は達成できたのです。誰もが簡単に人工知能を使用して目的を果たせた良い事例となったのです。 数学の知識があっても人工知能ではどうしようもない場合があります。将棋の最強AIであるPonanzaを開発した山本一成さんは東京大学出身です。山本一成さんのドキュメンタリーを観たことがありますが、行き着くところまでいったPonanzaではパラメーターをいじることでしかより強くすることが出来ません。そして、そのパラメーターをどういじっていいのかは、もはや開発者本人にも分からない状態なのです。

パラメーターをいじって試すのにコストがあまりかからない場合はいいでしょうが、物によっては1回試して動かすのに数百万かかるとしたらどうでしょう? 人工知能がこういってますからと言ってもクライアントに納得行く説明ができないと駄目だったりします。例えば半導体とか試すだけでも何千万かかかります。

ちょっと話が行き過ぎました。そこまでいかなくても、最低限の数学の知識があった上で人工知能を使えるようになりたいわけです。

目標

「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」という名著があります。

この本に挫折した人が、勉強会を受けた後で読み直したら少しは理解が出来るようになったと言えるようにしたいのが今回の勉強会の目標としたいわけです。

予定

これから考えていきます。
1次方程式から傾きや切片、微分や確率など数学の基礎的なところからとなりますね。だから昨今の人工知能の派手さなんてものはありません。

Google Colaboratory と Google スプレッドシートを使用する予定なので、GoogleアカウントがあればPCにインストールは不要です。
タブレット端末とキーボードがあればいいような感じにしたいです。

ちなみに料金は無料です。会費は1万円くらい余っているので会場費がまかなえる。

最後に

この記事は少しずつ書き換えていきます。

瞬間英作文で調べたこと

はじめに

英語の勉強として瞬間英作文のiPhoneアプリ版を使用して、何回も繰り返しています。
その中で疑問に思ったことはネットで調べたりしています。その履歴を辿って一覧にしてみました。

単語・熟語

英単語

英単語 意味
always いつも
Although けれど
among ~の中で
asleep 眠っている
beautifully 見事
boiled egg ゆで玉子
boring 退屈
brush 磨く
cradle ゆりかご
dragonfly とんぼ
drow 絵(線画っぽい)
dish 料理
excite 興奮
fluently 流暢
good-looking ハンサム
independent 独立
let ~させる
necessary 必要(形容詞)
need 必要(他動詞)
make ~したい
noticed 気付いた
paint 絵(水彩画っぽい)
pleased 喜ぶ
rains 雨が降る
respect 尊敬
shake 揺れる
sing 歌う動作
song
sorry 残念
spicy 辛い
strong 濃い
such そんな
tried ~しようとした
until ~ まで
useful 役に立つ
veterinarian 獣医
weak 薄い

英熟語

英熟語 意味
a lot たくさん
a lot of fun とても楽しいこと
a lot of things 多くのこと
all fell asleep 皆眠った
As 文頭 ~なので 理由
around the world 世界中
ask you to ~するように頼む
at once すぐに
at the night 夜に
at your home あなたの家では
best way of 一番いい手法
broke down 故障した
come home 帰宅
decided not to 〜しないことにした
every evening 毎晩
for many hour every day 毎日何時間も
give up 諦めた
give me ~して ください
go abroad 海外へ
good at 得意です
in the dress ドレスを着ている
in the morning 朝に
is covered with snow 雪で覆われた
I’d like to ~したいのですが
late for ~に遅れる
lift it 持ち上げる
look interesting 面白そう
look like ~のように見える
looking for you 探している
make some coffee コーヒーを入れる
more often もっと頻繁
much higher ずっと 高い
near here この近く
of them all 彼らみんなの中で
some day いつか
stay up late 遅くまで起きて
such a thing そんなこと
spoken to us 僕たちに話しかけた
take off 離陸
the day after tomorrow 明後日
to be happy 幸せになる
very strong 丈夫
want to ~したがっている
want to be なりたがる
without working 働かない
will soon be able to じきに?出来るようになる
Will you please ~してくれますか
Will you please tell me 教えてもらえる?

検索したこと

最後に

英語って難しい、何も繰り返してもまだピンとこない。でも、しっくりくるまで繰り返していこう。

スポンサーリンク