对于多种数据模态,我们可以将观察到的数据视为由相关联的潜在变量(用随机变量 z 表示)所表征或生成。表达这一概念的最佳直觉来自柏拉图的洞穴寓言。在这个寓言中,一群人终生被锁在洞穴里,只能看到投射在面前墙上的二维阴影,这些阴影是由火堆前经过的不可见三维物体产生的。对这些人而言,他们观察到的一切实际上都是由他们永远无法看到的高维抽象概念所决定的。 同样地,我们在现实世界中遇到的物体也可能是某种更高层次表征的产物;例如,这些表征可能封装了颜色、大小、形状等抽象属性。那么,我们所观察到的内容就可以被理解为这些抽象概念的三维投射或实例化,就像洞穴人观察到的实际上是三维物体的二维投影一样。尽管洞穴人永远无法看到(甚至完全理解)那些隐藏的物体,他们仍能对其进行推理和推断;类似地,我们也可以近似地描述那些解释观测数据的潜在表征。 柏拉图洞穴寓言将潜变量的概念阐释为决定可观测现象的潜在不可见表征,但需注意的是,在生成式建模中,我们通常寻求学习低维而非高维的潜在表征。这是因为在没有强先验知识的情况下,试图学习比观测维度更高的表征是徒劳无功的。另一方面,学习低维潜变量也可视为一种数据压缩形式,并可能揭示出描述观测数据的语义化结构。
ELBO
从数学角度,我们可以将潜在变量和观测数据视为由联合分布 p(x,z) 建模。回顾基于似然的生成建模方法,其核心是通过学习模型来最大化所有观测数据 x 的似然值 p(x) 。我们有两种方式可以处理这个联合分布以还原纯观测数据 p(x) 的似然性:既可以显式地边缘化潜在变量 z :
或者,我们也可以运用概率链式法则:
直接计算并最大化似然函数 p(x) 存在困难,因为这要么涉及对公式 1 中所有潜变量 z 进行积分(对于复杂模型而言难以处理),要么需要获得公式 2 中的真实潜变量编码器 p(z∣x) 。然而,利用这两个公式,我们可以推导出一个称为证据下界(ELBO)的项,顾名思义,这是证据的下界。此处的证据量化为观测数据的对数似然(即
注意此处用
这里的推导思路为先通过概率积分和为1引入
VAE
VAE是AE的一个进阶版本,其保留了AE的思想,希望模型可以将数据通过在一个降维的空间内表示出来,在通过解码器将低维变量恢复为数据本身从而达到降维的效果。对于刚才的ELBO,
这里
因此z的采样过程可以表示为
HVAE
层次化变分自编码器(HVAE)是 VAE 的泛化形式,它将潜在变量扩展到多层级结构。在该框架下,潜在变量本身被解释为由其他更高层次、更抽象的潜在变量生成。
尽管在具有 T 个层级的一般 HVAE 中,每个潜变量都可以依赖于之前所有的潜变量,但本工作聚焦于一种特殊情形——我们称之为马尔可夫 HVAE(MHVAE)。在 MHVAE 中,生成过程是一个马尔可夫链;也就是说,层级间的每次转移都具有马尔可夫性,其中
每个潜变量 Zt 的解码仅依赖于前一个潜变量 Zt+1 。直观而言(如图所示),这可以简单理解为将多个 VAE 逐层堆叠;描述该模型的另一个恰当术语是递归式 VAE。从数学角度,我们将马尔可夫 HVAE 的联合分布和后验分布表示为:
这里就是将上面的ELBO中的两项写为符合当前的马尔可夫HVAE性质的形式。ELBO可以重写为(简单来说,就是将公式3中的两项替换一下)
再将式24代入25中的新的ELBO,得到在马尔可夫HVAE情况下的ELBO展示式
VDM
在马尔可夫HVAE的基础上加入三个限制条件
- 潜在维度严格等于数据维度
- 每个时间步的潜在编码器结构并非学习得到,而是预定义为线性高斯模型。即该模型是以前一时刻输出为中心的高斯分布
- 潜在编码器的高斯参数随时间变化,确保最终时间步 T 的潜在分布为标准高斯分布
这里由第三个限制条件可以得知,式29中的
即为最终时间步T的潜在分布,即这个分布为标准高斯分布,此处考虑到限制条件1,为了表达方便,可以将上面的符号重写,将原始数据表示为 ,将后续的潜变量 表示为 。则之前的联合分布和后验分布可以写为
其中
此处的
β_t (t 从一个很小的值线性增加到一个较大的值。
- 设定方式:
- 首先确定总的扩散步数
T(例如T=1000或T=4000)。 - 然后设定
β_1(初始方差) 和β_T(最终方差)。 β_t的值通过线性插值得到:β_t = β_1 + (t/T) * (β_T - β_1)
- 首先确定总的扩散步数
- 常见取值:
β_1 = 1e-4(0.0001)β_T = 0.02得到 自然也就得到了 。 余弦调度方法β_t,而是先定义α_t的累积乘积ᾱ_t(alpha-bar)。ᾱ_t代表从x_0一步加噪到x_t时,x_0前的系数的平方。我们希望ᾱ_t从1平滑地过渡到接近0,而不是像线性调度那样在后期急剧下降。
- 设定方式:
- 首先定义一个函数
f(t):f(t) = cos^2( (t/T + s) / (1 + s) * π/2 )其中s是一个很小的偏移量(例如s = 0.008),用来防止t=0时β_t变得过小。 - 然后用
f(t)来定义ᾱ_t:ᾱ_t = f(t) / f(0) - 最后,通过
ᾱ_t反推出每一个时间步的β_t:β_t = 1 - ᾱ_t / ᾱ_{t-1}(因为α_t = ᾱ_t / ᾱ_{t-1}且β_t = 1 - α_t)
- 首先定义一个函数
- 特点:
- 优点:
ᾱ_t的下降曲线非常平滑,使得噪声的添加在整个过程中更加均匀。- 避免了线性调度在开始和结束阶段的突变问题,训练更稳定。
- 生成的样本质量更高,特别是在使用较少采样步数(例如50步或100步)进行推理时,效果远超线性调度。 则在HVAE中的ELBO用上面的式30和32重写并进行一系列变换后得到
- 优点:
其中43-44是因为期望的表达式中仅含有相关的变量,则其余的无关变量作为边缘概率被消去。44-45可以通过KL散度的定义结合贝叶斯公式得到。
此处式45中的第一项是重构项,表达的是在已知第一步隐变量的情况下,重构得到原始数据的可能性的对数。和VAE中的重构项含义相同。第二项同样和VAE中的先验匹配项含义相同,此处
将其代入之前ELBO的推导过程中替换掉之前的
其中前两项和刚才相同,最后一项现在只有
该公式中右侧第一项相当于
对于
其中63-64满足两个独立的高斯随机变量之和仍是高斯随机变量,均值为二者均值和,方差为二者方差和的性质。这样就得到了任意的
得到了采样得到
其中
此处
这里优化目标可以直观解释为对任意时间步t的噪声图像
这样的好处是训练时无需同时计算T个时间步上的所有损失,而是随机取一个时间步就可以训练。
除此以外,对训练目标还有两种等价的参数化方法。
第一种是对
将其代入
则原始的优化目标可以转换为
此处,
AdaLN-Zero
AdaLN-Zero作为Diffusion Transformer中对时间t条件化的信息注入方式。 标准的层归一化是在特征维度上计算的,公式如下
其中
这里
JiT
可参考周亦帆博客JiT解读,内容讲解的非常好,这里仅挑选我觉得非常重要的内容再做进一步的解释。 JiT核心思想是,让扩散模型的预测目标从速度变成清晰图像,就能成功训练出一个像素空间的高分辨率DiT,无需对DiT做复杂改进,但根据周亦帆博客中的实验表明,其实真正的贡献是当对图像做Patch的Patch Size比较大(大于等于4)时,直接预测清晰图像x才比预测速度v更好。
第一个重要的点是要明确设计扩散模型时,有两个可以分离的设计空间:
- 让神经网络预测的目标
- 求最终预测损失的目标
实际使用中,我们有三个可以选择的目标
,且三者之间可以互相转换,但要注意,转换过程不是纯线性的,因此转换得到的不同损失之间并不等价。还要注意这里的v计算得比较粗糙,实际上如果使用DDIM类型的采样,v应该是球面上的速度。
现在问题即为,选择什么样的目标组合可以得到最优的结果,根据文中的实验,如上表所示,预测x,使用v做损失是最优的。在这种情况下,如果使用x-pred和x-loss,一般可以写作类似下面的形式
input x
x_pred = net()
loss = mse(x_pred, x)如果换成v-loss,则会变成下面的形式
input x, eps, t
z = add_noise(x, eps)
v = (x - z) / (1 - t).clamp_min()
x_pred = net()
v_pred = (x_pred - z) / (1 - t).clamp_min()
loss = mse(v_pred, v)此处可以发现,z其实没有作用,因为真实的v和v_pred都减去了z,和x的区别仅在于分母上的1-t。但注意这里不是线性变换,随着t的增大,即越接近清晰的真实图像,1-t越接近于0,对应loss的权重越高,因此使用不同的损失在转换后相当于对于不同的t给同一个loss给予了不同的权重。
第二个重要的点是为什么文中的这种组合仅在大Patch Size时有效,这里的大Patch Size即ViT中将图片进行Patch使用的Patch Size。根据周亦帆的实验,如果不进行Patch,其实JiT这种组合并没有显著的优势,直接使用v_pred效果就很好。 那么为什么在大Patch Size时,使用x_pred要比使用其他pred效果好很多呢。JiT的论文使用流形假设来解释这个问题,这里借用周亦帆博客中的内容:
流形假设表示,高维空间的数据集里的数据并不是均匀分布在整个空间里,而是在一个低维流形上。我们可以用一个简单的例子来说明:假设我们有一个灰度值构成的数据集,可能的灰度值是
[0, 255]。但是,我们存储这些颜色的数据集用的是 3 通道的 RGB 颜色。虽然 RGB 颜色空间有种可能,但实际上灰度值只有 种,且它们分布在一条直线上。这条直线就是高维 3D 空间里的 1D 流形。 JiT 还提出了另一个命题:符合流形假设的数据更容易被神经网络预测。而在扩散模型的预测目标中,纯噪声 是不符合流形假设的,因为它均匀分布在整个高维空间。因此,由纯噪声算得的 也是不符合流形假设的。只有来自真实数据集的清晰图片符合流形假设。 为了验证该命题,JiT 开展了一个迷你实验:为了构造出符合流形假设的数据集,作者将一个 2D 图形用一个维度为 D 的随机投影矩阵投影到了 D 维。接着,作者训练了三个预测目标不同的扩散模型,观察哪个模型能够成功预测这个投影后的 D 维数据。结果发现,随着 D 增加,只有 x-prediction 维持不错的预测效果,预测 和 都不行。
如果神经网络与流形假设的理论是对的,那么 x-prediction 应该总是更优的,为什么我们在 JiT 中发现只有大 patch size 时更优呢?作者在论文里没有详细讨论这一点,而我通过之前的知识大概想出了原因。这涉及神经网络的更底层的概念:一个 Transformer 到底预测了什么?
在学习神经网络的时候,我们会先学全连接网络,再学 CNN, RNN, Transformer。一般教程会说,全连接网络更容易过拟合,而其他网络泛化性更好。但仔细思考后,我们可以更具体地指出全连接网络和其他高级网络的区别:全连接网络用一套参数建模了所有输入到所有输出的关系,换句话说,对于每个输出元素,它用到的参数是不同的。而其他高级网络实际上是在用同一组参数输出一个元素,只不过输出某元素时,输入还包含其它元素的信息。
以 CNN 和 Transformer 为例,我们来验证这个概念。CNN 对每个元素都用同样的卷积核,只不过每个卷积核的输入不同;Transformer 的注意力操作是一个无参数的信息融合操作,其他所有投影层、MLP 全是逐元素生效的。
神经网络其实只负责输出一个数据元素,而现在的扩散模型 loss 或者交叉熵 loss 都是逐元素计算的。所以,看上去神经网络学习的是整个数据集的分布,但它只需要学到整个联合分布的分解 (factorization),也就是其中某一项数据的规律即可。
根据这个假设,我们来尝试解释 patch size 对 DiT 的影响。不加 patch size 时,图像的每个数据元素是一个三通道的像素。单个像素的分布可能非常容易学,不管它是清晰图片,还是由纯噪声计算出的速度。这时,是否符合流形假设不影响学习难度,因为数据本身的维度就低。哪种预测方式更好需要用另外的理论解释。
而增加 patch size,其实是让单个元素的分布更加复杂了。我们可以忽略 patchify 里的线性层,把 patchify 看成是把
个像素在特征维度上拼接,把三通道数据变成 通道的数据(事实上,FLUX.1 的 patchify 就是这么做的)。这个通道数为 的数据才是真正的「高维数据」,Transformer 要预测的输出通道数是 。这时,就可以根据前面迷你实验的结论,用流形假设来解释为什么 较大时 x-prediction 更好。
这里意味着对于CNN和Transformer这种网络来说,我们实际上是通过引入了一些归纳偏置降低了网络的参数量和网络复杂度,因此网络会试图学习一些更通用的特征,但同时这也使得网络试图学习的更通用特征不能在高维空间中过于发散,因为如果分布在高维空间中过于发散,这种类型的网络很难学会这个高维分布,而如果这些“通用特征”满足流形假设,要学习的特征其实分布在一个低维流形上,那么网络就可以学的更好,从而表现为学到了“通用特征”。 这里讨论了大Patch可能带来的高维分布难以学习的问题,但我们之前在时序和图像里面广泛使用Patch是因为Patch本身除了能降低计算量之外还有其他优势,如Patch可以更好的表示局部相似性,可以一定程度上消除局部噪声,因此Patch是一个很有效的降低计算量的手段,但Patch大小的选择需要更好的考量,找到一个效率和效果之间的平衡点。
Stable Diffusion 3
主要论述了流匹配使用rectified flow替代一般的DDPM的可行性,通过推导证明了流匹配可以转换成一般的DDPM但是流匹配更高效。此处专指1-Rectified Flow,它的流程就是:
- 随机抽一个噪声
。 - 随机抽一张图
。 - 强行认为它俩之间是一条直线:
。 - 训练模型
去预测方向 。 这里可能会有疑问,即抽取的 对之间可能在空间中存在路径交叉,但实际上在现有模型的训练过程中都是采用这样的过程效果也很好,虽然在原文中没有对这一问题做进一步的阐释,但我个人理解可能是因为在图片上训练时空间维度较高,因此随机抽样得到的从噪声到真实图像之间的路径在高维空间下并不容易交叉。相当于高维空间下有足够的空间体积,可以容纳下相当数量的路径集合而不至于存在相交路径,换个角度说路径相交的概率极小,因此实际得到的模型效果都还不错。 另一个则是SD3提出了一种新的信噪比采样器,以前在训练过程中选取采样的时间t是在0-1之间均匀采样的,作者认为在 和 时,训练更容易,因为当t=0时,噪声占据主导,此时模型只需要预测一个大概方向,而t=1时图像已经基本接近真实图像,因此中间部分学习起来比较困难。应该更频繁的采样中间时间步让模型更多次数的学习中间部分的样本。这里的Logit-Normal采样法为首先在正态分布上采样,再通过sigmoid函数变换到(0,1)区间得到t的采样分布(Logit-Normal含义为将最终得到分布进行Logit即得到一个正态分布),这样得到的分布t=0.5附近的采样次数比较多。除此以外还要给最终loss一个额外的权重 ,这个权重的作用是使得t=1附近的权重增大,以提高最终生成的图像的细节,同时这个权重还能使得训练过程中梯度的方差保持恒定,作者证明了对于直线路径的Flow matching,当权重约为 (信噪比倒数)时,训练过程中方差最小。
RAE
VAE组件比较老旧,社区考虑使用一些更好的组件来替换VAE。 RAE论文中提到VAE存在的问题有三点:
- 过时的骨干网络使架构比实际需要的更复杂:SD-VAE 的计算量约为 450 GFLOPs,而一个简单的 ViT-B 编码器只需要大约 22 GFLOPs。
- 过度压缩的潜空间(只有 4 个通道)限制了可存储的信息量:人们常说压缩带来智能,但这里并非如此:VAE 式压缩实际上作用有限,几乎和原始的三通道像素一样受限。
- 表征能力弱:由于仅使用重建任务进行训练,VAE 学到的特征很弱(线性探针精度约 8%,线性探针为冻结模型编码器部分后,将输入一张图片得到的中间特征向量只加一层简单的线性分类层,再在一个数据集上训练这个模型看它的分类准确率,以此表征编码器提取图片语义信息的能力,也就意味着VAE实际上更像是纯粹的压缩解压缩工具),这会导致模型收敛更慢、生成质量下降。我们现在已经很清楚 —— 表征质量直接影响生成质量,而 SD-VAE 并不是为此而设计的。 因此使用预训练好的表征编码器(DINO,SigLIP,MAE)作为特征提取模块,再设计一个解码器,通过训练这个编码器解码器的组合,可以替代传统的VAE,形成文中提到的表征自编码器,相比于VAE这种模型既能实现高质量的重建,也能提供语义丰富的潜空间,同时便于Transformer扩展。 问题在于预训练的表征编码器编码得到的特征是高维特征,而VAE编码器编码得到的是低维潜空间,在高维特征上训练一个DiT存在计算效率,架构,噪声调度等问题,如经典的同样的噪声调度对于高分辨率图像(高维)的噪声强度和低维的效果不同。
DDT [@wangDDTDecoupledDiffusion2025]
这篇文章提出了解耦的DiT,核心在于目前的扩散模型中使用的主要为Transformer的仅解码器结构,作者想要探究解耦的编码器-解码器结构能够加速收敛,提升样本质量。
本文的灵感在于,通过实验发现,在推理阶段给高噪阶段(即低频语义占主导的阶段)分配更多计算量效果更好。这证明了当前的 Diffusion Transformer(如 DiT)的短板不在于画不出细节,而是在于对低频语义结构的编码能力不足。如图中所示,在推理阶段在较小的t部分分配更多的推理步骤可以降低推理得到的FID,获得更好的图像生成效果。这一理论和之前的REPA使用与预训练视觉基础模型(DINO)的表示对其方法增强低频编码从而取得更好的图像生成效果相符,REPA的表示对齐技术可以表示为
该方法将自映射编码器中第
通过解耦的条件编码器,速度解码器组件,并且在条件编码器中使用REPA技术,使得条件编码器可以很好的编码图像的语义特征,随后将编码得到的自条件替换原本应该输入给去噪模型的标签,其他输入和之前相同输入给速度解码器,解码器去噪得到速度