变分自编码器

機器學習中，**變分自編碼器（Variational Autoencoder，VAE）** 是由 Diederik P. Kingma 和 Max Welling 提出的一種人工神經網絡結構，屬於概率圖模式和變分貝葉斯方法。

VAE 與自編碼器模型有關，因為兩者在結構上有一定親和力，但在目標和數學表述上有很大區別。VAE 屬於概率生成模型（Probabilistic Generative Model），神經網絡僅是其中的一個組件，依照功能的不同又可分為編碼器和解碼器。編碼器可將輸入變量映射到與變分分布的參數相對應的潛空間（Latent Space），這樣便可以產生多個遵循同一分布的不同樣本。解碼器的功能基本相反，是從潛空間映射回輸入空間，以生成數據點。雖然噪聲模型的方差可以單獨學習而來，但它們通常都是用重參數化技巧（Reparameterization Trick）來訓練的。

此類模型最初是為無監督學習設計的，但在半監督學習和監督學習中也表現出卓越的有效性。

## 結構與操作概述

VAE 是一個分別具有先驗和噪聲分布的生成模型，一般用最大期望算法（Expectation-Maximization meta-algorithm）來訓練。這樣可以優化數據似然的下限，用其它方法很難實現這點，且需要 q 分布或變分後驗。這些 q 分布通常在一個單獨的優化過程中為每個單獨數據點設定參數；而 VAE 則用神經網絡作為一種攤銷手段來聯合優化各個數據點，將數據點本身作為輸入，輸出變分分布的參數。從一個已知的輸入空間映射到低維潛空間，這是一種編碼過程，因此這張神經網絡也叫「編碼器」。

解碼器則從潛空間映射回輸入空間，如作為噪聲分布的平均值。也可以用另一個映射到方差的神經網絡，為簡單起見一般都省略掉了。這時，方差可以用梯度下降法進行優化。

優化模型常用的兩個術語是「重構誤差（reconstruction error）」和「KL 散度」。它們都來自概率模型的自由能表達式（Free Energy Expression ），因而根據噪聲分布和數據的假定先驗而有所不同。例如，像 IMAGENET 這樣的標準 VAE 任務一般都假設具有高斯分布噪聲，但二值化的 MNIST 這樣的任務則需要伯努利噪聲。自由能表達式中的 KL 散度使得與 p 分布重疊的 q 分布的概率質量最大化，但這樣可能導致出現搜尋模態（Mode-Seeking Behaviour）。自由能表達式的剩餘部分是「重構」項，需要用採樣逼近來計算其期望。

## 系統闡述

從建立概率模型的角度來看，人們希望用他們選擇的參數化概率分布 $p_{\theta }(x)=p(x|\theta )$ 使數據 $x$ 的概率最大化。這一分布常是高斯分布 $N(x|\mu ,\sigma )$ ，分別參數化為 $\mu $ 和 $\sigma $ ，作為指數族的一員很容易作為噪聲分布來處理。簡單的分布很容易最大化，但如果假設了潛質（latent） $z$ 的先驗分布，可能會產生難以解決的積分。讓我們通過對 $z$ 的邊緣化找到 $p_{\theta }(x)$ 。

　
: $p_{\theta }(x)=\int _{z}p_{\theta }({x,z})\,dz,$

其中， $p_{\theta }({x,z})$ 表示可觀測數據 $x$ 於 $p_{\theta }$ 下的聯合分布，和在潛空間中的形式（也就是編碼後的 $z$ ）。根據連鎖法則，方程可以改寫為

　
: $p_{\theta }(x)=\int _{z}p_{\theta }({x|z})p_{\theta }(z)\,dz$

在香草 VAE 中，通常認為 $z$ 是實數的有限維向量， $p_{\theta }({x|z})$ 則是高斯分布。那麼 $p_{\theta }(x)$ 便是高斯分布的混合物。

現在，可將輸入數據和其在潛空間中的表示的映射定義為

* 先驗 $p_{\theta }(z)$
* 似然值 $p_{\theta }(x|z)$
* 後驗 $p_{\theta }(z|x)$

不幸的是，對 $p_{\theta }(x)$ 的計算十分困難。為了加快計算速度，有必要再引入一個函數，將後驗分布近似為

　
: $q_{\phi }({z|x})\approx p_{\theta }({z|x})$

其中 $\phi $ 是參數化的 $q$ 的實值集合。這有時也被稱為「攤銷推理」（amortized inference），因為可以通過「投資」找到好的 $q_{\phi }$ ，之後不用積分便可以從 $x$ 快速推斷出 $z$ 。

這樣，問題就變成了找到一個好的概率自編碼器，其中條件似然分布 $p_{\theta }(x|z)$ 由概率解碼器（probabilistic decoder）計算得到，後驗分布近似 $q_{\phi }(z|x)$ 由概率編碼器（probabilistic encoder）計算得到。

下面將編碼器參數化為 $E_{\phi }$ ，將解碼器參數化為 $D_{\theta }$ 。

## 證據下界（Evidence lower bound，ELBO）

