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