因为内容很重要,本次内容会有点长,分成多个部分逐步推理DDPM的相关理论。
- 第一部分:DDPM的基础知识。主要内容包括ELBO,VAE。
- 第二部分:多层VAE及DDPM。该部分记录如何从DDPM的基础知识搭建起DDPM。
- 第三部分:DDPM实例与伪代码。 之后我们再讲解其他种类的扩散模型。因此本节先从DDPM的基础知识讲起。该内容单看与DDPM无任何关系,是很早以前的卷积神经网络都在用的基础理论,但为了DDPM的流程推导需要。
去噪扩散概率模型(Denoising Diffusion Probabilistic Model,简称DDPM)是一种强大的生成模型,能够生成高质量的图像、音频以及其他类型的数据。其工作原理是模拟数据样本在噪声干扰下逐渐退化的过程,并在此基础上学习如何逆转这一退化过程,从而生成新的、无噪声的数据样本。DDPM的核心机制包括两个阶段:首先是加噪过程,通过一系列扩散步骤将干净的数据逐步添加噪声;其次是去噪过程,从噪声数据中逐步恢复出干净的数据。其中,去噪过程尤为重要,它实现了从初始的纯噪声向图像、音频或其他类型数据的转变,这也是生成数据的核心环节。我们通常将这一过程称为“去噪过程”或“采样过程”,不过“采样过程”更多地用于描述模型生成数据的最终阶段,而“去噪过程”则具有更广泛的适用性。

如果以雕塑为例,可以更直观地理解这一过程。从一块未经雕琢的原始石材(类似于初始的纯噪声,原始、随机且无特征)雕刻成精美的雕塑作品(对应生成的数据)的过程,可以类比为扩散模型的去噪过程;而从精美的雕塑作品还原为原始石材的过程(虽然在现实中难以实现,但在模型中是可行的),则可以类比为扩散模型的加噪过程,下图是我用AI生成的扩散模型生成图片原理比喻。

