変分オートエンコーダー
変分オートエンコーダー(Variational Auto-Encoder: VAE)とは、ニューラルネットワークを使った生成モデルのひとつである。
原論文ではまず、確率分布に対するパラメーター最適化アルゴリズムであるオートエンコーディング変分ベイズアルゴリズム(Auto-Encoding Variational Bayes (AEVB) algorithm)を導入し、その応用例として変分オートエンコーダーを導入しているので、本項でもこれにならい、まずはオートエンコーディング変分ベイズアルゴリズムから説明する。
今、データ集合X=\{\mathbf{x}^{(1)},\ldots,\mathbf{x}^{(N)}\}が各i=1,...,Nに対し、以下のように生成されていると仮定する#原論文:
まず潜在変数z(i)が何らかの確率密度関数p_{\theta}(\mathbf{z})に従って選ばれ、
x(i)がz(i)に依存した何らかの確率密度関数p_{\theta}(\mathbf{x}|\mathbf{z})に従って選ばれる。
ここでθは何らかのパラメーターであり、θの真の値θ*は未知である。またp_{\theta}(\mathbf{z})、p_{\theta}(\mathbf{x}|\mathbf{z})に従って値を選ぶのは計算量的に容易であるものとする。
一方、潜在変数の事後分布の確率密度関数p_{\theta}(\mathbf{z}|\mathbf{x})は容易には計算できず、(容易に計算できる)確率密度関数q_{\phi}(\mathbf{z}|\mathbf{x})により、近似する事を考える#原論文。ここで\phiはパラメーターである。
我々は、q_{\phi}(\mathbf{z}|\mathbf{x})がp_{\theta}(\mathbf{z}|\mathbf{x})をどの程度よく近似しているかを測る尺度として、以下の関数(変分下界と呼ばれる)を考える#原論文:
\mathcal{L}(\theta,\phi,\mathbf{x}):=\log p_{\theta}(\mathbf{x})-\mathrm{KL}(q_{\phi}(\mathbf{z}|\mathbf{x})\|p_{\theta}(\mathbf{z}|\mathbf{x}))
ここでKLはカルバック・ライブラー情報量である。カルバック・ライブラー情報量は常に非負である(ギブスの不等式)ので、\mathcal{L}(\theta,\phi,\mathbf{x})は自己情報量\log p_{\theta}(\mathbf{x})の下界になっており、q_{\phi}(\mathbf{z}|\mathbf{x})がp_{\theta}(\mathbf{z}|\mathbf{x})を(カルバック・ライブラー情報量の意味で)よく近似しているほど\log p_{\theta}(\mathbf{x})に近づく。
我々の目標は、与えられたデータ集合X=\{\mathbf{x}^{(1)},\ldots,\mathbf{x}^{(N)}\}に対し、下界\sum_{i=1}^N\mathcal{L}(\theta,\phi,\mathbf{x}^{(i)})が可能な限り大きくなるパラメーターの組(\theta,\phi)を見つける事である。
これができれば特に以下の事ができるようになる:
見つけたθを使う事でp_{\theta}(\mathbf{z})、p_{\theta}(\mathbf{x}|\mathbf{z})に従う確率変数z、xを生成する生成モデルを作成
q_{\phi}(\mathbf{z}|\mathbf{x})によりp_{\theta}(\mathbf{z}|\mathbf{x})を推定
後述する生成モデルである変分オートエンコーダーは、xの生成モデルが作れるという上述の事実をニューラルネットワークに適用する事で得られる。
しかし前述した変分下界\mathcal{L}(\theta,\phi,\mathbf{x})は一般には計算が簡単ではない。そこで我々は、q_{\phi}(\mathbf{z}|\mathbf{x})が適切な仮定を満たすという条件下、SGVB推定量(Stochastic Gradient Variational Bayes estimator、確率的勾配変分ベイズ推定量)という、変分下界の推定量を導入する#原論文。
オートエンコーディング変分ベイズアルゴリズム(Auto-Encoding VB (AEVB) algorithm)は与えられたデータ集合X=\{\mathbf{x}^{(1)},\ldots,\mathbf{x}^{(N)}\}に対し、確率勾配法を用いてSGVB推定量を極大化するものである#原論文。
本章で想定しているセッティングにおいて、既知の手法の有用性は限定的である#原論文:
最尤法は本章のセッティングではp_{\theta}(\mathbf{x})=\int p_{\theta}(\mathbf{x}|\mathbf{z})p_{\theta}(\mathbf{z})\mathrm{d}\mathbf{z}が容易に計算できるケースでないと使えない。
EMアルゴリズムはp_{\theta}(\mathbf{z}|\mathbf{x})の計算が容易であるケースでないと使えない。
変分ベイズ法はp_{\theta}(\mathbf{z}|\mathbf{x})が平均場近似できる場合にしか使えない。
モンテカルロEMアルゴリズムは実行速度が遅い為大きなデータ集合に対しては使えない。
例えばp_{\theta}(\mathbf{x}|\mathbf{z})がニューラルネットワークにより定義されているケースでは、上述した既知の手法は使えないが、本手法であれば適用できる。後述する変分オートエンコーダーはまさにこのケースであり、p_{\theta}(\mathbf{x}|\mathbf{z})をニューラルネットワークにより定義している。
変分オートエンコーダーとは、オートエンコーディング変分ベイズアルゴリズムを使って学習するニューラルネットワーク(原論文では1層もしくは2層のパーセプトロン#原論文)ベースの生成モデルである。
変分オートエンコーダーでは、潜在変数zが従う確率密度関数p_{\theta}(\mathbf{z})が標準正規分布
\mathbf{z}\sim\mathcal{N}({\boldsymbol 0},I)    ...(D1)
に従っており#原論文、xの従う条件つき確率密度関数p_{\theta}(\mathbf{x}|\mathbf{z})が
\mathbf{x}\sim\mathcal{N}({\boldsymbol \mu}_D,{\boldsymbol \sigma}_D^2I)、ここで({\boldsymbol \mu}_D,{\boldsymbol \sigma}_D^2) = D_{\theta}(\mathbf{z})       ...(D2)
という形であるものとする#原論文。上でD_{\theta}(\cdot)はパラメーターθを持つニューラルネットワークである。
さらに事後分布p_{\theta}(\mathbf{z}|\mathbf{x})を近似する条件つき確率密度関数q_{\phi}(\mathbf{z}|\mathbf{x})として
\mathbf{z}\sim\mathcal{N}({\boldsymbol \mu}_E,{\boldsymbol \sigma}_E^2I)、ここで({\boldsymbol \mu}_E,{\boldsymbol \sigma}_E^2) = E_{\phi}(\mathbf{x})  …(E1)
という形のものを考える#原論文。上でE
_{\phi}(\cdot)はパラメーター\phiを持つニューラルネットワークである。
zの次元はxの次元より短く取る。これはE_{\phi}(\cdot)を用いる事で、データxをもっと短いデータzに「圧縮」し、D_{\theta}(\cdot)を用いる事でzからxを「復元」できる事を意味する(ただし実際にはE_{\phi}(\cdot)やD_{\theta}(\cdot)の後に正規乱数を取る操作があるので、「圧縮」したデータを「復元」しても元に戻らない)。このため
符号理論との類推から、E_{\phi}(\cdot)をエンコーダー、D_{\theta}(\cdot)をデコーダーと呼ぶ。
変分オートエンコーダーの学習アルゴリズムは与えられたデータ集合X=\{\mathbf{x}^{(1)},\ldots,\mathbf{x}^{(N)}\}に対し、以上のような状況下でオートエンコーディング変分ベイズアルゴリズムを用いる事で、2つのニューラルネットワークD_{\theta}(\cdot)、E
_{\phi}(\cdot)のパラメーターθ、\phiを決定するものである。
一方、変分オートエンコーダーの生成アルゴリズムでは、まずは(D1)式のように標準正規分布に従いzを生成し、生成したzと学習済みのθを使って(D2)式のようにxを生成する。
以下、概要の章で定義した記号は説明なく用いる。
概要の章で述べたように、オートエンコーディング変分ベイズアルゴリズムで考えている変分下界
\mathcal{L}(\theta,\phi,\mathbf{x}):=\log p_{\theta}(\mathbf{x})-\mathrm{KL}(q_{\phi}(\mathbf{z}|\mathbf{x})\|p_{\theta}(\mathbf{z}|\mathbf{x}))
は一般には計算が簡単ではない為、SGVB推定量という、変分下界の推定量を導入する必要があった#原論文。本節ではSGVB推定量の詳細を述べる。
SGVB推定量を導入する為、何らかの(容易に計算可能な)可微分関数と(容易にサンプルを抽出できる)確率分布\mathcal{E}を用いて
\mathbf{z}=g_{\phi}(\mathbf{x},{\boldsymbol \varepsilon})、ここで{\boldsymbol \varepsilon}\sim\mathcal{E}   ...(P1)
とする事で確率密度関数q_{\phi}(\mathbf{z}|\mathbf{x})に従ったサンプルを抽出できる事を仮定する#原論文。
なお変分オートエンコーダーの場合は(E1)より
\mathcal{E}=\mathcal{N}(\mathbf{0},I)、g_{\phi}(\mathbf{x},{\boldsymbol \varepsilon})={\boldsymbol \mu}_E+{\boldsymbol \sigma}_E^2\odot {\boldsymbol \varepsilon}   ...(P2)
とすればこの仮定が満たされる事がわかる。ここで「\odot」は成分毎の積である。
後でSGVB推定量を定義する際に仮定(P1)を使う事で、本来は確率分布q_{\phi}(\mathbf{z}|\mathbf{x})で定義する部分を可微分で確定的な関数gに置き換える事でSGVB推定量の可微分性を保証する。これによりSGVB推定量を微分して勾配法により(\theta,\phi)の最適解を求める事ができるようになる。原論文ではこのように確率分布を可微分な確定的関数に置き換えるテクニックをreparameterization trickと呼んでいる#原論文。
\mathcal{L}(\theta,\phi,\mathbf{x})
=\mathbb{E}_{q_{\phi}(\mathbf{z}|\mathbf{x})}[\log p_{\theta}(\mathbf{x}|\mathbf{z}))]-\mathrm{KL}(q_{\phi}(\mathbf{z}|\mathbf{x})\|p(\mathbf{z}))
と書き換えられる事が示せる(ここで\mathbb{E}[\cdot]は期待値である)ので、仮定(P1)を用いる事で\mathcal{L}(\theta,\phi,\mathbf{x})の値を推定するSGVB推定量を
\tilde{\mathcal{L}(\theta,\phi,\mathbf{x},({\boldsymbol \varepsilon}^{(\ell)})_{\ell=1,\ldots,L}))
= {1\over L}\sum_{\ell=1}^L\log p_{\theta}(\mathbf{x}|g_{\phi}(\mathbf{x},{\boldsymbol \varepsilon}^{(\ell)}))-\mathrm{KL}(q_{\phi}(\mathbf{z}|\mathbf{x})\|p(\mathbf{z}))
...(L1)
により定義する#原論文。ここで{\boldsymbol \varepsilon}^{(\ell)}(\ell=1,\ldots,L)は \mathcal{E}から独立に抽出した乱数であり、Lはハイパーパラメーターである。
SGVB推定量を計算するにはカルバック・ライブラー情報量\mathrm{KL}(q_{\phi}(\mathbf{z}|\mathbf{x})\|p(\mathbf{z}))
を計算できる必要がある。原論文ではこの値が計算できないときの為の推定量も提案しているが#原論文、本項では割愛する。
オートエンコーディング変分ベイズアルゴリズムは確率的勾配法によりSGVB推定量を極大化するθ、\phiを求めるものである#原論文。以下でL、Mはハイパーパラメーターである。
データ集合X=\{\mathbf{x}^{(1)},\ldots,\mathbf{x}^{(N)}\}を入力として受け取る。
θ、\phiを初期化する。
θ、\phiが事前に定められた収束条件を満たすまで以下を繰り返す
XのサイズMの部分集合X'をランダムに選ぶ
各\mathbf{x}\in X'に対し{\boldsymbol \varepsilon}_\mathbf{x}^{(1)},\ldots,{\boldsymbol \varepsilon}_\mathbf{x}^{(L)}を\mathcal{E}に従って選ぶ。
\sum_{\mathbf{x}\in X'}\nabla_{\theta,\phi}\tilde{\mathcal{L}(\theta,\phi,\mathbf{x},({\boldsymbol \varepsilon}_\mathbf{x}^{(\ell)})_{\ell=1,\ldots,L})
を使ってθ、\phiを更新
θ、\phiを出力
すでに述べたように、変分オートエンコーダーの学習アルゴリズムは、p_{\theta}(\mathbf{z})、p_{\theta}(\mathbf{x}|\mathbf{z})、q_{\phi}(\mathbf{x}|\mathbf{z})からのサンプリングが(D1)、(D2)、(E1)に従ってできるケースにおいてオートエンコーディング変分ベイズアルゴリズムを実行するというものである。
従って変分オートエンコーダーの学習アルゴリズムを書きくだす上で必要となる作業は、(D1)、(D2)、(E1)に従っているケースにおいてオートエンコーディング変分ベイズアルゴリズムにおけるSGVB推定量が具体的にどのような形になるのかを調べるだけである。
\tilde{\mathcal{L}(\theta,\phi,\mathbf{x},({\boldsymbol \varepsilon}^{(\ell)})_{\ell=1,\ldots,L}))
= {1\over L}\sum_{\ell=1}^L\log p_{\theta}(\mathbf{x}|g_{\phi}(\mathbf{x},{\boldsymbol \varepsilon}^{(\ell)}))-\mathrm{KL}(q_{\phi}(\mathbf{z}|\mathbf{x})\|p(\mathbf{z}))
...(L1、再掲)
の具体的な形を求める。
(P2)、(E1)、(D2)より、
({\boldsymbol \mu}_E,{\boldsymbol \sigma}_E^2) = E_{\phi}(\mathbf{x})、({\boldsymbol \mu}^{(\ell)}_D,({\boldsymbol \sigma}^{(\ell)}_D)^2) = D_{\theta}({\boldsymbol \mu}_E+{\boldsymbol \sigma}_E^2\odot{\boldsymbol \varepsilon}^{(\ell)})
とすると、 p_{\theta}(\mathbf{x}|g_{\phi}(\mathbf{x},{\boldsymbol \varepsilon}^{(\ell)}))が正規分布\mathcal{N}({\boldsymbol \mu}^{(\ell)}_D,({\boldsymbol \sigma}^{(\ell)}_D)^2I)の確率密度関数であることから、
\log p_{\theta}(\mathbf{x}|g_{\phi}(\mathbf{x},{\boldsymbol \varepsilon}^{(\ell)}))
=-\frac{K}{2}\log 2\pi
-\frac{1}{2}\sum_{k=1}^K\left({(x_k-\mu^{(\ell)}_{D,k})^2\over (\sigma^{(\ell)}_{D,k})^2}-\log\sigma^{(\ell)}_{D,k}\right)
である。ここでKはxのデータ長であり、xk、μ(l)D,k、σ(l)D,kはそれぞれx、μ(l)D、σ(l)Dの第k成分である。
一方、(L1)の第2項を具体的に計算すると以下のようになる#原論文:
\mathrm{KL}(q_{\phi}(\mathbf{x}|\mathbf{z})\|p(\mathbf{z}))
={1\over 2}\sum_{j=1}^J\left(1-\mu_{E,j}{}^2-\sigma_{E,j}{}^2+\log \sigma_{E,j}{}^2\right)
ここでJはzのデータ長であり、μE,j、σE,jはそれぞれμE、σEの第j成分である。
まとめると、
\tilde{\mathcal{L}(\theta,\phi,\mathbf{x},({\boldsymbol \varepsilon}^{(\ell)})_{\ell=1,\ldots,L}))
= -\frac{K}{2}\log 2\pi-{1\over L}\sum_{\ell=1}^L\sum_{k=1}^K
\left({(x_k-\mu^{(\ell)}_{D,k})^2\over (\sigma^{(\ell)}_{D,k})^2}-\log\sigma^{(\ell)}_{D,k}\right)
-{1\over 2}\sum_{j=1}^J\left(1-\mu_{E,j}{}^2-\sigma_{E,j}{}^2+\log \sigma_{E,j}{}^2\right)
...(L2)
ここで、
({\boldsymbol \mu}_E,{\boldsymbol \sigma}_E^2)
= ((\mu_{E,j})_{j=1,\ldots,J},((\sigma_{E,j})_{j=1,\ldots,J})
=E_{\phi}(\mathbf{x})
({\boldsymbol \mu}^{(\ell)}_D,({\boldsymbol \sigma}^{(\ell)}_D)^2)
= ((\mu^{(\ell)}_{D,j})_{j=1,\ldots,K},((\sigma^{(\ell)}_{D,j})_{j=1,\ldots,K})
= D_{\theta}({\boldsymbol \mu}_E+{\boldsymbol \sigma}_E^2\odot{\boldsymbol \varepsilon}^{(\ell)})
以上の結果から、変分オートエンコーダーは以下のようになる:
学習:
オートエンコーディング変分ベイズアルゴリズムを実行。ただし\mathcal{E}=\mathcal{N}(\mathbf{0},I)とし、\tilde{\mathcal{L}は(L2)のものを使う。
生成:
学習済みの\phiを入力として受けとる
\mathcal{N}(\mathbf{0},I)に従ってzを選ぶ
({\boldsymbol \mu}_D,{\boldsymbol \sigma}_D^2) = D_{\phi}(\mathbf{z})を計算する。
\mathcal{N}({\boldsymbol \mu}_D,{\boldsymbol \sigma}_D^2I)に従ってxを選び、xを出力する。