第 17 章 变分自编码器(Variational autoencoders)

返回目录

本章一句话:变分自编码器(VAE)是一种概率生成模型——它想学一个非线性潜变量模型 \(Pr(x)\),但这个模型的似然算不出来;于是退而求其次,优化一个永远在似然下方的下界(ELBO),并用“编码器 + 解码器 + 采样”的神经网络结构来近似它。

读这章的收获:理解潜变量模型为什么让边际似然难算,看懂 ELBO(证据下界) 是怎么推出来的、为什么它由“重构项 − KL 项”两部分组成,搞清楚 VAE 里编码器(近似后验 \(q\))和解码器(生成 \(p\))各干什么,以及 重参数化技巧 凭什么能让梯度穿过随机采样回传。


本章速览

  • VAE 不是 \(Pr(x)\) 本身:它是帮助我们 \(Pr(x)\) 的神经网络架构。最终学到的模型既不“变分”也不“自编码”,本质是一个非线性潜变量模型
  • 潜变量模型:不直接写 \(Pr(x)\),而是引入隐藏变量 \(z\),写出联合分布 \(Pr(x,z)\),再把 \(z\) 积分掉(边缘化)得到 \(Pr(x)\)。简单的 \(Pr(x|z)\) 和 \(Pr(z)\) 能拼出很复杂的 \(Pr(x)\)。
  • 致命难点:非线性潜变量模型里,\(Pr(x)=\int Pr(x|z)Pr(z)\,dz\) 这个积分没有闭式解、也无法直接求值,所以极大似然训练走不通。
  • 解决办法——ELBO:用 Jensen 不等式构造一个证据下界,它永远 \(\le \log Pr(x)\)。最大化下界,就能间接抬高似然。
  • 下界的两种读法:① ELBO \(=\log Pr(x) - \mathrm{KL}[q\,\|\,\) 真后验 \(]\),所以当 \(q\) 等于真后验时下界贴紧;② ELBO \(=\) 重构项 − KL(\(q\) 与先验的距离),这就是 VAE 实际优化的形式。
  • 变分近似:真后验 \(Pr(z|x)\) 同样算不出来,于是用一个简单的高斯 \(q(z|x,\theta)\) 去近似它,其均值和方差由一个编码器网络 \(g[x,\theta]\) 预测。
  • VAE 架构:编码器 \(g\) 把 \(x\) 映成 \(q\) 的参数 → 采样得到 \(z\) → 解码器 \(f\) 把 \(z\) 还原成 \(x\)。损失 = 负 ELBO。
  • 重参数化技巧:把“随机采样”挪到一条旁路里(\(z=\mu+\sigma\odot\epsilon\),\(\epsilon\sim\mathcal N(0,I)\)),主干路上不再有随机节点,梯度就能正常回传。

17.1 潜变量模型(Latent variable models)

潜变量模型用一种绕弯子的方式来描述概率分布 \(Pr(x)\)。它不直接给 \(Pr(x)\) 写公式,而是引入一个看不见的隐藏变量(潜变量) \(z\),先建模数据 \(x\) 和潜变量 \(z\) 的联合分布 \(Pr(x,z)\),再通过把 \(z\) 积分掉来得到 \(Pr(x)\):

\[ Pr(x)=\int Pr(x,z)\,dz . \]

通常会用条件概率规则把联合分布拆成似然 \(Pr(x|z)\) 和先验 \(Pr(z)\) 两部分:

\[ Pr(x)=\int Pr(x|z)\,Pr(z)\,dz . \]

这看起来比直接写 \(Pr(x)\) 麻烦,但好处在于:用相对简单的 \(Pr(x|z)\) 和 \(Pr(z)\),就能拼出相当复杂的 \(Pr(x)\)。

17.1.1 例子:高斯混合模型(Mixture of Gaussians)

最直观的潜变量模型是一维高斯混合(MoG)。这里潜变量 \(z\) 是离散的,先验 \(Pr(z)\) 是一个类别分布,每个取值 \(n\) 有一个权重 \(\lambda_n\);给定 \(z=n\) 时,\(x\) 服从均值 \(\mu_n\)、方差 \(\sigma_n^2\) 的正态分布:

