おおまかな内容
ランダムな位置に配置した文字を中央に再現(デコード)するように学習させて、再現が問題なくできるかを確認しました。そのときに必要な資源についてもおおよその確認をしました。
なぜやるのか
汎用的に位置やサイズを正規化するような学習ができるか確認したいとおもいました。
準備と実験のやり方
前回の説明とおり28×28ドットのMNISTデータの領域を倍の56×56の領域に拡張し、そこに元の画像を配置しました。ランダムで配置すると諸々の資源が不足する見通しだったので、まずは縦方向3点(上、中、下)、横方向3点(左、中、右)の合計9点だけにランダム配置して元データ(x)を準備しました。そのデータにあわせて、元画像を必ず中央に配置している学習用のデータ(y)を準備しました。ノードは通常実験の100ノードの10倍の1000ノードとしました。
実験の結果
ノード数、画素数とも大きく増えたので通常10分程度の実験が3時間弱かかりました。ボクのコンピュータ的にめいっぱい積んである32GBメモリも90%以上使いました。(少し大きな別アプリが起動していると、OutOfMemoryがでる状況でした。)
このあたりがボクのコンピュータの実験の限界かもしれません。
結果は以下のようになりました。(Conditionに情報がないのですが、重み共有なし!です)
予想とおり、うまくいってしまいました。またまた面白くなくてどうもすみません。
テストの感覚ではノード数を10000程度にすれば、全点ランダム配置(28×28のランダム:今回テストは3×3のランダム配置)でもいけそうな感じはしました。実証しないとうまくいくといえないのでですが、マシンの限界近いので自動的正規化?のエンコード・デコードテストはいったん保留としようと思います。
まとめ
任意の位置の画像を特定の位置に再現する学習はノードを多く使用するものの、問題なくできそうなことがわかりました。(56×56の完全ランダム配置の再現に、どれくらいノードが必要かは現時点では検証できませんでした)
感想・思ったこと・考えたこと
(中間層:隠れ層が)1層とはいえ、また、ニューラルネットワークが万能的な関数再現機能をもっていることがわかっているとはいえ、ちゃんと学習して機能できることは感慨深いです。
サイズについての正規化もやってみたかったですが、資源不足になると思われるレベルなので、保留にします。
(追記)研究(その6)にも書きましたが、オペレーション自体を抽象化して学習しているのではなく、入力画像と正規化後の画像を関連づけて再現しているだけです。ただこれができるということは、資源さえあれば特定のオペレーションを含む画像変換(写像)を学習できるということになります。将来的にはオペレーション自体の「特徴」を抽出できるようにがんばります。
ディスニ-ランド&ディズニ-シーへ行くのが楽しみです。
ボクとしては多彩な実験をしているつもりですが、客観的にブログを読み返すと同じような感じの実験が続き、まったく面白みがありません。ある程度は予想はしていましたが、その予想以上につまらないブログとなってしまっております。大変申し訳ありません。
MNISTではまだやりたいことが山のようにあるのですが、「このままじゃだめじゃない?」感が強いので、少し趣向をかえて自己符号化器の『入力』を「画像」ではなく、「音」にしてみようと思います。pythonプログラミングで音に関する情報は画像ほどは多くないので厳しいのですが、チャレンジしてみます。本読みしたり、コードを調整したり、「音」のプログラム研究をしたり、情報をさがしたりたいへんそうです。そのため更新も今よりずっと減りそうですが、地道に自由研究していこうと思います。ディズニーランド&シーへいったり、完全に乗り遅れた「ポケモンGO」に本格参戦したり、いろいろ忙しいのですが頑張ります。