趣味のPython・深層学習

中級者のための実装集

VAEの基礎:ELBOとは何か?確率論から徹底解説!

こんにちは。今回はVAE(Variational Auto-Encoder)の核となる概念の一つであるELBO(Evidence Lower Bound)についてゼロから丁寧に解説していきます。VAEの理論はややこしく数式が多いので、できるだけ平易な言葉で基礎から説明していきます。

VAEとは?

VAEはディープラーニングの一種で、主に以下の2つの目的で使われています。

生成モデル: 学習したデータ分布から新しいデータを生成すること 次元圧縮: 高次元のデータを低次元の潜在変数で表現すること

VAEはこの両方の目的を同時に達成できる強力なモデルなのです。 VAEの目的は「データ分布P(x)をモデル化する」こと VAEの目的は上記2点にありますが、根本的には「データ分布P(x)を適切にモデル化する」ということに尽きます。P(x)とは、学習データxが発生する確率分布のことです。例えば、画像データならある画像が出現する確率分布です。 P(x)をモデル化できれば、その分布から新しい画像を生成できたり(生成モデル)、さらには画像の特徴を潜在変数で表現できたり(次元圧縮)することができます。つまり、VAEの2つの目的は両立するわけです。 P(x)はP(x|z)とP(z)の積分で表せる さて、P(x)をモデル化するにはどうすればよいでしょうか?実は確率論の基本法則によって、次のように変形できます。

P(x) = ∫ P(x|z) P(z) dz

P(z): 潜在変数zの確率分布(事前分布) P(x|z): 潜在変数zが与えられた時の、xの条件付き確率分布

つまり、潜在変数zの分布P(z)と、zが与えられた時のxの条件付き分布P(x|z)の積を、zについて積分することでP(x)が求まるということです。 VAEではP(x|z)とP(z)をモデル化する VAEでは、P(x|z)とP(z)を以下のようにモデル化(近似)します。

P(x|z) ≈ P(x|z;θdec) : デコーダーの出力分布(θdecはデコーダーの重み) P(z) ≈ P(z;θprior) : 単純な事前分布(例:標準正規分布、θpriorはその母数)

さらに、P(z|x)を推論(計算)するためにエンコーダーを導入し、Q(z|x) ≈ Q(z|x;θ_enc)としています。 ELBOはP(x)の下限値 ここでようやく、ELBOが登場します。ELBOは以下の式で定義されています。

ELBO = E_Q(z|x)[log P(x|z)] - D_KL(Q(z|x) || P(z))

第1項: Q(z|x)での期待値。P(x|z)の近似 第2項: Q(z|x)とP(z)のずれ(KLダイバージェンス)

そして、この重要な性質があります。 Copy codelog P(x) >= ELBO つまり、ELBOはlogP(x)の下限値(Lower Bound)となるのです! これが大切なポイントです。P(x)をモデル化するには、その対数をできるだけ大きくしたいわけですが、ELBOを最大化すればlogP(x)の値も大きくできます。 ELBOを最大化することでVAEの目的を達成 VAEの学習では、エンコーダーデコーダーの重みを調整し、ELBOを最大化するように学習を行います。すると、

第1項が最大化 => P(x|z)の近似がうまくいく 第2項が最小化 => Q(z|x)とP(z)のずれが小さくなる

つまり、P(x|z)とP(z)がうまく最適化され、その積分値としてのP(x)がより適切にモデル化できるようになるのです。 こうしてELBOを最大化することで、VAEの目的である「データ分布P(x)の適切なモデル化」と、その過程での「生成モデル」「次元圧縮」が同時に実現できるわけです。