\[ Pr(z=n)=\lambda_n,\qquad Pr(x|z=n)=\mathrm{Norm}_x[\mu_n,\sigma_n^2]. \]

因为 \(z\) 离散,边缘化就是求和

\[ Pr(x)=\sum_{n=1}^{N}\lambda_n\cdot\mathrm{Norm}_x[\mu_n,\sigma_n^2]. \]

直觉图:把几条窄窄的高斯“小山”按权重 \(\lambda_n\) 叠起来,就得到一条有多个峰的复杂曲线。简单的似然 + 简单的先验 → 复杂的多峰分布,这正是潜变量模型的魅力。


17.2 非线性潜变量模型(Nonlinear latent variable model)

VAE 真正要学的,是高斯混合的“连续升级版”。这里数据 \(x\) 和潜变量 \(z\) 都是连续、多维的。

先验取一个标准多元正态:

\[ Pr(z)=\mathrm{Norm}_z[0,I]. \]

似然也是正态,但它的均值是潜变量的一个非线性函数 \(f[z,\phi]\)(由一个深度网络给出,参数为 \(\phi\)),协方差则是固定的球形 \(\sigma^2 I\):

\[ Pr(x|z,\phi)=\mathrm{Norm}_x\big[f[z,\phi],\,\sigma^2 I\big]. \]

潜变量 \(z\) 的维度低于数据 \(x\):网络 \(f[z,\phi]\) 负责刻画数据的重要结构,剩下没建模的细节都归到噪声 \(\sigma^2 I\) 里。数据概率通过对 \(z\) 边缘化得到:

\[ Pr(x|\phi)=\int \mathrm{Norm}_x\big[f[z,\phi],\sigma^2 I\big]\cdot\mathrm{Norm}_z[0,I]\,dz . \]

直觉图:可以把它看成无穷多个球形高斯的加权叠加——每取一个 \(z\),就有一个均值在 \(f[z,\phi]\) 的小高斯,权重是 \(Pr(z)\)。把这无穷多个小高斯叠起来,就得到一个非常灵活、可以很复杂的 \(Pr(x)\)。

17.2.1 生成(Generation)

从这个模型采样很简单,用祖先采样两步走:

  1. 从先验 \(Pr(z)=\mathrm{Norm}_z[0,I]\) 里抽一个 \(z^*\);
  2. 把 \(z^*\) 喂进网络得到均值 \(f[z^*,\phi]\),再从球形高斯 \(Pr(x|z^*,\phi)\) 里抽出 \(x^*\)。

因为先验和似然都是正态分布,这一过程毫无障碍。反复重复,采出的 \(x^*\) 就会重现分布 \(Pr(x|\phi)\)。


17.3 训练(Training)

训练就是在数据集 \(\{x_i\}\) 上对参数做极大对数似然(为简单起见假设噪声 \(\sigma^2\) 已知,只学 \(\phi\)):

\[ \hat\phi=\operatorname*{argmax}_{\phi}\left[\sum_{i=1}^{I}\log Pr(x_i|\phi)\right], \qquad Pr(x_i|\phi)=\int \mathrm{Norm}_{x_i}[f[z,\phi],\sigma^2 I]\cdot\mathrm{Norm}_z[0,I]\,dz . \]

麻烦来了:这个积分没有闭式解,对某个具体的 \(x\) 也没法直接求值——它是不可解(intractable)的。极大似然这条路直接堵死。

17.3.1 证据下界(ELBO)

既然似然本身算不出来,那就退一步:构造一个下界——一个永远 \(\le\log Pr(x|\phi)\) 的函数,再去最大化它。这个下界还会依赖一组新参数 \(\theta\);后面会专门搭一个网络来计算并优化它。要推出这个下界,需要先借助 Jensen 不等式

17.3.2 Jensen 不等式(Jensen’s inequality)

Jensen 不等式说:对一个凹函数 \(g[\cdot]\),“先求期望再过函数”不小于“先过函数再求期望”:

\[ g\big[\mathbb E[y]\big]\ \ge\ \mathbb E\big[g[y]\big]. \]

对数函数 \(\log\) 正是凹的,所以:

\[ \log\big[\mathbb E[y]\big]\ \ge\ \mathbb E\big[\log[y]\big], \]

把期望写成积分形式即:

\[ \log\!\left[\int Pr(y)\,y\,dy\right]\ \ge\ \int Pr(y)\log[y]\,dy . \]

直觉图:对数曲线是“向上凸(凹)”的,任意两点之间的连线都落在曲线下方。所以若干个点的加权平均(落在弦上)必然在曲线下方——把它们先平均、再看对数,会比先取对数再平均更高。换句话说,凹函数把高值“压扁”得比低值更厉害,所以先过函数会让期望变小。

还有一个更通用的版本(把 \(y\) 换成任意函数 \(h[y]\) 也成立,因为 \(h[y]\) 不过是另一个随机变量):

\[ \log\!\left[\int Pr(y)\,h[y]\,dy\right]\ \ge\ \int Pr(y)\log\big[h[y]\big]\,dy . \]

17.3.3 推导下界(Deriving the bound)

现在用 Jensen 不等式来推 ELBO。技巧是:把对数似然里的被积项同时乘除一个任意分布 \(q(z)\):

\[ \log[Pr(x|\phi)]=\log\!\left[\int Pr(x,z|\phi)\,dz\right] =\log\!\left[\int q(z)\,\frac{Pr(x,z|\phi)}{q(z)}\,dz\right]. \]

右边是“以 \(q(z)\) 为权重的一个期望的对数”,正好套用 Jensen 不等式(对数是凹的):

\[ \log\!\left[\int q(z)\,\frac{Pr(x,z|\phi)}{q(z)}\,dz\right] \ \ge\ \int q(z)\log\!\left[\frac{Pr(x,z|\phi)}{q(z)}\right]dz . \]

右边这个量就是证据下界(ELBO)。之所以叫“证据”,是因为在贝叶斯语境里 \(Pr(x|\phi)\) 被称为“证据”。实践中 \(q(z)\) 带有参数 \(\theta\),于是写成:

\[ \mathrm{ELBO}[\theta,\phi]=\int q(z|\theta)\log\!\left[\frac{Pr(x,z|\phi)}{q(z|\theta)}\right]dz . \]

训练非线性潜变量模型,就是把这个量当作 \(\phi\) 和 \(\theta\) 的函数一起最大化。计算这个量的神经网络架构,就是 VAE。


17.4 ELBO 的性质(ELBO properties)

ELBO 初看很神秘,这一节给它一点直觉。原始对数似然是 \(\phi\) 的函数,我们想找它的最大值。对任意固定的 \(\theta\),ELBO 也是 \(\phi\) 的函数,但它整体压在似然曲线下方。改变 \(\theta\) 会换一条下界曲线(可能更贴近、也可能更远离似然);改变 \(\phi\) 则是沿着当前这条下界曲线移动。所以提高似然有两条路:(a) 调 \(\theta\) 把下界整体抬高(换更好的曲线),(b) 调 \(\phi\) 沿曲线爬到更高处。

17.4.1 下界的紧致性(Tightness of bound)

什么时候下界贴紧似然?把 ELBO 里对数的分子用条件概率 \(Pr(x,z|\phi)=Pr(z|x,\phi)Pr(x|\phi)\) 拆开,可以化简成:

\[ \mathrm{ELBO}[\theta,\phi]=\log[Pr(x|\phi)]-\mathrm{KL}\big[q(z|\theta)\,\big\|\,Pr(z|x,\phi)\big]. \]

(推导中 \(\log Pr(x|\phi)\) 与 \(z\) 无关、而 \(q\) 的积分为 1,所以那一项直接变成 \(\log Pr(x|\phi)\);最后一项按 KL 散度定义写出。)

这条式子说得很清楚:ELBO = 对数似然 − 一个 KL 散度。KL 散度衡量两个分布的“距离”,恒为非负,所以 ELBO 确实是 \(\log Pr(x|\phi)\) 的下界。当且仅当

