変分オートエンコーダー

**変分オートエンコーダー**（; **VAE**）はオートエンコーディング変分ベイズアルゴリズムに基づいて学習される確率項つきオートエンコーダ型ニューラルネットワークである。

ニューラルネットワークを用いた生成モデルの一種であり、深層潜在変数モデルの一種でもある。

## オートエンコーディング変分ベイズアルゴリズムの概要
**オートエンコーディング変分ベイズアルゴリズム**（; **AEVB**）は勾配推定値を用いた有向潜在変数モデルと推論モデルの同時最適化アルゴリズムである。

AEVBでは有向潜在変数モデル p_{\theta}(\mathbf{x}, \mathbf{z})
= p_{\theta}(\mathbf{x} | \mathbf{z}) p_{\theta}(\mathbf{z})
 を推論モデル q_{\phi}(\mathbf{z}|\mathbf{x}) の導入による変分下界 \mathcal{L}_{\theta,\phi}(\mathbf{x}) 最大化により最適化する。一般に変分下界の勾配 \nabla_{\theta,\phi} \mathcal{L}_{\theta,\phi}(\mathbf{x}) は intractable であるが、AEVBではこれをモンテカルロ法 (z \sim q_{\phi}(\mathbf{z}|\mathbf{x})) を用いた勾配の不偏推定量 \hat{\nabla}_{\theta,\phi} \mathcal{L}_{\theta,\phi}(\mathbf{x}) で置き換え、確率的勾配降下法によりパラメータを最適化する。このとき q_{\phi}(\mathbf{z}|\mathbf{x}) の勾配推定・伝播に関する問題を reparameterization trick で解決する。

### セッティング
標本 X=\{\mathbf{x}^{(1)},\ldots,\mathbf{x}^{(N)}\} が各に対し、以下で生成されると仮定する#原論文：
* まず潜在変数が何らかの確率密度関数p_{\theta}(\mathbf{z})に従って選ばれ、
* がに依存した何らかの確率密度関数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はパラメーターである。

近似事後分布を用いると周辺対数尤度 \log p_{\theta}(\mathbf{x}) は次のように変形できる：

: \log p_{\theta}(\mathbf{x})
=  \mathbb{E}_{q_{\phi}(\mathbf{z}|\mathbf{x})} \left [ \log \frac{p_\theta(\mathbf{x}, \mathbf{z})}{q_{\phi}(\mathbf{z}|\mathbf{x})} \right ]
 + \mathbb{E}_{q_{\phi}(\mathbf{z}|\mathbf{x})} \left [ \log \frac{q_{\phi}(\mathbf{z}|\mathbf{x})}{p_\theta(\mathbf{z}|\mathbf{x})} \right ]


右辺の第1項は**変分下界** \mathcal{L}_{\theta, \phi}(\mathbf{x}) あるいは**ELBO**と呼ばれ、第2項は事後分布-近似事後分布間のカルバック・ライブラー情報量に相当する。すなわち次の式が成立している：

: \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}))

ここで \mathrm{KL} \geq 0 （ギブスの不等式）より、変分下界最大化は次の2つの意味を持つ：

* 近似事後分布の近似精度最大化（\mathrm{KL} \approx 0）
* 生成モデルの尤度最大化（\underset{\theta}{\operatorname{argmax}} \log p_{\theta}(\mathbf{x})）

ゆえに変分下界最大化は最尤推定の代替として利用できる。

### 目標
標本 X に対する変分下界を最大化する (\theta,\phi) を目標とする。すなわち次の式で表される：

: \underset{\theta, \phi}{\operatorname{argmax}} \ 
\mathbb{E}_{X}
  [
    \mathcal{L}_{\theta, \phi}(X)
  ]
= \underset{\theta, \phi}{\operatorname{argmax}}
\sum_{x \in X}\mathcal{L}_{\theta, \phi}(\mathbf{x})


### アルゴリズム

変分下界は一般には計算が簡単ではない。そこで q_{\phi}(\mathbf{z}|\mathbf{x}) が適切な仮定を満たすという条件下で変分下界の推定量を導入する#原論文。標本 X に対し確率勾配法を用いて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})をニューラルネットワークにより定義している。

### 意義
この最適化により以下の事ができるようになる：
* 見つけたを使う事でp_{\theta}(\mathbf{z})、p_{\theta}(\mathbf{x}|\mathbf{z})に従う確率変数、を生成する生成モデルを作成
* q_{\phi}(\mathbf{z}|\mathbf{x})によりp_{\theta}(\mathbf{z}|\mathbf{x})を推定
## 変分オートエンコーダーの概要

