AutoEncoderが学習する過程をアニメーションにしてみた

 先日、松尾先生にAutoEncoderこそが深層学習の本命だという話を聞いて、やっぱり作ってみるか、と思ってとりあえず作ってみるテスト。


 学習教材はMNIST。


 例によって6万epochぶんくらいの学習データセットをオートエンコーダーで教師なし学習させる(ここがポイント)。


 とりあえず500エポックほど0から9までの手書き数字を学習させたあと、下のような数字の7を見せた

https://i.gyazo.com/02023348fd031ec2924e1565e88f4a60.png


 この入力は28x28=784次元、これを約半分の400次元にまで圧縮して、その結果がどうなるかというもの。


 半分まで圧縮させたのに、もとの7に近い形になれば手書きの「7」というものの特徴量を中間層がうまく学習できたことを意味する。

https://i.gyazo.com/ae1dc47dba463f7d9ed9c191853c3898.gif


  「こんなんでほんとにうまくいくのかな」



 と半信半疑で作ってみると、なんと、上手くいく。

 作ってる人間が「ほんとにこれでいいのか?」と思っているのに上手く行ってしまうのが機械学習の凄いところだ。

 同時にかなりの黒魔術でもある。


 最初は完全なるランダム。

 それから、少しずつ数字っぽい形になっていって、最初は9と8と3が混じったような感じ、それからだんだんと7に近づいていく。最後はほぼ完全な7の形になって、少し感動した。


https://i.gyazo.com/54ffcfe99c717e9895f19b5653d23560.gif


 さらに、この中間層の特徴を1/4の100次元まで圧縮する第二層も同じようにオートエンコーダーで次元圧縮する。


 よくわからんが、安定している輝点があるので、このあたりが「7」の特徴量を掴んでいるのだろう。こういうのを人間が設計するのは無理ゲーなので、なるほどオートエンコーダーすげえ というわけだ。


 うーむ。楽しい。

 来週の「AI・人工知能ワールド」でなにか新しいものを出したくて、いまはAIとVRの組み合わせの展示を考えている。


 乞うご期待

shi3z
shi3z