\[ q(z|\theta)=Pr(z|x,\phi) \]

时 KL 为 0,下界完全贴紧似然。这里的 \(Pr(z|x,\phi)\) 就是后验分布——给定数据点 \(x\),哪些潜变量值有可能产生了它。

直觉图(后验):后验 \(Pr(z|x^*,\phi)\propto Pr(x^*|z,\phi)Pr(z)\)(贝叶斯规则)。它把“每个 \(z\) 对应的球形高斯有多可能生成 \(x^*\)”(似然)与“这个 \(z\) 本身有多常见”(先验)相乘再归一化。哪个 \(z\) 既容易生成 \(x^*\)、本身又不罕见,后验就偏向它。

17.4.2 ELBO = 重构项 − 到先验的 KL 距离

ELBO 还有第三种等价写法。这次把分子按 \(Pr(x,z|\phi)=Pr(x|z,\phi)Pr(z)\) 拆:

\[ \mathrm{ELBO}[\theta,\phi]=\underbrace{\int q(z|\theta)\log[Pr(x|z,\phi)]\,dz}_{\text{重构项}}\ -\ \underbrace{\mathrm{KL}\big[q(z|\theta)\,\big\|\,Pr(z)\big]}_{\text{与先验的距离}} . \]

  • 第一项(重构项):在 \(q\) 给出的潜变量上,数据 \(x\) 平均有多大可能被还原出来——衡量重构准确度
  • 第二项(KL 项):辅助分布 \(q(z|\theta)\) 与先验 \(Pr(z)\) 有多接近——是一个正则项,把潜变量分布往先验上拉。

这两项构成一个权衡:重构项希望 \(q\) 把 \(x\) 的信息编码得越准越好,KL 项却要求 \(q\) 别偏离先验太远。这正是 VAE 实际使用的损失形式。


17.5 变分近似(Variational approximation)

我们已经知道:当 \(q(z|\theta)\) 等于后验 \(Pr(z|x,\phi)\) 时下界最紧。原则上后验可由贝叶斯规则算出:

\[ Pr(z|x,\phi)=\frac{Pr(x|z,\phi)Pr(z)}{Pr(x|\phi)} . \]

分母里的证据 \(Pr(x|\phi)\) 恰恰是 17.3 节那个算不出来的积分,所以真后验同样不可解。

解决思路是做变分近似:选一个简单的参数化分布 \(q(z|\theta)\) 去逼近真后验。这里选对角协方差的多元正态(均值 \(\mu\)、对角协方差 \(\Sigma\))。它未必能完美贴合后验,但总有一些 \(\mu,\Sigma\) 比别的更接近;训练时就去找“最接近真后验”的那个正态——这等价于最小化 17.4 节那个 KL 散度,也就是把下界曲线尽量往上抬。

直觉图:真后验是一条形状任意的橙色曲线,我们只允许用高斯(青色)去贴。后验是单峰时(图 a)贴得不错;后验是多峰时(图 b),单个高斯就会贴得很糟——这是变分近似的固有局限。

因为最优的 \(q\) 是后验、而后验依赖于具体的数据 \(x\),所以近似也应当随 \(x\) 变化。于是让一个第二个神经网络 \(g[x,\theta]\) 来预测均值和方差:

\[ q(z|x,\theta)=\mathrm{Norm}_z\big[g_\mu[x,\theta],\,g_\Sigma[x,\theta]\big]. \]


17.6 变分自编码器(The variational autoencoder)

把上面所有零件拼起来,就得到 VAE:搭一个网络去计算 ELBO

\[ \mathrm{ELBO}[\theta,\phi]=\int q(z|x,\theta)\log[Pr(x|z,\phi)]\,dz\ -\ \mathrm{KL}\big[q(z|x,\theta)\,\big\|\,Pr(z)\big], \]

其中 \(q(z|x,\theta)\) 就是上一节那个由编码器预测的近似后验。

第一项仍含一个不可解的积分,但它是关于 \(q(z|x,\theta)\) 的期望,可以用采样来近似。对任意函数 \(a[\cdot]\):

