普通のオートエンコーダは、入力Xを潜在変数Zに次元圧縮することによって特徴量を学習するニューラルネットワークです。MNISTを例にとれば、学習を完了すると、ある数字Xを入力すると同じ形の数字X’を出力します。変分オートエンコーダーは、潜在変数Zが正規分布に従うように学習させることで、オートエンコーダと同様なことを実現するだけでなく、潜在変数Zを直接操作することで生成出力X’をコントロールすることができます。いうことで、今回は、変分オートエンコーダのサンプルプログラムで遊んでみます。適当なフォルダーに格納します。variational_autoencoder.pyフォルダーに移動し、上記コマンドを入力すれば、プログラムが動きます。潜在変数Zは2次元です。学習が完了すると、MNISTの0〜9の数字が潜在変数Zの2次元マップの何処にマッピングされたかの結果が表示されます(図の中の赤色の数字は、分かりやすいように後で追記しています)。これの何が凄いかというと、教師なし学習なのに、同じ数字はマップの大体同じエリアに集まり、綺麗に分類されているということです。1つ出力されるのが、これ。これは、潜在変数Zのデータから、どのような出力X’が生成されるかをマッピングしたものです。これの何が凄いのかと言うと、画像を入力をしなくても、潜在変数Zのデータを操作するだけで、出力X’を生成しているんです。正規分布に従うように学習しているので、隣り合った画像は連続的に変化するような分布になっています。潜在変数Zのデータを赤矢印のように操作して画像を生成させると、MNISTの数字のモーフィングができるはずです。digitプログラムの93行目から99行目までのところに、上記の様に2行追加して、実行します。(□□は行数、△△は列数)の形式で保存してくれます。保存した出力画像から必要なものを拾って、GIF動画にすると、こんな感じになります。潜在変数Zの空間に連続的に数字が分布している感じが、この動画からも分かると思います。次回は、オリジナルデータセットで再度VAEをやってみたいと思います。コメントをキャンセルメールアドレスが公開されることはありません。date*日本語が含まれない投稿は無視されますのでご注意ください。強化学習をやってみるRECOMMENDこちらの記事も人気です。一目惚れして、ディープラーニングを始めました。初心者の試行錯誤をブログにしています。