アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うこと。

特徴量を学習して補正出力するAUTO_ENCODERを試そう:使い方12/ニューラルネットワークコンソール

色々試すのは小休止して、Neural Network Console(ニューラルネットワークコンソール)についてるサンプルプロジェクトを試してみます。

 

階層が深くて学習に時間がかかるサンプルが多いのが難点ですけど、一部はCPUのみで動かしても現実的な学習時間でいけるものがあります。

 

そのひとつが、06_auto_encoder.sdcproj です。

 

これは、AUTO_ENCODERのサンプルです。

 

AUTO_ENCODERとは

 

簡単に言えば、入力データを隠れ層で一度次元圧縮して、特徴量を学習してから、入力データと同じサイズに戻して出力する・・というようなことをするわけです。

 

ちなみに次元圧縮というのは、例えばモノクロ画像「28✕28」の2次元の入力は、一旦、例えば「256」みたいな1次元に変換みたいに、次元数を減らすって感じですかね。

 

単純なコピーではなく、わざわざ特徴量学習の一手間をかけて何が良いか?というと、特徴を学習しているので、入力データよりも出力データの方が、より抽象的な特徴がはっきりしたものになっているのが期待できるという理屈です。

 

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

f:id:arakan_no_boku:20170920224458j:plain

 

 

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

 

AUTO_ENCODERを試してみる

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

 

プロジェクトの一覧から、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を体験した後なら、感覚的に、たしかにできそうな気がしませんか。

 

ソニーニューラルネットコンソール。

 

やっぱり、なかなか良いですよねえ。

 


ニューラルネットワークコンソールカテゴリの記事一覧はこちらです。

arakan-pgm-ai.hatenablog.com