変分自己符号化器(VAE)を学習したいKeras以下の記事の続きです。Kerasブログの自己符号化器チュートリアルをやるだけです。autoencoder(変分自己符号化器;VAE)をやります。ついてのチュートリアル上の説明は簡単なものなので、以下では自分で言葉を補っています。用いることができます。今回は、「それぞれの手書き数字には、その手書き数字に対応する隠れ変数の確率分布があって、その分布からの実現値を変換することによって手書き数字ができている」と仮定しています。ピクセルに変換されて目の前に手書き数字として具現化したのだと考えているわけです。今回訓練するのは以下のようなモデルになります。ここまでの自己符号化器では、入力と出力の交差エントロピーを損失関数としてモデルを訓練していました。同様に訓練してもよいのですが、今回は入力と出力の交差エントロピーに、隠れ変数空間の事前分布と事後分布のKL情報量も加えたものを損失関数とします。)モデリングでき、過学習も防げるそうです。このような特殊な損失関数を実現するために、訓練時には自分で定義したレイヤーを最後にかぶせて、そのレイヤーで入出力の交差エントロピーと事前事後分布のKL情報量を損失関数に加えています(スクリプトは記事の一番最後)。仕様をきちんと確認していないのですが、Layerクラスを継承して自分で定義したレイヤーでは損失関数を付加するということができ、それより手前の層に誤差逆伝播するのだと思います。訓練用データで学習しました(バッチサイズ:100、エポック数:10)。テストデータについて、隠れ変数の確率分布の平均をプロットすると以下のようになりました。同じ数字のデータを同じ色でプロットしています。