type
Post
status
Published
date
Apr 27, 2026
slug
DL6_cn
summary
tags
深度学习
category
学习笔记
icon
password
潜空间学习
潜空间
相比语言和文本上下文,真实世界中的图像和视频是高频信息,我们不能简单复制语言模型的路径。一个重要思路是:在高频信息中找到低频的结构性成分,这就是我们所说的表示。
无监督学习(Unsupervised Learning)直接学到:
一种思路是,引入潜空间(Latent Space),使得学习任务变为:
这样数据的边缘分布为:
这里的存在意味着那个能够构造出真实数据分布的潜空间仍旧是一个特别的分布,代表着造成数据空间分布的真实的原因。
这样模型的架构是,有编码器,以及解码器用于重建。在这里,和过去我们谈到的的特征已经不一样了,特征是为了解决特定任务所构造的手段,而潜变量是真实世界的内部机制,是真实世界的表示(Representation)。
VAE
传统 VAE
相比于传统AE,VAE的首要进步是考虑有效数据的分布应该连续铺满整个潜空间,即不是一个分布,而是一个高斯分布,考虑先验也是高斯分布,从而利用变分推断求解问题:
考虑用编码器和解码器变分推断真实逆因果,利用KL散度展开容易得到:
因此最小化散度等价最大化证据下界:
现在的问题是,通常的编码器只输出一个点,怎么输出一个分布呢?VAE通过引入噪声并:
然后考虑同样近似是个高斯分布,那么重参数化:
因此编码器只需要输出均值和方差即可。对于KL散度项,我们计算过,当我们将先验考虑为,而后验为,KL散度有显式解:
因此对于直接的潜空间分布:
KL散度项将其约束到一个标准的高斯分布上,即用多个高斯分布簇逼近一个高斯分布。
生成器则从均值和方差的高斯分布中采样,重建,因而生成器的均值为:
因此梯度流可以稳定回传。
VAE的这种先验模式让语义变化足够连续,可以插值:

可以看到,从横向上脸朝向角度连续变化,纵向上表情从严肃到笑容,这意味着表征解耦了。
β-VAE
传统VAE的问题是,训练时可能会观察到KL散度迅速收敛,而后模型很难再学到什么新东西,意味着模型快速将编码器压缩到了正态分布上,导致后验不在能够学习,这种情况称为后验坍塌。
一个改进方法是采用,即在KL散度上加上权重,称为。
如果很大,意味着强先验,后验可能学不到什么东西,如果很小,意味着强后验,潜空间结构混乱,退化为标准AE。VAE等价于对特征施加正则化,不同于过去模型我们只是对权重施加L2正则化。
我们之所以希望潜空间能够是结构化的,尤其是高斯结构的,这是因为我们希望能够通过简单的欧几里得行走建立出新的图片。请你回想起我们在第二张考虑监督学习任务的标签分布是高斯先验的时候,我们自然给出了均方差损失函数。当我们期望特征被约束到高斯结构时,这种均方误差平滑性仍然存在,这就是欧几里得行走的语义连续性来源。
但是这样一种强正则可能使得模型的学习效率低下,这种低下对于生成模型是有害的,这意味着几乎无细节。改进方案GMM通过叠加多个高斯分布族来提供更高效的表示能力,但是取得的进步也是有限的。
VQ-VAE
向量量化(Vector Quantized)方法不再采取稳定的高斯族,而是认为隐空间是一个稳定的码表,即隐空间是一个嵌入空间,因此是离散的。
对于编码器得到的特征向量,我们考虑码表向量中与之欧几里得距离最近的那个:
因此带有VQ的AE架构的基本方法是:
回归损失函数是均方误差损失函数梯度流会反向传播到,遇到VQ的问题——不可导,在训练中这是通过梯度流控制解决的。
首先反向传播到,然后将梯度直接跳过VQ拷贝到,进而反向传播正常进行。
但是这样VQ阶段就无法更新了,通过构造两个损失分别更新Embedding矩阵和:
sg 表示停止梯度(Stop Gradient)。
最后组合损失函数:
完成重建如下:

我们做了什么,训练时,我们通过近似逼近了潜空间离散码表,这样我们得到了一个离散的潜空间采样,利用解码器,它可以得到一个边缘分布:
这是对真实数据分布的逼近。
为了能够进行图像生成,我们必须对这个采样分布连续化,通过采样结果学习的分布,一种简单的思路是进行顺序自回归:
或者采取其他自回归结构以捕捉更加复杂的规律。
但是我们更关心的在于,这个分布仍然是一个有复杂结构的,这意味着,我们构造了一种编码,降低了数据流形的复杂性程度,那么你可以想到,如果你考虑足够长的变换,你一定能够降低复杂程度直到它是简单的。这就是说,我们构造一个复杂变换使得流形的复杂结构被解开了。
GAN
GAN 优化
生成对抗网络(Generative Adversarial Network)只考虑训练解码器,潜变量从正态分布中直接采样:
它构造了一个复杂的学习任务,首先构造一个生成器和一个判别器,现在,它严格遵守从高斯分布采样,然后经过生成器得到,这是一个图像,现在判别器判别这个图像,这是一个置信,我们期望,生成器努力欺骗判别器,使得判别器置信最大,而判别器要尽量使得这个置信最小。同时我们输入真实图像,让最大。写成优化问题如下:
这个优化问题凝练的表达了生成对抗的思想。最后,理想的学习结果是纳什均衡,意味着生成器生成的图像使得判别器无法判别,即.
这个直接结果的问题是,如果判别器已经完美了,即,那么就没有的梯度了,即梯度消失,为了解决这个问题,还必须要引入别的训练技巧。
JS 散度
现在我们考虑解析这个优化问题,首先考虑内层的最大化:
取,,假设存在,则:
这是一个变分极值问题,好在没有一阶导数项,因此根据欧拉拉格朗日方程:
这里,,于是:
得到:
现在考虑外层优化:
等价于最小化
看起来这和两个 KL 散度十分相似,只是考虑的是,考虑代入:
这两个KL散度的一半被称为是JS散度:
是一个非常优越的散度,首先,它是交换对称的,并且它是有界()的。GAN找到了一个比概率似然最大化更加有效的方法,即JS散度。并且它直接最小化生成器边缘似然和的差距,但是却对应一个有效的优化方法,即对抗方法。
VAE-GAN
传统 VAE 的失败,不是因为其理论框架(最大化 ELBO)或高斯假设有根本性缺陷,而是因为由于损失函数不完善MSE 无法提供足够强的、对人类视觉友好的梯度信号,在 MSE 这种弱信号下,编码器容易屈服于 KL 损失而坍缩。 GAN 损失的出现,为解码器和编码器提供了更强大的、对抗性的梯度信号。这个强大的信号使得优化器能够同时满足高质量重建和高斯约束,这就是VAE-GAN。
因此理论上拥有三个损失:
实际优化中的是通过对抗生成的等价的。 保证了编码器和解码器是绑定的。
训练过程是,输入真实图片,产生潜空间后验,然后从先验采样,然后利用解码器生成图,利用约束,利用约束先验和后验,利用进行对抗学习。
VAE-GAN 成功地将数据的复杂结构(如高分辨率图像)编码到中,并且保持了接近(高斯分布)。这证明了标准高斯分布本身有足够的容量作为通用潜在先验来解释复杂数据。不是高斯约束不合理,而是 VAE 缺乏足够的“力量”来优化它。

