Adversarial AutoEncoderで半教師あり学習

2016年08月09日

概要

はじめに

前回Adversarial AutoEncoderの記事を書きましたが、あれから3ヶ月後に論文が更新され、半教師あり学習への応用などの項目が追加されていました。

そこでChainer 1.12で実装し実験を行いました。

コードはGitHubにあります。

以下の説明は全てこのコードを元に行います。

またAdversarial AutoEncoderをこれ以降AAEと呼びます。

Adversarial Regularization

論文2.3節では隠れ変数$\boldsymbol z$をラベルデータを用いて正則化する方法について書かれています。

コードはsupervised/regularize_zにあります。

学習させると以下のように狙った箇所に隠れ変数を押し込めます。

aae

aae

Supervised Adversarial Autoencoders

論文4章ではAAEに画像のスタイルを学習させています。

ここでは隠れ変数$\boldsymbol z$を入力画像のスタイルとみなし、ラベルデータと$\boldsymbol z$の両方をAAEのデコーダーに入力し画像を複合します。

コードはsupervised/learn_styleにあります。

学習結果は以下のようになりました。

aae

学習時間やチューニングが足りていないのであまり良い結果とはいえませんが、数字のスタイルがちゃんと取れているように思えます。

Semi-Supervised Adversarial Autoencoders

論文5章はAAEを用いた半教師あり学習です。

これは前回のVAEによる半教師あり学習と同じく、MNISTのごく一部のデータ(たとえば100枚)だけ教師あり学習を行い、それ以外のデータでは教師なし学習を行います。

コードはsemi-supervised/classificationにあります。

実際に100枚だけにラベルをつけた半教師あり学習を行った際のバリデーションデータの分類精度が以下になります。

aae

論文では97%を超える精度が出ると書かれていますが残念ながら遠く及ばない結果になってしまいました。

私の実装に不備があるのかチューニングのせいなのかが分かりません。

Unsupervised Clustering with Adversarial Autoencoders

論文6章は教師なしクラスタリングです。

本来MNISTのクラスタ数は10ですが、ここでは16クラスタ(または32クラスタ)あると考えて入力画像を分類します。

コードはunsupervised/clusteringにあります。

学習結果

aae

aae

一番左の画像はcluster headを表しています。

これも学習時間が足りてないせいかあまり良い結果とは言えませんが、そこそこクラスタリングされているように思えます。

Dimensionality Reduction with Adversarial Autoencoders

論文7章は次元削減です。

普通のオートエンコーダも次元削減を行うモデルですが、ここでは6章の内容を拡張し、クラスタを考慮した次元削減を行います。

コードはunsupervised/dim_reductionsemi-supervised/dim_reductionにあります。

まず半教師あり学習による次元削減の結果です。

100ラベル

aae

1000ラベル

aae

次に教師なし学習で20クラスタを仮定した次元削減です。

aae

終わりに

学習に数日かけないと良い結果が出ない印象です。