\[ \mathbb E_z\big[a[z]\big]=\int a[z]\,q(z|x,\theta)\,dz\ \approx\ \frac1N\sum_{n=1}^{N}a[z_n^*], \]

其中 \(z_n^*\) 是从 \(q(z|x,\theta)\) 抽的样本——这就是蒙特卡洛估计。最粗糙时只用一个样本 \(z^*\):

\[ \mathrm{ELBO}[\theta,\phi]\ \approx\ \log[Pr(x|z^*,\phi)]\ -\ \mathrm{KL}\big[q(z|x,\theta)\,\big\|\,Pr(z)\big]. \]

第二项是两个正态分布之间的 KL 散度——\(q=\mathrm{Norm}_z[\mu,\Sigma]\) 与先验 \(Pr(z)=\mathrm{Norm}_z[0,I]\)——它有闭式解

\[ \mathrm{KL}\big[q(z|x,\theta)\,\big\|\,Pr(z)\big]=\frac12\Big(\mathrm{Tr}[\Sigma]+\mu^{\!\top}\mu-D_z-\log\det[\Sigma]\Big), \]

\(D_z\) 是潜空间维度。所以损失里只有重构项要靠采样,KL 项可以直接算。

17.6.1 VAE 算法

对一个数据点 \(x\),计算 ELBO 的三步:

  1. 用编码器 \(g[x,\theta]\) 算出近似后验 \(q(z|x,\theta)\) 的均值 \(\mu\) 和方差 \(\Sigma\);
  2. 从这个分布里抽一个样本 \(z^*\);
  3. 用上面的单样本公式算 ELBO。

架构图:编码器 \(g[x,\theta]\) 把训练样本 \(x\) 映成 \(q\) 的参数 \(\mu,\Sigma\) → 从 \(q\) 采样得 \(z\) → 解码器 \(f[z,\phi]\) 由 \(z\) 重建 \(x\)。损失函数是负 ELBO,它同时看重建得准不准、以及 \(q\) 与先验像不像。

为什么叫“变分自编码器”就清楚了:变分——因为它用一个高斯去近似后验;自编码器——因为它从 \(x\) 出发,压成低维潜向量 \(z\),再尽量把 \(x\) 还原回来。把 \(x\to z\) 的网络 \(g\) 叫编码器,把 \(z\to x\) 的网络 \(f\) 叫解码器

训练时,把小批量数据过网络,用 SGD 或 Adam 更新 \(\phi\) 和 \(\theta\),梯度照例由自动微分算出。这个过程同时在“换下界曲线”(动 \(\theta\))和“沿曲线爬”(动 \(\phi\));\(\phi\) 不断调整,使数据在非线性潜变量模型下获得更高的似然。


17.7 重参数化技巧(The reparameterization trick)

还剩最后一个坎:网络里有一个采样步骤,而对随机采样求导很困难。可偏偏更新采样之前的编码器参数 \(\theta\),又必须让梯度穿过这一步。

解决办法非常简洁:把随机性挪到一条旁路里——先从标准正态抽一个 \(\epsilon^*\sim\mathrm{Norm}_\epsilon[0,I]\),再用确定性的变换把它“拼成”想要的高斯样本:

\[ z^*=\mu+\Sigma^{1/2}\,\epsilon^*\qquad\Big(\text{对角协方差时即 } z=\mu+\sigma\odot\epsilon\Big). \]

这样一来,主干路上从 \(\mu,\Sigma\) 到 \(z^*\) 全是确定性运算,随机节点 \(\epsilon^*\) 单独待在旁路、不在反向传播路径上。于是反向传播算法不必穿过随机分支,梯度就能正常地回传到 \(\mu,\Sigma\) 乃至编码器参数 \(\theta\)。这就是重参数化技巧

直觉图:原架构里 \(\mu,\Sigma\to\)(采样)\(\to z\),那个“采样”是堵死梯度的黑盒。重参数化把“掷骰子”这步搬到一条单独输入的支路(喂进 \(\epsilon\)),主管道里只剩“缩放 + 平移”,梯度畅通无阻。


17.8 应用(Applications)

VAE 用途很广:去噪、异常检测、压缩等。下面以图像数据为例。

17.8.1 近似样本概率

17.3 节说过 VAE 无法精确评估一个样本的概率,因为

\[ Pr(x)=\int Pr(x|z)Pr(z)\,dz=\mathbb E_z\big[\mathrm{Norm}_x[f[z,\phi],\sigma^2 I]\big]. \]

最朴素的近似是从先验 \(Pr(z)=\mathrm{Norm}_z[0,I]\) 里抽样、取 \(Pr(x|z_n)\) 的平均:

\[ Pr(x)\ \approx\ \frac1N\sum_{n=1}^{N}Pr(x|z_n) . \]

维度灾难让这行不通:绝大多数随机抽到的 \(z_n\) 给出的 \(Pr(x|z_n)\) 都极低,要想估得准就得抽天文数量级的样本。

更好的办法是重要性采样:从一个辅助分布 \(q(z)\) 抽样,再用 \(q(z)\) 的概率把结果重新加权:

\[ Pr(x)=\mathbb E_{q(z)}\!\left[\frac{Pr(x|z)Pr(z)}{q(z)}\right]\ \approx\ \frac1N\sum_{n=1}^{N}\frac{Pr(x|z_n)Pr(z_n)}{q(z_n)} . \]

只要 \(q(z)\) 集中在 \(Pr(x|z)\) 高似然的区域,采样就聚焦到了真正相关的地方,估计 \(Pr(x)\) 会高效得多。由于 \(Pr(x|z)Pr(z)\propto\) 后验 \(Pr(z|x)\),所以 \(q(z)\) 的自然选择正是编码器算出的变分后验 \(q(z|x)\)。有了足够样本,这个估计比下界更准,可用来评估模型质量,或判断新样本是否属于该分布(即异常检测)。

17.8.2 生成

VAE 是概率模型,采样很容易:从先验 \(Pr(z)\) 抽 \(z\)、过解码器 \(f[z,\phi]\)、再按 \(Pr(x|f[z,\phi])\) 加噪声。可惜朴素(vanilla)VAE 的样本通常质量偏低——一方面是球形高斯噪声太“天真”,另一方面是先验与变分后验都用了高斯。

一个改进小技巧:不从先验、而是从聚合后验 \(q(z|\theta)=\frac1I\sum_i q(z|x_i,\theta)\) 采样——它是所有样本后验的平均,是个更贴近潜空间真实分布的高斯混合。

现代 VAE 已能产出高质量样本,但要靠层次先验、专门的网络架构和精细的正则化。下一章的扩散模型就可以看成“带层次先验的 VAE”,同样能生成非常高质量的样本。

17.8.3 重合成(Resynthesis)

VAE 还能用来改动真实数据。把一张图 \(x\) 投到潜空间(取编码器预测分布的均值,或用优化找最大化后验 \(\propto Pr(x|z)Pr(z)\) 的 \(z\)),就拿到了它的潜向量。

做法:先把一批标了“中性 / 微笑”的图都投到潜空间,用两组均值之差估出一个代表“微笑”的方向向量;再估一个“闭嘴 / 张嘴”的方向向量。然后把目标图投进潜空间,加减这些向量就能编辑属性。生成中间过渡图时用球面线性插值(Slerp)而非直线插值——在 3D 里这相当于“沿球面走”而不是“从球体里挖直洞穿过去”。

这种“编码 → (可选地修改)→ 解码”的过程叫重合成。GAN 和归一化流也能做,但 GAN 没有编码器,必须额外想办法找到对应观测数据的潜变量。

17.8.4 解耦(Disentanglement)

上面的重合成里,可解释方向要靠带标签的数据去估。另一类工作则想直接改造潜空间,让它的坐标轴本身就对应真实世界的因素——当每一维都代表一个独立因素(如人脸的头部姿态、发色)时,就称潜空间是解耦的

做法通常是在损失里加正则项,基于后验 \(q(z|x,\theta)\) 或聚合后验 \(q(z|\theta)\):

