生成モデルVAE(Variational Autoencoder)
machinelearning生成モデルというのはデータの分布をモデリングしてそこから新しいデータを生成するもの。
VAEは入力xに対して何らかの分布を仮定し、例えばガウス分布(正規分布)だとすると平均μと分散σを推論し、
これをz=μ+(σ・ε) (ε~N(0,1))
の潜在変数に変換して生成モデルへの入力とし、その出力の尤度が最大化するように学習させる。
Variational Autoencoderという名前はこの分布を推論して生成する流れがAutoencoderの形式と似ているところから来ている。 Autoencoder(自己符号化器)というのはある入力をエンコードしてデコードしたときに入力と同じものを出力するように学習させたもので、 これによって次元削減された潜在変数zが得られる。
推論モデルの確率分布をq、生成モデルの確率分布をpとする。対数尤度log{p}を計算したいが潜在変数zが訓練データにないので周辺化する(1)。 これを変換していくと(2)のようになり、第二項のKL情報量は0以上の値になるので第一項のLを最大化することが対数尤度の最大化につながる。 このLをEvidence Lower Bound (ELBO)といい、推論モデルのパラメータφと生成モデルのパラメータθを交互に最適化して これを最大化させることで尤度の下界を引き上げていく。
自己情報量、エントロピー、KL情報量、交差エントロピーと尤度関数 - sambaiz-net
生成モデルがベルヌーイ分布、p(z)が標準正規分布とするとELBOは次のようになる。
第一項が再生成誤差。第二項によってp(z)とq(z|x)が近づくように学習し正則化され、zの各次元が独立になっていく。 これにβ>1を掛けるとさらに独立性が増し、次元ごとに、人であれば性別や年齢のような、disentangle(もつれを解く)された特徴を持つことができる。これをβ-VAEという。
PyTorchでVAEのモデルを実装してMNISTの画像を生成する - sambaiz-net
VAEは分布を仮定して尤度によって学習するため、真の分布にはないところの生成データが良くない問題がある。 VAE以外の生成モデルとしてGAN(Generative Adversarial Networks)があって、これはデータの分布を仮定せずより近い分布から良いデータを生成するのを目指す。
生成モデルGAN(Generative Adversarial Network) - sambaiz-net