如同每個深度學習問題，為了通過反向傳播算法更新神經網絡的權重，需要定義一個可微損失函數。

對於 VAE，這一思想可以實現為聯合優化生成模型參數 $\theta $ 和 $\phi $ ，以減少輸入輸出間的重構誤差，並使 $q_{\phi }({z|x})$ 儘可能接近 $p_{\theta }(z|x)$ 。重構損失常用均方誤差和交叉熵。

作為兩個分布之間的距離損失，反向 KL 散度 $D_{KL}(q_{\phi }({z|x})\parallel p_{\theta }({z|x}))$ 可以很有效地將 $q_{\phi }({z|x})$ 擠壓到 $p_{\theta }(z|x)$ 之下。

剛剛定義的距離損失可擴展為

　
: ${\begin{aligned}D_{KL}(q_{\phi }({z|x})\parallel p_{\theta }({z|x}))&=\mathbb {E} _{z\sim q_{\phi }(\cdot |x)}\left[\ln {\frac {q_{\phi }(z|x)}{p_{\theta }(z|x)}}\right]\\&=\mathbb {E} _{z\sim q_{\phi }(\cdot |x)}\left[\ln {\frac {q_{\phi }({z|x})p_{\theta }(x)}{p_{\theta }(x,z)}}\right]\\&=\ln p_{\theta }(x)+\mathbb {E} _{z\sim q_{\phi }(\cdot |x)}\left[\ln {\frac {q_{\phi }({z|x})}{p_{\theta }(x,z)}}\right]\end{aligned}}$

現在定義證據下界（Evidence lower bound，ELBO）：

使 ELBO 最大化等於同時最大化 $\ln p_{\theta }(x)$ 、最小化 $D_{KL}(q_{\phi }({z|x})\parallel p_{\theta }({z|x}))$ 。即，最大化觀測數據似然的對數值，同時最小化近似後驗 $q_{\phi }(\cdot |x)$ 與精確後驗 $p_{\theta }(\cdot |x)$ 的差值。給出的形式不大方便進行最大化，可以用下面的等價形式：

其中 $\ln p_{\theta }(x|z)$ 實現為 $\|x-D_{\theta }(z)\|_{2}^{2}$ ，因為這是在加性常數的前提下 $x\sim {\mathcal {N}}(D_{\theta }(z),I)$ 得到的東西。也就是說，我們把 $x$ 在 $z$ 上的條件分布建模為以 $D_{\theta }(z)$ 為中心的高斯分布。 $q_{\phi }(z|x)$ 和 $p_{\theta }(z)$ 的分布通常也被選為高斯分布，因為 $z|x\sim {\mathcal {(}}E_{\phi }(x),\sigma _{\phi }(x)^{2}I)$ 和 $z\sim {\mathcal {(}}0,I)$ 可以通過高斯分布的 KL 散度公式得到：

## 重參數化

有效搜索到

的典型方法是梯度下降法。它可以很直接地找到

但是，不允許將 $\nabla _{\phi }$ 置於期望中，因為 $\phi $ 出現在概率分布本身之中。**重參數化技巧**（也被稱為隨機反向傳播）則繞過了這個難點。最重要的例子是當 $z\sim q_{\phi }(\cdot |x)$ 遵循常態分布時，如 ${\mathcal {N}}(\mu _{\phi }(x),\Sigma _{\phi }(x))$ 。

　
:

可以通過讓 ${\boldsymbol {\varepsilon }}\sim {\mathcal {N}}(0,{\boldsymbol {I}})$ 構成「標準隨機數生成器」來實現重參數化，並將 $z$ 構建為 $z=\mu _{\phi }(x)+L_{\phi }(x)\epsilon $ 。這裡， $L_{\phi }(x)$ 通過科列斯基分解得到：

接著我們有由此，我們得到了梯度的無偏估計，這就可以應用隨機梯度下降法了。由於我們重參數化了 $z$ ，所以需要找到 $q_{\phi }(z|x)$ 。令 $q_{0}$ 為 $\epsilon $ 的概率密度函數，那麼

，其中 $\partial _{\epsilon }z$ 是 $\epsilon $ 相對於 $z$ 的雅可比矩陣。由於 $z=\mu _{\phi }(x)+L_{\phi }(x)\epsilon $ ，這就是

## 變體

許多 VAE 的應用和擴展已被用來使其適應其他領域，並提升性能。

 $\beta $ -VAE 是帶加權 KL 散度的實現，用於自動發現並解釋因子化的潛空間形式。這種實現可以對大於 1 的 $\beta $ 值強制進行流形分解。這個架構可以在無監督下發現解耦的潛因子。

條件性 VAE（CVAE）在潛空間中插入標籤信息，強制對所學數據進行確定性約束表示（Deterministic Constrained Representation）。

一些結構可以直接處理生成樣本的質量，或實現多個潛空間，以進一步改善表徵學習的效果。

一些結構將 VAE 和生成對抗網絡混合起來，以獲得混合模型。

## 另見

## 參考