おおまかな内容
作成した自己符号化器のプログラムを実行して、正しく動くか確かめました。プログラム自体の課題も、いろいろでてきました。
なぜやるのか・どこまでやるか
自己符号化器(AutoEncoder)には機械学習の本質がある気がしています。
作成したAutoEncoderプログラムを動作させてみます。
どうなると思うか
活性化関数がReLUだとそこそこはやめに収束しそうです。
隠れ層のノード数が多いと夜明けが見れると思われます。
準備と実験のやり方
軽いパラメータとCPUとしては重めのパラメータで実行してみます。
下の実験結果は「隠れ層ノード数 100、ノイズなし、重み共有あり、バッチ数20、Epoch数64」での結果です。
実験の結果
イメージの貼り付け方を勉強中です。
W1 Fig. Period 2 (Epoch 2)
W1 Fig. Period 3 (Epoch 4)
W1 Fig. Period 4 (Epoch 8)
W1 Fig. Period 5 (Epoch 16)
W1 Fig. Period 6 (Epoch 32)
W1 Fig. Period 7 (Epoch 64)
x_hat Fig. by Period 1 (Epoch 1)
x_hat Fig. by Period 2 (Epoch 2)
x_hat Fig. by Period 3 (Epoch 4)
x_hat Fig. by Period 4 (Epoch 8)
x_hat Fig. by Period 5 (Epoch 16)
x_hat Fig. by Period 6 (Epoch 32)
x_hat Fig. by Period 7 (Epoch 64)
Fig. Original MNIST Data
Fig. Loss
まとめ(わかったこと・わからなかったこと)
実験用途としては(当面支障なく自由研究できるくらいの)そこそこの性能(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で英語を勉強します。
本当に諸外国の(そして日本も!)研究者先生の勢いはすごいと思います。
蛇固(もと)より足無し。子安(いづく)んぞ能く之が足を為さんと
このプログラムをもとにして、まずはパラメータをかえてどんな動作をするかいろいろ見てみます。(先輩・先人の後を追ってみます)