\[ \mathcal L_{\text{new}}=-\mathrm{ELBO}[\theta,\phi]+\lambda_1\,\mathbb E_{Pr(x)}\big[r_1[q(z|x,\theta)]\big]+\lambda_2\, r_2[q(z|\theta)] . \]

例如 β-VAE 直接给 KL 项加权 \(\beta>1\):

\[ \mathrm{ELBO}[\theta,\phi]\approx\log[Pr(x|z^*,\phi)]-\beta\cdot\mathrm{KL}\big[q(z|x,\theta)\,\big\|\,Pr(z)\big]. \]

因为先验是各维独立的球形高斯,上调这一项就逼着后验各维更不相关,从而鼓励解耦(即相对地更看重 \(q\) 与先验的接近程度,而非重构误差)。另一变体 total correlation VAE 则专门加项去降低潜变量间的总相关,同时最大化一小撮潜变量与观测之间的互信息。


本章小结

VAE 是帮助我们学一个非线性潜变量模型 \(Pr(x)\) 的架构。学好后,从先验采样潜变量、过解码器、再加独立高斯噪声,就能生成新样本。

它的核心困境是:数据点的似然没有闭式解,极大似然训练受阻。对策是定义一个下界(ELBO) 并最大化它。但下界要贴紧,又需要后验 \(Pr(z|x,\phi)\),而后验同样不可解;于是再做一次变分近似——用一个简单的高斯(参数由编码器网络给出)去逼近后验。ELBO 可写成“重构项 − KL 项”,前者要求还原准确、后者把潜分布往先验拉,二者权衡。训练时用蒙特卡洛单样本估重构项、用闭式解算 KL 项,并靠重参数化技巧 \(z=\mu+\sigma\odot\epsilon\) 让梯度能穿过采样步骤回传。

要让 VAE 生成高质量样本,似乎必须用比高斯更复杂的潜空间分布,比如层次先验(一个潜变量再生成另一个)。下一章的扩散模型正可视为层次化 VAE,能产出非常高质量的样本。


关键术语对照

中文 English 一句话含义
潜变量模型 Latent variable model 借助隐藏变量 \(z\),靠边缘化间接描述 \(Pr(x)\)
边缘化 Marginalization 把联合分布里的 \(z\) 积分(或求和)掉
似然 / 先验 Likelihood / Prior \(Pr(x|z)\) / \(Pr(z)\),潜变量模型的两块积木
非线性潜变量模型 Nonlinear latent variable model 似然均值是 \(z\) 的深度网络函数 \(f[z,\phi]\)
不可解 Intractable 积分无闭式解、也无法直接求值
证据下界 ELBO(Evidence Lower Bound) 永远 \(\le\log Pr(x)\) 的可优化下界
Jensen 不等式 Jensen’s inequality 凹函数下 \(g[\mathbb E[y]]\ge\mathbb E[g[y]]\),推 ELBO 的关键
后验分布 Posterior \(Pr(z|x)\),哪些 \(z\) 可能生成了 \(x\)
KL 散度 KL divergence 衡量两分布“距离”,非负
变分近似 Variational approximation 用简单高斯 \(q(z|x,\theta)\) 逼近真后验
编码器 / 解码器 Encoder / Decoder \(g[x,\theta]\):\(x\!\to\!q\) 参数;\(f[z,\phi]\):\(z\!\to\!x\)
重构项 vs. KL 项 Reconstruction vs. KL term 还原准 vs. 贴近先验,二者权衡
蒙特卡洛估计 Monte Carlo estimate 用采样平均近似期望(积分)
重参数化技巧 Reparameterization trick \(z=\mu+\sigma\odot\epsilon\),让梯度穿过采样
重要性采样 Importance sampling 换分布采样并加权,高效估 \(Pr(x)\)
聚合后验 Aggregated posterior 所有样本后验的平均,一个高斯混合
重合成 Resynthesis 编码→(修改)→解码,编辑真实数据
解耦 Disentanglement 让潜空间各维对应独立的真实因素
β-VAE beta VAE 给 KL 项加权 \(\beta>1\) 以鼓励解耦

返回目录 | 上一章:第 16 章 归一化流 | 下一章:第 18 章 扩散模型