流模型
我们刚才给出过
这里是雅可比矩阵。这个表达式意味着,似然可以严格由连续的双射变换从一个采样分布演化过来,因此流模型的思路是构造连续的双射变换:
那么:
因此可以通过最大来:
流模型通过精确似然估计绕开了对潜空间进行先验约束所造成的优化复杂度,但是现代神经网络几乎不是双射的,流模型的做出了一些很巧妙的发展。
- 耦合层技术
考虑讲切分为,考虑变换,那么这个变换可逆:
但是流模型的代价是,他必须堆叠非常多的层以实现多个简单的双射变换能够将流形解开。
数据空间学习
能量基模型
除了通过神经网络将数据变换到潜空间,从而将问题转化为更为简单的潜空间建模和神经网络学习问题,有思路主张直接学习数据空间本身的分布,利用的是玻尔兹曼分布:
这里是的能量函数,这个分布的性质是,能量越大,概率越小,能量越小,概率越大,如果这个建模是成功的,则直接可以通过从某个噪音(高能量)起点最小化能量来获得真实分布。
能量基模型采取的就是这个思路,通过模型建模能量函数,直接建模边缘似然,考虑真实分布,首先考虑最小化两者的散度:
即需要最小化真实数据的能量平均值和配分函数对数,第一项容易理解,但第二项是什么呢,我们考虑解析这个优化问题:
考虑求导数:
而我们知道:
这样:
我们称第一个问题为正相,第二个问题为负相。对于正相,只需要准备数据集即可;对于负相,需要从模型分布 中采样,传统方法是马尔可夫链蒙特卡洛(MCMC)。
对于能量基模型,常用的采样动力学是过阻尼朗之万方程:
其中 会把样本推向低能量区域, 是布朗噪声,用来保持随机探索。因为:
所以当这条随机动力学运行足够久并达到平衡态时,它的平衡分布就是模型分布 。
离散化以后,MCMC 链可以写成:
实际运行时通常是:
- 初始化 ,可以来自高斯噪声、均匀噪声或 replay buffer。
- 重复若干步:计算 ,沿低能量方向移动,并加入高斯噪声。
- 丢弃前期 burn-in,或直接取最后若干步样本作为近似负样本。
- 用这些负样本估计负相 ,再更新能量函数。
这部分只需要知道:MCMC 的作用是把一批初始噪声样本逐步推到能量模型的平衡分布附近,从而近似从 中采样。
分数匹配
散度-范数方法
在上一节,MCMC是作为一种近似玻尔兹曼分布的方法而介绍的,但是它描绘的马尔可夫链具有更深远的性质。这一过程的直接结果是,倘若我们已经找到了最好的那个,那么我们就可以通过马尔可夫链从任何一个随机点收敛到真实图像,这是我们之前所期望的。
问题是我们还未曾学到这个,我们执行的那个马尔可夫链是错误的。那么一种思路就来了,我们为什么要学习这个,而不是学习这个马尔可夫链本身呢,精确的讲,为什么不是学习朗之万方程的呢?这就是分数匹配(Score Matching)的思想。
首先我们考虑玻尔兹曼分布:,取对数,求梯度,因此能量梯度的负值正比概率对数似然的梯度,我们定义分数为:
对于真实分布,它的分数函数用神经网络逼近,考虑MSE:
因为真实分数未知,我们考虑使用数学方法:
第三项是常数,因此:
现在展开第二项:
并且考虑按照分量进行分部积分,考虑边界概率为0:
代回:
第一项是分数函数的散度,第二项是范数,因此成为散度-范数目标函数。但是在反向传播中还有一次梯度,因此构成两次梯度,这大大增加了训练难度,尤其是在大样本情况下。
去噪分数匹配
既然我们无法直接知道“噪声图如何变成真实图”,那就从真实图像出发,人为加噪声,把它变成噪声图。由于加入的噪声是已知的,于是就可以构造监督学习目标,让模型学习如何把这个过程反过来,这就是去噪分数匹配(Denosing Score Matching)的直观出发点。
考虑:
则条件分布为:
噪声样本分布的分数函数
由于边缘分布 不可直接求,我们利用条件分布的解析分数作为伪标签(严格性见Appendix B):
于是 DSM 训练目标可写为:
如果定义噪声预测参数化
则可得到等价目标:
这就把“分数学习”转写成了“噪声回归”。
在训练中,DSM 学到的是噪声分布的分数函数 。生成时,我们希望利用这个分数函数从噪声逐步走向数据分布。
对于固定噪声尺度 ,可采用离散朗之万动力学:
其中第一项沿 score 方向把样本推向高概率区域,第二项注入随机性以维持探索。
退火DSM
对于DSM训练过程,我们希望模型直接学到一个方差较小的噪声,这使得成本函数很大,并且实际训练中,利用梯度下降法会遭遇到非常严重的困难。同样对于生成过程,小时分数很大、曲率很陡,离散更新要用很小步长,不然就不稳定或震荡。
较大的 会把数据分布平滑得更强,因此对应的 score 场更平缓、优化更稳定,Langevin 更新会接近纯布朗运动,只会维持在噪声分布附近,无法恢复数据细节。因此大 易于学习粗结构,但细节弱;小 承载细节,但 score 场更陡、监督尺度更敏感、采样步长要求更严格,因此训练与采样都更困难。
噪声退火(Annealing)机制提出,我们可以让模型学习不同尺度的的怎么去噪,在生成时逐渐减小,逐步引导模型,从一个高噪声的分数逐渐学习到低噪声的分布,从粗线条学习到精细学习。
我们让模型不仅接受污染图像,还接受本身,并且训练各个尺度,即序列,于是为:
生成时就从高逐渐降低:
的序列可以有多种取法,例如可以取几何递减序列:
比如在 Song and Ermon (2019) 中,图像实验取 ,,,因此得到一组从大噪声到小噪声按固定比率递减的序列:
扩散模型
扩散模型提出于
这篇论文的思路见Appendix C,并不是现代的扩散模型,现代观点主要成型于
退火去噪朗之万
扩散模型考虑,既然ADSM推理是展开的是一个链,为什么不直接学习一个链的加噪声过程,再还原回来,如下图

考虑前向加噪链:
即:
这里我们显式学习反向一步条件分布:
如果采用噪声预测参数化,记模型输出为 ,则每一步损失可写为:
总损失为:
需要注意的是,在 score-based 语言里, 是时刻 的边缘分布 的分数:
这里的 表示前向扩散过程在时刻 诱导出的边缘分布,也就是原始数据分布在该噪声尺度下被平滑后的分布。于是扩散过程的逆过程也可以作如下直观理解:在某个固定的 下,利用 做朗之万迭代,使样本逐步逼近该时刻的分布 ;然后切换到一个更小的 ,继续在新的分布上做朗之万迭代,如此逐层推进,最终回到 ,也就是原始数据分布。与传统朗之万采样的根本不同在于,这里的目标分布并不是一个固定的平稳分布,而是一族显式依赖于时间的分布 ,因此整个逆过程本质上是显式含时的。
单步采样:VE/VP
- 方差爆炸(VE)
先看方差爆炸(VE)框架。的前向过程可以写成累计形式:
其中 是标准高斯噪声, 随时间增大。这意味着随着时间推移,样本是在原始数据上叠加越来越强的高斯噪声,因而方差不断增大,最终接近一个几乎不含原始信息的高斯分布。
这里的关键点是:逆过程中的目标分布不是固定的,而是显式依赖于时间的 。因此它和传统朗之万采样虽然都使用 score,但本质上不是同一种平稳过程。
VE 的优点是形式直接,前向过程就是不断增大噪声方差;但它的缺点也很明显。由于信号项始终保持为 ,而噪声尺度 持续增大,不同时刻样本的整体尺度差异会非常大,训练和采样都更难在统一数值范围内处理。
- 方差保持 (VP)
因此现代离散扩散模型更常采用方差保持(VP)框架。它的前向过程写为:
这里的 表示第 步注入噪声的强度: 越大,该步保留的原始信号越少、加入的随机噪声越多; 越小,该步扰动越弱、链的演化越平缓。因此整组 实际上决定了前向扩散的速度,也决定了反向去噪的难度分布。
常见的取法有几类。例如最简单的是线性增长:
它表示前期轻微加噪、后期逐渐增强。另一类是二次或更一般的非线性增长,例如先让 线性变化,再平方得到 ,这样前期变化更缓、后期增长更快。现代扩散模型中更常见的还有余弦 schedule,它不是直接线性设定 ,而是先平滑设定累计信号系数 的衰减,再反推出各步的 ,这样通常可以让不同时间步上的信噪比变化更加均匀。
记
则可以直接得到一步公式:
如果方差为 ,那么:
所以它叫方差保持。
DDPM:马尔可夫概率
DDPM 先定义一条前向马尔可夫链:
其中:
生成时,从简单高斯分布 出发,定义反向链:
并令每一步反向核也是高斯:
于是模型通过一步一步去噪,把 逐步还原成 。直接比较前向路径分布与模型路径分布之间的差异,即考虑:
把对数展开后可写成期望形式:
把这些项按条件概率关系整理,可得标准的变分下界分解:
其中表示在已知当前状态 和原始样本 时,由前向高斯链诱导出的逐步条件后验,由贝叶斯公式可得:
由于前向链是马尔可夫的,给定 后, 与 条件独立,因此,而前向高斯链满足,,因此:
是两个关于 的高斯分布之积,所以仍然是高斯分布。把指数项按 配方整理后,得到
其中
以及
而构造为高斯分布:
若把反向核方差固定为
则第 步 KL 项化为:
现在利用前向重写式
代入得到:
并把模型均值重参数化为:
代回上式后, 可以严格重写成:
再把 展开,即得:
生成时,DDPM 不再写成连续时间反向 SDE,而是直接定义离散反向链:
其中每一步的反向核取为高斯分布:
迭代步为:
DDPM的跨步转移
实际采样时,如果想减少生成步数,通常不是去改训练时定义好的前向网格 ,而是在生成时只选其中一组更稀疏的时间点,例如
这里要注意,粗步长采样并不是简单把很多个一步反向核 直接连乘成一个新的转移概率。更自然的做法是先利用前向过程的闭式高斯结构,直接写出跨多个时间步的前向条件分布:
于是像一步情形那样,由贝叶斯公式可得对应的跨步后验:
它仍然是高斯分布:
其中
以及
实际算法里,再用模型从 预测出 ,把上式中的 换成 ,就得到一个从 直接跳到 的近似反向转移。也就是说,训练时模型仍然是在原来的细网格上学到去噪能力,而采样时则借助前向过程的闭式结构,把很多小步合并成更大的跳步。这样做的结果是生成速度更快,但由于数值近似更粗,采样误差通常也会更大。

