變分自編碼器

機器學習中，變分自編碼器（Variational Autoencoder，縮寫：VAE）是由杜克·金瑪和馬克斯·威靈提出的一種人工神經網絡結構，屬於機率圖模式和變分貝葉斯方法。

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）。自由能表達式的剩餘部分是「重構」項，需要用採樣逼近來計算其期望。

## 系統闡述

<image>

從建立機率模型的角度來看，人們希望用他們選擇的參數化機率分布$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{align} 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{align}$$

現在定義證據下界（Evidence lower bound，ELBO）：$$L_{\theta,\phi}(x) := \mathbb E_{z \sim q_\phi(\cdot | x)} \left[\ln \frac{p_\theta(x, z)}{q_\phi({z| x})}\right] = \ln p_\theta(x) - D_{KL}(q_\phi({\cdot| x})\parallel p_\theta({\cdot | x}))$$使ELBO最大化$$\theta^*,\phi^* = \underset{\theta,\phi}\operatorname{arg max} \, L_{\theta,\phi}(x)$$等於同時最大化$\ln p_\theta(x)$、最小化$D_{KL}(q_\phi({z| x})\parallel p_\theta({z| x}))$。即，最大化觀測數據似然的對數值，同時最小化近似後驗$q_\phi(\cdot | x)$與精確後驗$p_\theta(\cdot | x)$的差值。

給出的形式不大方便進行最大化，可以用下面的等價形式：$$L_{\theta,\phi}(x) = \mathbb E_{z \sim q_\phi(\cdot | x)} \left[\ln p_\theta(x|z)\right] - D_{KL}(q_\phi({\cdot| x})\parallel p_\theta(\cdot))$$其中$\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)^2I)$和$z \sim \mathcal(0, I)$可以通過高斯分布的KL散度公式得到：$$L_{\theta,\phi}(x) = -\frac 12\mathbb E_{z \sim q_\phi(\cdot | x)} \left[ \|x - D_\theta(z)\|_2^2\right] - \frac 12 \left( N\sigma_\phi(x)^2 + \|E_\phi(x)\|_2^2 - 2N\ln\sigma_\phi(x) \right) + Const$$

## 重參數化

<image>

有效搜索到$$\theta^*,\phi^* = \underset{\theta,\phi}\operatorname{arg max} \, L_{\theta,\phi}(x)$$的典型方法是梯度下降法。

它可以很直接地找到$$\nabla_\theta \mathbb E_{z \sim q_\phi(\cdot | x)} \left[\ln \frac{p_\theta(x, z)}{q_\phi({z| x})}\right] = \mathbb E_{z \sim q_\phi(\cdot | x)} \left[ \nabla_\theta \ln \frac{p_\theta(x, z)}{q_\phi({z| x})}\right]$$但是，$$\nabla_\phi \mathbb E_{z \sim q_\phi(\cdot | x)} \left[\ln \frac{p_\theta(x, z)}{q_\phi({z| x})}\right]$$不允許將$\nabla_\phi$置於期望中，因為$\phi$出現在機率分布本身之中。重參數化技巧（也被稱為隨機反向傳播）則繞過了這個難點。

最重要的例子是當$z \sim q_\phi(\cdot | x)$遵循正態分布時，如$\mathcal N(\mu_\phi(x), \Sigma_\phi(x))$。

<image>

可以通過讓$\boldsymbol{\varepsilon} \sim \mathcal{N}(0, \boldsymbol{I})$構成「標準隨機數生成器」來實現重參數化，並將$z$構建為$z = \mu_\phi(x) + L_\phi(x)\epsilon$。這裡，$L_\phi(x)$通過科列斯基分解得到：$$\Sigma_\phi(x) = L_\phi(x)L_\phi(x)^T$$接著我們有$$\nabla_\phi \mathbb E_{z \sim q_\phi(\cdot | x)} \left[\ln \frac{p_\theta(x, z)}{q_\phi({z| x})}\right] = \mathbb {E}_{\epsilon}\left[ \nabla_\phi \ln {\frac {p_{\theta }(x, \mu_\phi(x) + L_\phi(x)\epsilon)}{q_{\phi }(\mu_\phi(x) + L_\phi(x)\epsilon | x)}}\right]$$由此，我們得到了梯度的無偏估計，這就可以應用隨機梯度下降法了。

由於我們重參數化了$z$，所以需要找到$q_\phi(z|x)$。令$q_0$為$\epsilon$的機率密度函數，那麼$$\ln q_\phi(z | x) = \ln q_0 (\epsilon) - \ln|\det(\partial_\epsilon z)|$$，其中$\partial_\epsilon z$是$\epsilon$相對於$z$的雅可比矩陣。由於$z = \mu_\phi(x) + L_\phi(x)\epsilon$，這就是$$\ln q_\phi(z | x) = -\frac 12 \|\epsilon\|^2 - \ln|\det L_\phi(x)| - \frac n2 \ln(2\pi)$$

## 變體

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

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

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

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

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