**変分オートエンコーダー**とは、オートエンコーディング変分ベイズアルゴリズムを使って学習するニューラルネットワーク（原論文では1層もしくは2層のパーセプトロン#原論文）ベースの生成モデルである。

### セッティング
変分オートエンコーダーでは、潜在変数が従う確率密度関数p_{\theta}(\mathbf{z})が標準正規分布
: \mathbf{z}\sim\mathcal{N}({\boldsymbol 0},I)    ...(D1)
に従っており#原論文、の従う条件つき確率密度関数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を持つニューラルネットワークである。

の次元はの次元より短く取る。これはE_{\phi}(\cdot)を用いる事で、データをもっと短いデータに「圧縮」し、D_{\theta}(\cdot)を用いる事でからを「復元」できる事を意味する（ただし実際にはE_{\phi}(\cdot)やD_{\theta}(\cdot)の後に正規乱数を取る操作があるので、「圧縮」したデータを「復元」しても元に戻らない）。このため
符号理論との類推から、E_{\phi}(\cdot)を**エンコーダー**、D_{\theta}(\cdot)を**デコーダー**と呼ぶ。

### アルゴリズム

変分オートエンコーダーの学習アルゴリズムは与えられたデータ集合X=\{\mathbf{x}^{(1)},\ldots,\mathbf{x}^{(N)}\}に対し、以上のような状況下でオートエンコーディング変分ベイズアルゴリズムを用いる事で、２つのニューラルネットワークD_{\theta}(\cdot)、E
_{\phi}(\cdot)のパラメーター、\phiを決定するものである。

一方、変分オートエンコーダーの生成アルゴリズムでは、まずは(D1)式のように標準正規分布に従いを生成し、生成したと学習済みのを使って(D2)式のようにを生成する。

## オートエンコーディング変分ベイズアルゴリズムの詳細

### SGVB推定量
変分下界は一般には計算が簡単ではない。ゆえに変分下界の推定量である**SGVB推定量**（Stochastic Gradient Variational Bayes estimator、確率的勾配変分ベイズ推定量）を導入する#原論文。
#### 仮定
SGVB推定量を導入する為、何らかの（容易に計算可能な）可微分関数と（容易にサンプルを抽出できる）確率分布 \mathcal{E} を用いて
: \mathbf{z}=g_{\phi}(\mathbf{x},{\boldsymbol \varepsilon})、ここで{\boldsymbol \varepsilon}\sim\mathcal{E}　　　...(P1)
とする事で確率密度関数q_{\phi}(\mathbf{z}|\mathbf{x})に従ったサンプルを抽出できる事を仮定する#原論文。

例えばVAEの場合は(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})で定義する部分を可微分で確定的な関数に置き換える事で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)を用いる事で変分下界を推定する**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}から独立に抽出した乱数であり、はハイパーパラメーターである。

SGVB推定量を計算するにはカルバック・ライブラー情報量\mathrm{KL}(q_{\phi}(\mathbf{z}|\mathbf{x})\|p(\mathbf{z}))
を計算できる必要がある。原論文ではこの値が計算できないときの為の推定量も提案しているが#原論文、本項では割愛する。

### アルゴリズム
オートエンコーディング変分ベイズアルゴリズムは確率的勾配降下法によりSGVB推定量を極大化する、\phiを求めるものである#原論文。以下で、はハイパーパラメーターである。

* 標本 X を入力として受け取る。
* 、\phiを初期化する。
* 、\phiが事前に定められた収束条件を満たすまで以下を繰り返す
** のサイズの部分集合をランダムに選ぶ
** 各\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推定量が具体的にどのような形になるのかを調べるだけである。

### SGVB推定量の具体的な形

本節では変分オートエンコーダーのケースにおいて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)
　　
である。ここではのデータ長であり、、、はそれぞれ、、の第成分である。

一方、(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)
ここではのデータ長であり、、はそれぞれ、の第成分である。

まとめると、
: \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)に従ってを選ぶ
* ({\boldsymbol \mu}_D,{\boldsymbol \sigma}_D^2) = D_{\phi}(\mathbf{z})を計算する。
* \mathcal{N}({\boldsymbol \mu}_D,{\boldsymbol \sigma}_D^2I)に従ってを選び、を出力する。

## 参考文献
* 原論文
**
* 関連論文
**
* 解説論文
**
**

## 関連項目
* オートエンコーダ