DDIM:确定性反向过程
DDIM,全称 Denoising Diffusion Implicit Models,可以理解为在 DDPM 已有训练目标上,对采样过程做出的重新解释。它的关键点是:不改变 DDPM 的噪声预测训练方式,但允许使用一个非马尔可夫的、甚至确定性的反向生成过程。
DDPM 的前向过程是 VP:
这说明给定任意时刻的 ,如果模型能够预测噪声 ,我们就可以反推出一个对原始干净样本 的估计:
DDPM 的反向采样会从 采样 ,并且每一步重新注入随机噪声。这种做法是马尔可夫的:
而 DDIM 观察到:只要边缘分布仍然满足同样的前向加噪关系,我们不一定必须使用原来的马尔可夫反向链。由于前向过程满足
因此给定 和模型预测的噪声 ,我们可以先反推出一个对原始样本的估计:
接下来,希望 仍保持与前向过程一致的结构,即写成“信号项 + 噪声项”的形式:
其中总噪声方差应当等于 。DDIM 将这部分噪声再拆成两项:一项沿着当前模型预测的噪声方向 ,另一项是重新注入的随机噪声 。若令重新注入噪声的标准差为 ,那么其方差为 ,其余噪声方向项所能分配到的方差就只能是
因此可以构造一个从 到 的更新:
其中 ,这里第一项表示当前估计的干净图像成分,第二项表示保留下来的噪声方向,第三项表示重新注入的随机噪声, 控制每一步采样的随机性,为:
当 时,这个过程接近 DDPM 的随机采样;当 时,更新变成:
这就是确定性 DDIM 采样。给定同一个初始噪声 ,整个生成轨迹就被确定下来,不再需要每一步额外采样随机噪声。
DDIM 的重要性在于它把 DDPM 的采样过程从“很多小步的随机去噪”改写为“可以跳步的确定性去噪”。由于 可以直接由 和噪声写出,采样时不必严格走完整的 步,而可以选择一个较短的时间子序列:
然后只在这些时间点之间做 DDIM 更新。因此原来可能需要 1000 步的 DDPM 采样,可以缩短到 50 步、25 步甚至更少。
从概率流 ODE 的角度看, 的 DDIM 很自然地对应一种确定性流:它不再依赖反向 SDE 中的随机噪声项,而是沿着模型预测出的去噪方向把 推回 。因此 DDIM 可以看作从随机扩散采样走向确定性 ODE 采样的重要过渡形式。
需要注意的是,DDIM 本身不是重新训练一个新模型,而主要是一种采样解释和采样器。它复用 DDPM 学到的 ,通过改变反向过程的方差和时间步选择,在生成质量、速度和随机性之间做权衡。
扩散SDE
用 Itô SDE 统一扩散过程
论文先假设前向加噪过程是一个 Itô SDE:
其中 是漂移项, 是扩散强度, 是标准布朗运动。这个写法的意义在于:只要我们指定好 ,就等于指定了一条从数据分布逐渐走向简单噪声分布的连续路径。
它把很多看似不同的扩散模型都变成了这个框架下的特例:
- VE SDE(Variance Exploding):主要不断增大噪声尺度,典型写法是
这里没有显式漂移项,样本均值基本不动,但方差持续膨胀。
- VP SDE(Variance Preserving):对应 DDPM 最熟悉的连续极限:
它会一边衰减信号,一边注入噪声,因此最终收敛到标准高斯。
论文的贡献之一,就是说明“扩散模型”本质上不是某一个固定离散链,而是一类由 SDE 定义的连续生成路径。
Reverse-time SDE:为什么能从噪声走回数据
关键问题是:既然前向过程会把 推到接近高斯的 ,那反过来能否构造一个随机过程把噪声推回数据?答案是可以,而且逆过程仍然是一个 SDE:
这里的
就是时刻 的 score function。它告诉我们“往哪个方向走,概率密度上升最快”。因此 reverse SDE 的直觉非常清楚:
- 原来的漂移项 保留了前向动力学的骨架;
- 新出现的 把样本从噪声区域拉回高概率区域;
- 因为仍然有布朗噪声项,所以这条反向轨迹本身仍然是随机的。
所以真正困难的地方,不是 reverse SDE 的形式,而是我们并不知道真实的 。扩散模型训练的本质,就是学习这个随时间变化的 score。
Estimating Scores for VE SDEs, VP SDEs, and Beyond
论文把训练统一成一个时间条件的 score matching 问题。令神经网络输出:
训练时的做法是:
- 从真实数据采样 ;
- 随机采样时间 ;
- 用前向 SDE 的边缘分布 直接把 扰动成 ;
- 让网络回归这个条件分布的 score。
统一损失可写成加权去噪 score matching:
这里最关键的技巧是:虽然 本身不可得,但 往往是可写出的,因为前向扰动核通常是高斯。
例如:
- 对 VE SDE,若 ,则
- 对 VP SDE,边缘分布满足
因此条件 score 同样有显式高斯形式。
Probability Flow 和 Neural ODE 的联系
论文最漂亮的一步,是说明与上面这个前向 SDE 对应,还存在一个确定性的概率流 ODE,它和 SDE 具有相同的边缘分布演化:
注意它与 reverse SDE 只差了一半的 score 系数,而且没有随机噪声项。这个结果非常重要,因为它说明:
- 你可以用随机的 reverse SDE 采样;
- 也可以用确定性的 ODE 采样;
- 这两条路在分布层面是一致的。
对 VP SDE,若用网络 近似 score,则概率流 ODE 为:
这就把扩散模型和 Neural ODE / Continuous Normalizing Flow 连接起来了。因为一旦是 ODE,我们就可以:
- 用常微分方程求解器做确定性采样;
- 用瞬时变量替换公式计算精确或近似似然;
- 把“生成”理解为一条连续可积的流,而不只是很多随机去噪步。
直观上说,reverse SDE 像是在噪声扰动下往数据流形附近回走,而 probability flow ODE 则像是沿着一条确定的速度场,把样本平滑地运回数据分布。
因此,这篇论文真正建立的是一个统一图景:
- 前向加噪是 Itô SDE;
- 生成过程是 reverse-time SDE;
- 训练目标是时间条件的 score estimation;
- 采样既可以走随机 SDE,也可以走确定性的 probability flow ODE。
它把扩散模型从“一个很有效的离散去噪技巧”,提升成了“一个连续时间概率流框架”。
DPM-Solver
对 VP 型扩散,前面已经写出 probability flow ODE:
若改用噪声预测参数化,记
其中 是 log-SNR,并且
于是扩散 ODE 可以改写成关于 的形式。DPM-Solver 的关键是:不把它当成普通黑盒 ODE
直接做低阶离散,而是把线性部分显式解掉。
设从时刻 积分到 ,解可写成变参数形式:
这里第一项是线性项的解析传播,第二项是神经网络项的积分贡献。因此问题被化成:如何高精度逼近
一阶 DPM-Solver
若在区间 上把网络输出近似为常数:
则得到一阶更新:
二阶 DPM-Solver
若改用线性近似:
则可得到二阶更新。其本质是利用两个时刻的网络评估,对积分项作二阶逼近。
三阶 DPM-Solver
进一步若用二次近似:
则得到三阶更新。也就是说,DPM-Solver 的本质可以概括为:
因此它并不是重新定义扩散模型,而是把采样问题改写成:
与 PC sampler 相比,PC 依赖:
而 DPM-Solver 依赖:
所以它可以在较少步数下仍保持较好精度,这也是后续快速采样器的核心方向。
LDM:在潜空间中学习数据分布
LDM 的核心思想是:不要直接在像素空间中做扩散,而是先把图像压缩到潜空间,再在潜空间里做扩散。
然后在潜变量 上加噪和去噪:
最后再通过解码器回到图像空间:
这里的 Encoder 和 Decoder 是预训练好的图像自编码器,不是扩散模型本身。真正学习去噪过程的通常是潜空间中的 U-Net。
以 Stable Diffusion 为例,一张 的图像可以被编码成大约 的 latent。扩散模型在这个更小的 latent 上工作,因此计算量大幅下降。
因此,LDM 不是放弃数据空间学习,而是先把像素空间压缩成更容易建模的潜空间,再在潜空间中学习数据分布。Stable Diffusion 正是这个思路的代表。
Appendix A: MCMC
布朗运动
布朗运动方程为:
这个噪音满足:
考虑系统达到稳态,即,代入布朗运动方程:
考虑存在势能,对应的力为,代入:
从而:
我们引入维纳过程,它满足,而一个高斯过程满足且:
这里考虑了在的积分区域内。这意味着,高斯过程是一个维纳过程,即,代入,于是:
这就是过阻尼朗之万方程。在深度学习中通常我们简化代入
现在考虑玻尔兹曼分布:
得到:
请注意,这个分布是平稳布朗粒子系统的单个粒子的行为。
- Fokker-Planck Equation
从概率守恒
结合可以导出FPE:
这里,考虑标量加性噪声,,得到:
这里是概率密度,对于朗之万方程,从而:
现在考虑演化到稳态,即,此时,代入
显然这是成立的,因为。这意味着,由朗之万方程规划的随机行为存在平稳态解就是。
马尔可夫链蒙特卡洛
MCMC理论保证朗之万方程的马尔可夫链可以收敛到平稳态解,我们接受这一点,因此对于玻尔兹曼分布,我们构造随机过程,考虑离散化得到:
运行MCMC链:
- 初始化
- 计算评分函数,采样噪声
- 根据朗之万方程执行更新,得到,加入序列集合
取的点近似作为真实点,然后对于EBM的梯度第二项进行蒙特卡洛估计:
Appendix B: Denosing Score Matching
考虑,那么:
现在我们让一个神经网络来学习它,损失函数为:
取,因此:
第二项是一个与无关的数,第三项为:
同样利用恒等变换:
对于内部积分第二项,与模型参数无关
对于内部积分第一项:
因此交叉项是一个与模型参数无关的量。
最后我们得到优化问题变为:
Appendix C: SDE
这一节严格推出两件事:
- 前向 Itô SDE 的反向过程仍然是一个 SDE,并且其漂移项会出现 score 修正;
- 存在一个确定性的 ODE,与该 SDE 具有完全相同的边缘分布演化。
前向 SDE 与 Fokker-Planck 方程
设前向过程满足 Itô SDE:
其中 , 是漂移, 是标量扩散系数。记 为 的概率密度。则它满足 Fokker-Planck 方程:
这里利用了 与 无关,因此
其中 是拉普拉斯算子。
反向时间变量
现在定义反向时间变量:
并记
对 求导:
代入前向 Fokker-Planck 方程,得到
这说明当我们把时间反过来时,扩散项在 PDE 中的符号也被反转了。接下来要问:是否存在一个新的 SDE,其正向时间演化恰好满足这个 PDE?
设反向过程仍为一个 SDE
假设存在一个反向时间过程 满足:
其中 是一个标准布朗运动。若它的密度正是 ,则按照 Fokker-Planck 方程, 必须满足:
另一方面,我们已经从时间反演直接得到了:
为了让这两个 PDE 完全相同,我们要求:
把项移到同一边:
再利用恒等式
可得
在通常的边界衰减条件下,可以取散度内部为零,即
于是
把 代回,并记回原时间变量 ,则反向时间过程的漂移为
因此,若用原变量 从大到小书写反向过程,它就是
这就是 reverse-time SDE 的严格来源。
为什么会多出 score 项
上面的推导中,关键一步是
因此修正项本质上来自于概率密度梯度。这个量正是 score:
于是反向 SDE 可以更紧凑地写成:
它说明:前向过程用扩散把分布摊平,反向过程则必须引入 score,把样本重新拉回高密度区域。
Probability Flow ODE 的严格推出
现在再证明存在一个确定性的 ODE,与前向 SDE 具有相同的边缘分布。考虑 ODE:
若它的边缘密度仍记为 ,则其连续性方程为
我们希望这条 PDE 与前向 SDE 的 Fokker-Planck 方程完全一致,即
利用
可改写为
即
在同样的边界条件下,取括号内为零:
两边除以 :
因此得到 probability flow ODE:
它与前向 SDE 满足同一个密度演化 PDE,所以二者在每个时刻都有相同的边缘分布。
反向的 Probability Flow ODE
因为上式对任意时刻都成立,所以若把其中的 score 用神经网络近似:
则反向生成时只需把时间从 积分回 :
这就是扩散模型里常说的 probability flow ODE。它与 reverse SDE 的差别只在于:
- reverse SDE 保留噪声项,因此轨迹随机;
- probability flow ODE 去掉噪声项,并把 score 系数减半,因此轨迹确定;
- 但二者对应的边缘分布演化完全一致。
总结
前向 SDE:
其反向过程为:
与之共享同一边缘分布演化的确定性 ODE 为:
这就是 SDE 论文中 reverse-time SDE 和 probability flow ODE 的严格来源。
- 作者:向思齐
- 链接:https://blog.xiangsiqi.site/notes/DL6_cn
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章













