読者です 読者をやめる 読者になる 読者になる

クーの自由研究

かえるのクーが素朴な疑問を実験して報告します。(冬眠から目覚めました!)

自由研究の準備(その3)実験プログラムを動作させてみます

自己符号化器 自己符号化器-準備

おおまかな内容

作成した自己符号化器のプログラムを実行して、正しく動くか確かめました。プログラム自体の課題も、いろいろでてきました。

なぜやるのか・どこまでやるか

自己符号化器(AutoEncoder)には機械学習の本質がある気がしています。
作成したAutoEncoderプログラムを動作させてみます。 

どうなると思うか

活性化関数がReLUだとそこそこはやめに収束しそうです。
隠れ層のノード数が多いと夜明けが見れると思われます。 

準備と実験のやり方

軽いパラメータとCPUとしては重めのパラメータで実行してみます。

下の実験結果は「隠れ層ノード数 100、ノイズなし、重み共有あり、バッチ数20、Epoch数64」での結果です。

実験の結果

イメージの貼り付け方を勉強中です。

load MNIST dataset
---Start---
epoch = 1: loss = 2.260475: 	time = 0.395
period = 1 ----------
epoch = 2: loss = 1.597359: 	time = 0.378
period = 2 ----------
epoch = 3: loss = 1.454064: 	time = 0.366
epoch = 4: loss = 1.359686: 	time = 0.376
period = 3 ----------
epoch = 5: loss = 1.317515: 	time = 0.378
epoch = 6: loss = 1.240451: 	time = 0.369
epoch = 7: loss = 1.217167: 	time = 0.376
epoch = 8: loss = 1.211515: 	time = 0.367
period = 4 ----------
epoch = 9: loss = 1.200532: 	time = 0.373
epoch = 10: loss = 1.155712: 	time = 0.379
...
epoch = 61: loss = 0.902373: time = 0.389
epoch = 62: loss = 0.910551: time = 0.385
epoch = 63: loss = 0.903454: time = 0.383
epoch = 64: loss = 0.890724: time = 0.392
period = 7 ----------
W1 Fig. Period 1 (Epoch 1)

f:id:np2LKoo:20160725010622p:plain

W1 Fig. Period 2 (Epoch 2)

f:id:np2LKoo:20160725010950p:plain

W1 Fig. Period 3 (Epoch 4)

f:id:np2LKoo:20160725011052p:plain

W1 Fig. Period 4 (Epoch 8)

f:id:np2LKoo:20160725011116p:plain

W1 Fig. Period 5 (Epoch 16)

f:id:np2LKoo:20160725011127p:plain

W1 Fig. Period 6 (Epoch 32)

f:id:np2LKoo:20160725011136p:plain

W1 Fig. Period 7 (Epoch 64)

f:id:np2LKoo:20160725011146p:plain

x_hat Fig. by Period 1 (Epoch 1)

f:id:np2LKoo:20160725011621p:plain

x_hat Fig. by Period 2 (Epoch 2)

f:id:np2LKoo:20160725011705p:plain

x_hat Fig. by Period 3 (Epoch 4)

f:id:np2LKoo:20160725011720p:plain

x_hat Fig. by Period 4 (Epoch 8)

f:id:np2LKoo:20160725011736p:plain

x_hat Fig. by Period 5 (Epoch 16)

f:id:np2LKoo:20160725011753p:plain

x_hat Fig. by Period 6 (Epoch 32)

f:id:np2LKoo:20160725011804p:plain

x_hat Fig. by Period 7 (Epoch 64)

f:id:np2LKoo:20160725011905p:plain

Fig. Original MNIST Data

f:id:np2LKoo:20160725011932p:plain

Fig. Loss

f:id:np2LKoo:20160725012018p:plain

まとめ(わかったこと・わからなかったこと)

実験用途としては(当面支障なく自由研究できるくらいの)そこそこの性能(Encode/Decode)を出せていると思います。

1Epoch 0.4Sec程度!です。64Epochまわしても1分以内にかえってきます。インチキして工夫して少ししか学習していない割にはW層がそれっぽい状態になり、x_hat(Encode してDecodeしたもの)もそこそこの再現ができています。もちろん1000ノードくらいでまわすと10倍以上かかりますが、許容範囲です。今のところ(精度以外の目的の実験をするつもりなので、)精度(誤差収束)には目をつむっています。自白しますが、1Epoch内で歯抜けでデータを読んでいるので、本当は1Epochやりました!とはいえないんだと思います。

とはいえ、ボクの実験には丁度いい感じになりました。これでGPUをしばらく買わなくてもやれそうです。

ReLUだともっといい感じだろうと思ってやってみたら、エラーになりました。ロス計算の部分をLeRU用に書いていなかったので、宿題です。(グーグル先生によれば、機械学習のプログラムで、誰もが一度は「はまる」ことのようです。)

あと、実行時に条件の表示をしていないのはよろしくないですね。これも宿題です。

(追記)なお、課題がでてきたので軽いパラメータのもののみ確認しました。時間のかかる重い実験は本編で行おうと思います。

 感想・思ったこと・考えたこと

DropOutがうまく書けない(といっても10行くらい書き加えただけですが。)ので、Pythonのスキルが上がってから再チャレンジします。当面はDropOutに関係ない実験をしようと思います。

また、作ったつもりのReLUでの計算ができていませんでした。

反省はいろいろありますが、とても充実した週末でした。

参考にした資料

クリックをたどれば、そこには英語。PodCastで英語を勉強します。
本当に諸外国の(そして日本も!)研究者先生の勢いはすごいと思います。

蛇固(もと)より足無し。子安(いづく)んぞ能く之が足を為さんと 

このプログラムをもとにして、まずはパラメータをかえてどんな動作をするかいろいろ見てみます。(先輩・先人の後を追ってみます)