"BOKU"のITな日常

62歳・文系システムエンジニアの”BOKU”は日々勉強を楽しんでます

サンプルでオートエンコーダ(AUTO_ENCODER)を体験する/Neural Network Consoleの使い方

Neural Network Console(ニューラルネットワークコンソール)についてるサンプルプロジェクトで「AUTO_ENCODER」を試してみます。

f:id:arakan_no_boku:20190326212937j:plain

 

AUTO_ENCODERとは

 

簡単に言えば。

単純にコピーするのではなくて、途中の隠れ層に自己学習させておいて、その学習結果を元に復元する・・みたいなことをする感じです。

 特徴を学習させる「エンコーダー」と、特徴を元に復元する「デコーダー」という部分から構成します。

なので、例えば学習だけさせておいて切り離して、デコーダーの部分だけ動かせば「学習結果を元に画像を生成する」・・みたいにも使えるわけです。

もっと詳しく知りたい時は、こちらの画像にリンクをはってますので、どうぞ。

f:id:arakan_no_boku:20170920224458j:plain

まあ、これは見てみるのが一番よくわかります。

 

AUTO_ENCODERを試してみる

 

ニューラルネットワークコンソール(Neural Network Console)を立ち上げます。 

 

06_auto_encoder.sdcprojを開く

 

プロジェクトの一覧から、06_auto_encoder.sdcproj を選択して開きます。

f:id:arakan_no_boku:20170920225427j:plain

サンプルのままで何も変更することはありません。 

28✕28サイズの二次元データの入力が、隠れ層にあたるAffineレイヤーで、256サイズの一次元データに次元圧縮され、出力でまた二次元に戻されているのが、わかります。

 

学習の実行

 

さて、学習をします。

f:id:arakan_no_boku:20170920225949j:plain

 

学習曲線はこんな感じです。

f:id:arakan_no_boku:20170920230125j:plain

 

分類問題ではないのですけど、きっちり特徴を学習している感じはわかります。 

 

評価の実行

 

続けて評価です。

f:id:arakan_no_boku:20170920230445j:plain

 

評価すると、元データ画像(X:image)と、学習済の出力(X')を比較してみることができます。

f:id:arakan_no_boku:20170920230735j:plain

 

元画僧と生成された画像の比較

 

横にならべて比較してみます。

f:id:arakan_no_boku:20170920231302j:plain

 

どうですか。 

 

特徴を学習することでハッキリした画像になってる!?

 

明らかに学習をして、より特徴のはっきりした画像として出力しているのが、よくわかりますよね。 

特に下2つの「9」なんか見事じゃないですか? 

完全に穴がつぶれてたり、一部が切れたりしているのを、整形してきれいな「9」の形になっていますものね。 

こういうのを見ると、イメージわきますね。 

例えば、ディープラーニングで画家の絵を学習させて、その画家の特徴をもった絵をかかせるとか、作曲家の楽曲を学習させて、その特徴をもった音楽を作曲させるみたいなアプローチも、この延長線上に(もちろん、全然別物の技術でしょうけど)あるという感じが。

 

AUTO_ENCODERは実用用途としては使われていない?

 

上記の結果を見れば、「AUTO_ENCODERで事前学習させた結果を、分類問題を解くニューラルネットワークのインプットに使うといいんじゃないか?」っていうのは、すぐに思いつきます。 

上で紹介した記事を見ても、実際にされてたみたいです。 

でも、残念ながら、そういう用途では今はほとんど使われないっぽいんですね。 

記事をちょっと引用してみます。

では、オートエンコーダが今のディープラーニングを支えているのかというと、そうでもなさそうだ。

深層学習ライブラリKerasのオートエンコーダのチュートリアルには、もう今では実用的な用途としてはめったに使われてないと書かれている。

オートエンコーダは画像のノイズ除去や可視化程度でしか利用目的がないとされている。

実は、その後ディープラーニングアルゴリズムは改良を重ね、事前学習をせずにランダム値を採用しても十分な精度が出るようになったのだ。

 なるほど。 

じゃあ、こうやって遊ぶより他に何の約にもたたないのか?というと、そんなことはありません。 

オートエンコーダの研究は進み、生成モデルで活用されはじめた。

ということなんですね。 

 

オートエンコーダーの発展系の事例

 

 下の記事にも、Variational Autoencoder という発展系の事例が紹介されています。

deepage.net

 

 それを使えば、こんな感じに学習データにないセレブっぽい顔を、学習して生成することができるというんですね。

f:id:arakan_no_boku:20170920234249j:plain

AutoEncoderなかなか恐るべしです。 

正直、いきなりこういう発展系を見せられても、ピンとこないんですが、今回みたいにシンプルなAutoEncoderを体験した後なら、感覚的に、ちょっと身近な気がします。  

ではでは。