Neural Network Console(NNC)を用いたAutoEncoderの作成

杉浦です。株式会社キスモにインターンとして在籍しています。 


機械学習を学んで4ヶ月。

やっと少し分かってきたかなという感じでして、今回はインターンで学んだAutoEncoderを紹介しようと思います。

 

1. そもそも AutoEncoder って?
 f:id:kodamayu:20171017153034p:plain

上図のように、InputとOutputに同じ画像を与えることを考えます。この時、中間層の次元を絞ることで、このニューラルネットは入力画像に対して次元削減を行なっています。つまり、このニューラルネットは入力画像を出力で再現すべく、入力画像の画像らしさを特徴量として抽出することを学習していきます。


この例の場合、入力画像を次元削減することをEncodeと呼び、Encodeしたものに対して、Decodeすることで入力画像の再現を行います。このEncodeする部分をAutoEncoderと言います。

 

2. Fashion-MNIST

f:id:kodamayu:20171017153240p:plain

画像元:https://github.com/zalandoresearch/fashion-mnist

今回用いたDatasetsはFashion-MNISTです。
最近できたDatasetsらしく、MNISTが簡単すぎることや、使われすぎていることから生まれた流行りものです。
今回は、このDatasetsから画像のみを使用しました。

 

3. NNC で AutoEncoder を作ってみる

今回私が試行錯誤を重ねてやっと作った最高のネットがこちら。

f:id:kodamayu:20171017153848p:plain


とは言ってもNNCを使うと、いろんなネットをすぐに試せて非常に楽です。
私がDeep learningを楽に学べている9割はNNCのおかげですね。


このネットの特徴は、Convolution、Poolingによって28x28の大きさだった画像が、一次元のベクトルになっていることです。
そこからDeconvolutionを用いてDecodeすることで入力画像の再現を出力画像とします。

今回学習にはFashion-MNISTから画像を300枚、テストに100枚を用いました。

 

4. 結果

f:id:kodamayu:20171017153939p:plain


これは実際のNNCによるテストデータを用いた、Evaluation結果です。
左が入力、右は出力画像で、靴は靴らしい形をとっていることや、服は装飾が消えていること、なんとズボンは勝手に二股になっていることがわかります。

ちなみに中間層を出すのもNNCなら簡単です。

 

f:id:kodamayu:20171017154046p:plain


この中間層からは、1回目のPoolingでは画像の構造らしきものを捉えており、
2回目のPoolingではだいぶ抽象化され、画像の角を取らえているように見えます。
3回目のPoolingは出力が一次元ベクトルなので、画像としてはグレースケールの濃淡だけになります。

 

5. 感想

このようにNNCを用いると、まだまだ初心者の私でもこんな感じでなんでもできちゃいます。
ですがキスモの社員方々のサポートのおかげでここまで理解することができました。

最後までお付き合いいただきありがとうございました!

 

株式会社キスモ

インターン生 杉浦 太郎