TensorFlow で AutoEncoder
AutoEncoder
AutoEncoder は普通の多層 NN を用いますが、教師なし学習で、encode/decode 層を用意して入力サンプル・データと同じ出力が得られるように訓練します。言い換えれば、入力サンプル・データと同じパターンが復号(再構築)できれば特徴を上手くつかまえた隠れ層が得られることになります。特徴を上手くつかまえたまま次元削減ができるとも言えますし、その隠れ層(中間層)の出力はデータ表現とも考えられます。
AutoEncoder の実装については以下が十分過ぎるほど詳しいです。1層から始めて多層は deep autoencoder として一応区別されていて、denoising や convolutional autoencoder、更には sequence-to-sequence autoencoder についても説明されています :
今回は試していませんが、denoising autoencoder については以下も参考になります :
AutoEncoder for MNIST, using TensorFlow
AutoEncoder は TensorFlow のチュートリアルに含まれていても良いように思いますが、(把握している限りでは)見当たらないので MNIST を題材にして簡単に試しておきました。
といっても基本形を試すだけならやることは簡単で、モデルとしては Encoder / Decoder として FC 層を用意するだけです。1層でも良いのですが、2層ずつ用意してみました。当然、多層になれば再構築の結果も多少良くなります :
そして入出力ともに(ラベル Y は使わずに)訓練サンプル X で訓練します。損失グラフは以下のように普通な感じです :
訓練は 10 epochs 程度で十分でした。
以下は validation data を使って適当な epochs 後に再構築を試してみました。特に問題ないように見受けられますが、MNIST だと簡単過ぎるかもしれません。
1 epoch
5 epochs
20 epochs
Autoencoder では denoising が話題になりやすいですが、convolutional autoencoder も(上手く機能するのであれば)実用性がありそうです。
以上