1.1 变分自编码器VAE
1.1.1 证据下界ELBO(Evidence Lower Bound)
在数学领域,"隐变量"通常指那些无法被直接观测或测量的变量。在统计建模及理论分析中,隐变量有助于解释表象背后的本质机制。通过将观测到的数据 xxx 与隐变量 zzz 结合,可以形成联合概率分布 p(x,z)p(x, z)p(x,z)。在此框架下,观测数据 xxx 的边缘概率定义为 p(x)p(x)p(x)。这两类概率之间存在两种基本的转化方式。对联合分布 p(x,z)p(x, z)p(x,z) 关于隐变量 zzz 进行积分,将其全部影响纳入考虑,便可得到 p(x)p(x)p(x)。
p(x)=∫p(x,z)dz(1.1.1)p(x)=\int p(x,z)\mathrm{d}z\quad(1.1.1)p(x)=∫p(x,z)dz(1.1.1)
当然,根据链式法则也有:
p(x)=p(x,z)p(z∣x)(1.1.2)p(x)=\frac{p(x,z)}{p(z|x)}\quad(1.1.2)p(x)=p(z∣x)p(x,z)(1.1.2)
公式(1.1.1)体现了对全部隐变量进行积分或求和的计算方式,这一过程将在后续推导中反复应用。公式(1.1.2)实质上为条件概率的展开表达,其中 p(x,z)p(x, z)p(x,z) 可视为在给定隐变量 zzz 的情况下,关于 xxx 的输出分布。同时,p(z∣x)p(z|x)p(z∣x) 则可理解为一种解码机制,用于根据观测数据 xxx 预测对应的隐变量 zzz。借助公式(1.1.2),有可能进一步引出证据下界(Evidence Lower Bound, ELBO)的相关理论。
这里为了使同学能看懂,补充一些数学理论,后面的内容中设计下面的格式,都代表补充内容,不再赘述。
[证据下界] 证据下界是变分推断中的一个核心概念,它为后验概率的近似提供了一个下界。简单来说,证据下界(ELBO)是在我们处理一些概率问题时,用来帮助我们估算和理解某些难以计算的概率的一个工具。想象一下我们有一堆图片数据 ,每张图片都有无法描述的特征 。假如我们对“无法描述的特征”感兴趣,想要得到 这样的后验概率,可以使用最大化证据下界法 。
让我们试着深入推理一下 的ELBO。
logp(x)=log∫p(x,z)dz=log∫p(x,z)pϕ(z∣x)pϕ(z∣x)dz(1.1.3)=logEpϕ(z∣x)[p(x,z)pϕ(z∣x)](1.1.4)≥Epϕ(z∣x)[logp(x,z)pϕ(z∣x)](1.1.5)\begin{aligned}\log p(x)&=\log\int p(x,z)\mathrm{d}z\\&=\log\int\frac{p(x,z)p_\phi(z|x)}{p_\phi(z|x)}\mathrm{d}z\quad(1.1.3)\\&=\log\mathbb{E}_{p_{\phi}(z|x)}[\frac{p(x,z)}{p_{\phi}(z|x)}]\quad(1.1.4)\\&\geq\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(x,z)}{p_\phi(z|x)}]\quad(1.1.5)\end{aligned}logp(x)=log∫p(x,z)dz=log∫pϕ(z∣x)p(x,z)pϕ(z∣x)dz(1.1.3)=logEpϕ(z∣x)[pϕ(z∣x)p(x,z)](1.1.4)≥Epϕ(z∣x)[logpϕ(z∣x)p(x,z)](1.1.5)
在公式(1.1.3)中,提出了参数为 ϕ\phiϕ 的模型分布 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x)。直观来看,这一分布可以理解为用参数 ϕ\phiϕ 的模型去估计在给定观测值 xxx 时隐变量 zzz 的真实后验分布。该方法的目标是使 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x) 尽可能贴近 p(z∣x)p(z|x)p(z∣x)。在探索“变分自编码器”过程中,通过调整参数 ϕ\phiϕ,能够有效地提升下界,从而实现对 ELBO 的最大化。
1.1.4 说明:[高数不证明的定理] 公式(1.1.4)使用期望重要定理。这是大学《概率论与数理统计》教科书中著名的不证明的定理。我这里也不想证明,因为看过证明过程后感觉的确有些复杂。这里单纯复述下。若随机变量 YYY符合函数Y=g(x)Y=g(x)Y=g(x) ,且 ∫−∞+∞g(x)f(x)dx\int_{-\infty}^{+\infty}g(x)f(x)dx∫−∞+∞g(x)f(x)dx绝对收敛,则有
E(Y)=E(g(X))=∫−∞+∞g(x)f(x)dx(1.1.6)E(Y)=E(g(X))=\int_{-\infty}^{+\infty}g(x)f(x)\mathrm{d}x\quad(1.1.6)E(Y)=E(g(X))=∫−∞+∞g(x)f(x)dx(1.1.6)
1.1.5 说明:[Jensen不等式] 公式(1.1.5)使用了Jensen不等式。Jenson不等式定义:在不等式中,若 f(x)f(x)f(x)为区间 III上的下凸函数(凹函数),则对于任意xi∈Ix_{i}\in Ixi∈I ,在满足 ∑i=1nλi=1\sum_{i=1}^n\lambda_i=1∑i=1nλi=1的 λi>0(i=1,2,⋯ ,n)\lambda_i>0(i=1,2,\cdots,n)λi>0(i=1,2,⋯,n)时,下公式成立:f(∑i=1nλixi)⩽∑i=1nλif(xi)f(\sum_{i=1}^n\lambda_ix_i)\leqslant\sum_{i=1}^n\lambda_if(x_i)f(∑i=1nλixi)⩽∑i=1nλif(xi)。对于这里,log(x)\log(x)log(x)是凹函数,期望的对数小于等于对数的期望。
通过Jensen不等式,在公式(1.1.5)中直接得到ELBO的表达式,即 Epϕ(z∣x)[logp(x,z)pϕ(z∣x)]\mathbb{E}{p\phi(z|x)}[\log\frac{p(x,z)}{p_\phi(z|x)}]Epϕ(z∣x)[logpϕ(z∣x)p(x,z)]。值得一提的是,这一公式在教材中经常出现。然而,这种推导方式并未揭示其背后的理论本质。具体而言,利用Jensen不等式得出的结论,并没有从根本上说明ELBO(证据下界)为何确实是观测数据真实分布的下界。同时,即使确认ELBO具有下界属性,也尚未解释为何在模型训练中应以最大化ELBO为目标。为进一步阐明证据(真实分布)与ELBO之间的本质联系,下面将对此进行更加详细的推导分析:
logp(x)=logp(x)∫pϕ(z∣x)dz(1.1.7)=∫pϕ(z∣x)(logp(x))dz=Epϕ(z∣x)[logp(x)](1.1.8)=Epϕ(z∣x)[logp(x,z)p(z∣x)]=Epϕ(z∣x)[logp(x,z)pϕ(z∣x)p(z∣x)pϕ(z∣x)]=Epϕ(z∣x)[logp(x,z)pϕ(z∣x)]+Epϕ(z∣x)[logpϕ(z∣x)p(z∣x)](1.1.9)=Epϕ(z∣x)[logp(x,z)pϕ(z∣x)]+DKL(pϕ(z∣x)∣∣p(z∣x))(1.1.10)≥Epϕ(z∣x)[logp(x,z)pϕ(z∣x)]\begin{aligned}\log p(x)&=\log p(x)\int p_\phi(z|x)\mathrm{d}z(1.1.7)\\&=\int p_\phi(z|x)(\log p(x))\mathrm{d}z\\&=\mathbb{E}_{p_\phi(z|x)}[\log p(x)](1.1.8)\\&=\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(x,z)}{p(z|x)}]\\&=\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(x,z)p_\phi(z|x)}{p(z|x)p_\phi(z|x)}]\\&=\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(x,z)}{p_\phi(z|x)}]+\mathbb{E}_{p_\phi(z|x)}[\log\frac{p_\phi(z|x)}{p(z|x)}]\quad(1.1.9)\\&=\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(x,z)}{p_\phi(z|x)}]+D_{KL}(p_\phi(z|x)||p(z|x))\quad(1.1.10)\\&\geq\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(x,z)}{p_\phi(z|x)}]\end{aligned}logp(x)=logp(x)∫pϕ(z∣x)dz(1.1.7)=∫pϕ(z∣x)(logp(x))dz=Epϕ(z∣x)[logp(x)](1.1.8)=Epϕ(z∣x)[logp(z∣x)p(x,z)]=Epϕ(z∣x)[logp(z∣x)pϕ(z∣x)p(x,z)pϕ(z∣x)]=Epϕ(z∣x)[logpϕ(z∣x)p(x,z)]+Epϕ(z∣x)[logp(z∣x)pϕ(z∣x)](1.1.9)=Epϕ(z∣x)[logpϕ(z∣x)p(x,z)]+DKL(pϕ(z∣x)∣∣p(z∣x))(1.1.10)≥Epϕ(z∣x)[logpϕ(z∣x)p(x,z)]
公式(1.1.7),pϕ(z∣x)p_\phi(z|x)pϕ(z∣x) 对zzz积分等于1。 公式(1.1.8),就是公式(1.1.6)的应用。 公式(1.1.9)到公式(1.1.10)使用KL散度公式:
DKL(P∣∣Q)=∫p(x)logP(x)Q(x)dx(1.1.11)D_{KL}(P||Q)=\int p(x)\log\frac{P(x)}{Q(x)}\mathrm{d}x\quad(1.1.11)DKL(P∣∣Q)=∫p(x)logQ(x)P(x)dx(1.1.11)
这一连续型KL散度的公式将在后文中反复用到。KL散度具有非负性,其值始终大于等于零。从公式(1.1.10)可以直观地看到,观测数据的真实概率等于ELBO与近似后验 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x) 和真实后验 p(z∣x)p(z|x)p(z∣x) 之间KL散度之和。在前述公式(1.1.5)的推导中,Jensen不等式实际上将这一KL散度项抵消了。但从公式(1.1.10)的视角来看,只有当近似后验 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x) 恰好等于真实后验 p(z∣x)p(z|x)p(z∣x) 时,Jensen不等式才能取等号。这一条件正是理解ELBO本质的核心所在。已明确了我们为何需要最大化ELBO——通过最大化ELBO,可以使近似后验 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x) 无限接近于真实后验 p(z∣x)p(z|x)p(z∣x),从而使KL散度收敛至零。ELBO的优化程度越高,近似后验与真实后验的差距就越小。
1.1.2 变分自编码(Variational Autoencoders, VAE)
变分自编码器(Variational Autoencoder,VAE)是一类结合深度学习与概率建模思想的生成模型。其方法核心在于,从一组参数为 ϕ\phiϕ 的潜在分布中寻找最优的 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x),这一思想称为变分方法(variational)。同时,原始输入会通过训练一个参数为 θ\thetaθ 的分布 pθ(x∣z)p_\theta(x|z)pθ(x∣z) 来重构自身,这一结构被称作自编码器(autoencoder)。**VAE的主要创新在于采用变分推断对复杂后验分布进行近似,并利用KL散度最小化推动潜在空间具备结构化特性。**假定 p(x)p(x)p(x) 代表VAE模型的边缘分布,进一步分析对应的ELBO如下:
Epϕ(z∣x)[logp(x,z)pϕ(z∣x)]=Epϕ(z∣x)[logpθ(x∣z)p(z)pϕ(z∣x)]=Epϕ(z∣x)[logpθ(x∣z)]+Epϕ(z∣x)[logp(z)pϕ(z∣x)]=Epϕ(z∣x)[logpθ(x∣z)]⏟重建项−DKL(pϕ(z∣x)∣∣p(z))⏟先验匹配项(1.1.12)\begin{aligned}\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(x,z)}{p_\phi(z|x)}]&=\mathbb{E}_{p_\phi(z|x)}[\log\frac{p_\theta(x|z)p(z)}{p_\phi(z|x)}]\\&=\mathbb{E}_{p_\phi(z|x)}[\log p_\theta(x|z)]+\mathbb{E}_{p_\phi(z|x)}[\log\frac{p(z)}{p_\phi(z|x)}]\\&=\underbrace{\mathbb{E}_{p_\phi(z|x)}[\log p_\theta(x|z)]}_\text{重建项}-\underbrace{D_{KL}(p_\phi(z|x)||p(z))}_\text{先验匹配项}\quad(1.1.12)\end{aligned}Epϕ(z∣x)[logpϕ(z∣x)p(x,z)]=Epϕ(z∣x)[logpϕ(z∣x)pθ(x∣z)p(z)]=Epϕ(z∣x)[logpθ(x∣z)]+Epϕ(z∣x)[logpϕ(z∣x)p(z)]=重建项Epϕ(z∣x)[logpθ(x∣z)]−先验匹配项DKL(pϕ(z∣x)∣∣p(z))(1.1.12)
公式(1.1.12)包含两部分内容。第一项为重建项,反映了在变分分布下通过“编码器-解码器”结构对观测数据的重构能力。这部分确保模型学习到的分布能够通过有效的隐变量 zzz 复现原始数据。第二项则为先验匹配项,衡量变分分布 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x) 与隐变量先验分布 p(z)p(z)p(z) 的接近程度。在模型训练过程中,会学习到一个分布 pθ(x∣z)p_\theta(x|z)pθ(x∣z),用于将输入 xxx 映射为含有隐变量 zzz 的分布。同时,还会训练一个预测分布 pθ(x∣z)p_\theta(x|z)pθ(x∣z),将特定隐变量 zzz 转换为观测数据 xxx。在标准的“编码器-解码器”结构中,pϕ(z∣x)p_\phi(z|x)pϕ(z∣x) 可视作编码器,而 pθ(x∣z)p_\theta(x|z)pθ(x∣z) 则对应解码器。
VAE的ELBO求解
从“变分”与“自编码”的定义出发,我们了解如何使用编码器参数ϕ\phiϕ 、解码器参数θ\thetaθ联合优化VAE的ELBO公式(1.1.12)。
我们利用蒙特卡洛估计来近似的重建项(reconstruction term,公式(1.1.12)中重建项)。因此我们的VAE的ELBO目标重写公式(1.1.13):
argmaxϕ,θEpϕ(z∣x)[logpθ(x∣z)]−DKL(pϕ(z∣x)∣∣p(z))≈argmaxϕ,θ1L∑l=1Llogpθ(x∣z(l))−DKL(pϕ(z∣x)∣∣p(z))(1.1.13)\begin{gathered}\arg\max_{\phi,\theta}\mathbb{E}_{p_\phi(z|x)}[\log p_\theta(x|z)]-D_{KL}(p_\phi(z|x)||p(z))\\\approx\arg\max_{\phi,\theta}\frac{1}{L}\sum_{l=1}^L\log p_\theta(x|z^{(l)})-D_{KL}(p_\phi(z|x)||p(z))\quad(1.1.13)\end{gathered}argϕ,θmaxEpϕ(z∣x)[logpθ(x∣z)]−DKL(pϕ(z∣x)∣∣p(z))≈argϕ,θmaxL1l=1∑Llogpθ(x∣z(l))−DKL(pϕ(z∣x)∣∣p(z))(1.1.13)
【蒙特卡洛估计】在概率论里,期望可以理解为“加权平均”——即,按照某个概率分布,把所有可能结果的加权平均算出来。例如:抛一次骰子,点数期望是:E[x]=1+2+3+4+5+66=3.5\mathbb{E}[x]=\frac{1+2+3+4+5+6}{6}=3.5E[x]=61+2+3+4+5+6=3.5,但如果情况更复杂,或可能性太多/无法列举(比如连续分布),这时用积分写成:Ep(z)[f(z)]=∫f(z)p(z)dz\mathbb{E}_{p(z)}[f(z)]=\int f(z)p(z)dzEp(z)[f(z)]=∫f(z)p(z)dz。
现实中积分太难算(特别是高维空间,比如 100 维的 zzz)。机器学习模型(如 VAE)中,zzz 甚至没有解析表达式,只能采样。“蒙特卡洛采样”就是用随机样本的平均去“近似”原本的期望,具体步骤是:
从概率分布 p(z)p(z)p(z) 里,随机采 LLL 个样本 z(1),z(2),...,z(L)z^{(1)}, z^{(2)}, ..., z^{(L)}z(1),z(2),...,z(L)。
把每个样本带入你要算的函数 f(z)f(z)f(z),计算 f(z(1)),f(z(2)),...,f(z(L))f(z^{(1)}), f(z^{(2)}), ..., f(z^{(L)})f(z(1)),f(z(2)),...,f(z(L))。
把这 LLL 个数求平均,这就是原本期望的近似:Ep(z)[f(z)]≈1L∑l=1Lf(z(l))\mathbb{E}_{p(z)}[f(z)]\approx\frac{1}{L}\sum_{l=1}^{L}f(z^{(l)})Ep(z)[f(z)]≈L1∑l=1Lf(z(l))
举个生活化的例子:假如你想知道全校学生身高的平均值,但全校有一万人,没法全量统计。你可以随机抽取 100 个学生,测量他们的身高,然后算这 100 个的平均,这个结果就是全体的平均值的近似。
样本数越多,越接近真实平均。一句话总结:期望=加权平均,积分太难算时,用随机采样的平均值去近似它,这就是蒙特卡洛采样近似期望。
继续,如果我们训练了编码器ϕ\phiϕ和解码器θ\thetaθ ,我们就很容易得到下面的公式:
pϕ(z∣x)=N(z;μϕ(x),σϕ2(x)I)p(z)=N(z;0,I)\begin{aligned}p_{\phi}(z|x)&=\mathcal{N}(z;\mu_\phi(x),\sigma_\phi^2(x)I)\\p(z)&=\mathcal{N}(z;0,I)\end{aligned}pϕ(z∣x)p(z)=N(z;μϕ(x),σϕ2(x)I)=N(z;0,I)
利用上面这些取值与“两个高斯分布的KL散度”,我们可以直接计算出 了。但这里我不想算。因为我们知道只要让DKL(pϕ(z∣x)∣∣p(z))D_{KL}(p_\phi(z|x)||p(z))DKL(pϕ(z∣x)∣∣p(z))两者尽量相似就可以。因此下面我们设计两个分布,尽可能的让 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x),p(z)p(z)p(z)分布相等。
为什么假设p(z)=N(z;0,I)p(z)=\mathcal{N}(z;0,I)p(z)=N(z;0,I)而不是其他分布?
(1)采样容易,计算简单
标准正态分布N(0,I)\mathcal{N}(0,I)N(0,I),采样最方便(直接用随机数生成器)在训练和推断时,只需要采样z∼N(0,I)z \sim \mathcal{N}(0,I)z∼N(0,I),然后丢进解码器,就能生成新数据。(2)解析性强,推导方便
对于高斯分布之间的KL散度,N(μ1,Σ1)\mathcal{N}(\mu_1, \Sigma_1)N(μ1,Σ1)和N(μ2,Σ2)\mathcal{N}(\mu_2, \Sigma_2)N(μ2,Σ2)有闭式公式,方便数值计算和梯度优化。(3)有利于“生成”能力
训练好VAE后,你希望“随便从潜在空间采样zzz”,能还原出真实的数据分布。如果p(z)p(z)p(z)是标准正态,你采zzz就很自然,不会跑到模型没见过的区域(训练时KL项保证了这一点)。(4)规范化潜在空间,避免“模式崩溃”
如果先验太复杂,隐空间会乱、稀疏,采样时很多zzz值没学过,对应解码出来的数据就“崩坏”了。标准正态让zzz空间密实、覆盖均匀、解码器不会被“拷问”。换别的分布可以吗?
当然可以!比如,某些任务上用混合高斯、稀疏先验,或者其他先验来适应特殊需求,但绝大多数VAE都用N(0,I)\mathcal{N}(0, I)N(0,I),因为足够好用、方便训练和生成。
pϕ(z∣x)=N(z;μϕ(x),σϕ2(x)I)p_{\phi}(z|x)=\mathcal{N}(z;\mu_\phi(x),\sigma_\phi^2(x)I)pϕ(z∣x)=N(z;μϕ(x),σϕ2(x)I)是为什么?
(1)直观角度
VAE的核心思想是:输入xxx经过编码器(encoder)变成zzz的分布,而不是一个确定点。让编码器学会“根据不同的xxx,给出不同的zzz分布”,但分布要“足够简单”,能方便采样与梯度优化。高斯分布N(μ,σ2I)\mathcal{N}(\mu,\sigma^2 I)N(μ,σ2I)是最常见、最简单的可微分连续分布。用均值μ\muμ和方差σ2\sigma^2σ2,可以表达“集中”和“不确定性”。让μϕ(x),σϕ(x)\mu_\phi(x),\sigma_\phi(x)μϕ(x),σϕ(x)都由xxx和参数ϕ\phiϕ决定,表示**“每个xxx都有自己专属的一团高斯云”**,这团云用网络学习出来。(2)理论角度
变分推断需要可微采样,VAE的目标其实是最大化似然的下界(ELBO):logp(x)≥Epϕ(z∣x)[logpθ(x∣z)]−DKL(pϕ(z∣x)∥p(z))\operatorname{log}p(x)\geq\mathbb{E}_{p_{\phi}(z|x)}[\operatorname{log}p_{\theta}(x|z)]-D_{KL}(p_{\phi}(z|x)\|p(z))logp(x)≥Epϕ(z∣x)[logpθ(x∣z)]−DKL(pϕ(z∣x)∥p(z)),其中pϕ(z∣x)p_\phi(z|x)pϕ(z∣x)是用神经网络近似的后验分布。但如果pϕ(z∣x)p_\phi(z|x)pϕ(z∣x)选得太复杂,一是难以用神经网络输出和采样(比如离散分布),二是KL散度很难算或没法反向传播。
而高斯分布有很多优点:可以用神经网络直接输出μ\muμ和logσ\log\sigmalogσ(参数化输出)。可以reparameterization trick(重参数化技巧):z=μϕ(x)+σϕ(x)⊙ϵz = \mu_\phi(x) + \sigma_\phi(x) \odot \epsilonz=μϕ(x)+σϕ(x)⊙ϵ,其中ϵ∼N(0,I)\epsilon\sim \mathcal{N}(0,I)ϵ∼N(0,I)。这样采样过程也可微,有助于梯度优化。两个高斯的KL散度有解析解,不用复杂积分。
为什么协方差用σ2(x)I\sigma^2(x)Iσ2(x)I,不用一般的Σ\SigmaΣ?III是对角矩阵,表示各维独立,简化了参数和计算量。如果用一般的Σ\SigmaΣ,需要预测zzz维数的z×zz\times zz×z协方差矩阵,参数量大、运算慢、容易不正定。
(3)工程实践角度
用高斯分布且μ,σ\mu,\sigmaμ,σ都由xxx输出,可以用简单的全连接/卷积网络实现。实际中一般预测的是logσ\log\sigmalogσ,防止数值不稳定。训练和推断时都能直接采样,效率高。
[两个高斯分布的KL散度]
这个是由解析式的,这里不给出证明,直接用就行:
DKL(N(μ1,q12)∣∣N(μ2,q22))=logq2q1−12+q12+(μ1−μ2)22q22D_{KL}(\mathcal{N}(\mathfrak{\mu}_1,\mathfrak{q}_1^2)||\mathcal{N}(\mathfrak{\mu}_2,\mathfrak{q}_2^2))=\log\frac{\mathfrak{q}_2}{\mathfrak{q}_1}-\frac{1}{2}+\frac{\mathfrak{q}_1^2+(\mathfrak{\mu}_1-\mathfrak{\mu}_2)^2}{2\mathfrak{q}_2^2}DKL(N(μ1,q12)∣∣N(μ2,q22))=logq1q2−21+2q22q12+(μ1−μ2)2
VAE的结构设计
公式(1.1.13)给出了VAE常用的ELBO目标函数。基于这一公式,网络结构通常设计为如下形式:

左侧的编码器表示 pϕ(z∣x)p_\phi(z|x)pϕ(z∣x),右侧对应解码器 pθ(x∣z)p_\theta(x|z)pθ(x∣z)。解码器部分通常通过参数 θ\thetaθ 进行训练,因此也常记作 pθ(z)p_\theta(z)pθ(z)。为了使编码器与解码器两侧的分布尽量一致,计算出编码器输出的均值和方差后,最直接的想法可能是对 N(μ,σ2)\mathcal{N}(\mu, \sigma^2)N(μ,σ2) 进行采样,并将结果输入解码器。
不过,直接在神经网络中进行随机采样会导致模型无法进行端到端反向传播,网络不可导。
解决方法是引入重参数化技巧,将采样操作转化为可导的确定性函数。例如,对于服从正态分布 x∈N(x;μ,σ2)x \in \mathcal{N}(x;\mu, \sigma^2)x∈N(x;μ,σ2) 的随机变量,可以重写为 x=μ+σϵx = \mu + \sigma \epsilonx=μ+σϵ,其中 ϵ∼N(ϵ;0,I)\epsilon \sim \mathcal{N}(\epsilon;0, I)ϵ∼N(ϵ;0,I)。
这实际上就是标准化正态分布的等价公式 y=x−μσy = \frac{x-\mu}{\sigma}y=σx−μ 的逆变换。在VAE中,为确保梯度能够顺利传递,采用如下重参数化表达式:
z=μϕ(x)+σϕ(x)⊙ϵ,ϵ∼N(ϵ;0,I)z = \mu_\phi(x) + \sigma_\phi(x) \odot \epsilon, \quad \epsilon \sim \mathcal{N}(\epsilon; 0, I)z=μϕ(x)+σϕ(x)⊙ϵ,ϵ∼N(ϵ;0,I)
其中 ⊙\odot⊙ 表示逐元素乘法。采用该重参数化方法后,可以通过 ϕ\phiϕ 对 μϕ\mu_\phiμϕ 和 σϕ\sigma_\phiσϕ 求梯度,确保整个网络流程的可导性。具体结构可以参考下图:
