视觉生成模型(文本到图像 视频)
DDPM 的损失函数是如何从变分下界推导出来的?最终简化形式是预测什么?¶
扩散模型(DDPM)的目标是学习一个从白噪声逐步还原出真实图像的过程。为了训练这个逆过程,我们需要最大化观测数据在该模型下的对数似然。由于直接优化似然不可行,DDPM 采用了变分下界(Variational Lower Bound, VLB) 的思路。
推导步骤:



潜在扩散模型中,VAE 压缩图像的倍率一般为多少?压缩太大或太小会怎样?¶
在 Stable Diffusion 这类潜在扩散模型(LDM)中,图像首先通过一个预训练的 VAE(变分自编码器)压缩到低维潜在空间。通常采用的压缩倍率是 f=8f=8,即输入 512×512512×512 的图像,潜在表示尺寸为 64×6464×64。有时也会用到 f=4f=4 或 f=16f=16 的配置。
- 压缩太大(如 f=16f=16 或更高):
- 优势:潜在空间更紧凑,扩散模型的计算量和内存占用大幅降低,训练和推理速度更快。
-
劣势:信息损失严重,解码后图像容易丢失高频纹理、精细结构和微小物体,可能出现模糊、颜色偏差或难以还原细节。尤其在人脸、文字生成等高保真任务中表现不佳。
-
压缩太小(如 f=2f=2 或直接像素空间):
- 优势:保留了大量原始信息,生成的图像细节更丰富,几乎可以无损重建。
- 劣势:潜在空间维度仍然很高,扩散过程在几乎等同于像素空间的地方运行,计算成本急剧上升,训练缓慢,失去了 LDM 的主要效率优势。
因此,f=8f=8 是经过权衡的甜点:它既能通过 VAE 的高效编码将图像压缩约 48 倍(82×382×3 通道 vs 潜在通道 4),又能在绝大多数自然图像上保持令人满意的重建质量。
Stable Diffusion 的 U-Net 中,时间步 t 是如何嵌入进去的?为何需要时间嵌入?¶
时间步 tt 是扩散模型中至关重要的条件信息,它告诉 U-Net 当前处于逆向过程的哪个噪声水平,以便模型预测对应强度的去噪方向。SD 采用正弦位置编码+逐层调制的方式将 tt 注入网络。
嵌入方式:
-
生成时间嵌入向量:整数时间步 tt 首先通过类似于 Transformer 的正弦位置编码,映射为一个高维向量(例如 320 维)。这个固定编码捕捉了不同时间步之间的相对关系。有些实现会在这个基础上再经过一个小型 MLP 进一步变换。
-
注入 U-Net 各层:时间嵌入向量通过特征调制(如 FiLM 或 Scale & Shift) 的方式影响到每一个残差块和注意力块。具体来说,在网络的每个层级,时间嵌入被线性变换为两组参数 γ,βγ,β,然后对特征图进行仿射变换:output=γ⋅x+βoutput=γ⋅x+β,或者更简单地作为加法偏置加入激活值。这样,从浅层到深层,每一层都能感知到当前的时间信息,从而学会在不同噪声强度下采取不同的去噪策略。
为何需要时间嵌入:如果不提供 tt,U-Net 就不知道当前输入的 xtxt 被噪声破坏到了什么程度,也就无法判断应该输出多大的去噪步长。不同的 tt 对应着截然不同的任务:tt 接近 TT 时,模型需要从混沌中勾勒大体轮廓;tt 接近 00 时,则需要精修细节。时间嵌入为模型提供了这个关键的情景信息,使其具备了“因时制宜”的能力。
DALL-E 2 的“先验模型”的作用是什么?为什么不能直接用文本嵌入去解码图像?¶
DALL-E 2 的架构包含两个阶段:先验(Prior) 和解码器(Decoder)。解码器是一个基于扩散模型的图像生成器,但它不是直接接受文本嵌入作为条件,而是接受一个来自 CLIP 的图像嵌入。那么,如何从文本得到图像嵌入呢?这就是先验的作用。
-
先验模型的作用:它将 CLIP 的文本嵌入转换为对应的 CLIP 图像嵌入。本质上是在学习一个从文本语义空间到图像语义空间的映射。DALL-E 2 使用了扩散模型或自回归模型作为先验。
-
不能直接用文本嵌入解码的原因:
- 存在模态鸿沟:文本嵌入和图像嵌入在 CLIP 空间中并不完全重合。CLIP 的对比学习只要求匹配的图文对距离近,但没有保证文本嵌入能够直接替代图像嵌入来重建图像。直接用文本嵌入解码,解码器会看到一个“陌生”的输入分布,生成结果质量会严重下降。
- 信息丰富度差异:文本通常是高度概括的,而图像包含大量视觉细节(纹理、布局、光线)。文本嵌入偏向于语义抽象,缺乏重建图像所需的高频视觉信息。图像嵌入则更接近解码器在训练时看到的真实图像编码,保留了更多的视觉特征。
- 先验架起桥梁:通过先验模型,系统能够从文本中“想象”出相应的图像视觉特征,并将这个想象注入解码器。这样既利用了文本的高层语义,又能生成符合视觉规律的细节。
因此,先验模型是弥合文本与图像之间信息差距的关键。
ControlNet 训练时为什么需要“零卷积”初始化?不这样做会怎样?¶
ControlNet 在 Stable Diffusion 原有网络基础上复制出一个“可训练副本”,并通过“零卷积”层将控制信号(如边缘图、姿态)接入。零卷积是指将卷积层的权重和偏置初始化为零,确保训练开始时该层的输出也为零。
-
为什么需要零卷积: 当训练刚开始时,控制条件(如 Canny 边缘)被随机初始化并通过新添加的卷积层注入到模型中。如果这些卷积层不是零初始化,它们就会在第一步就产生不可预测的非零输出,从而严重破坏预训练 UNet 的原有特征分布。预训练模型已经在海量数据上学习了精确的内部表征,初始的随机扰动会导致模型在早期训练中迅速“忘记”已学到的知识,产生噪声极大的输出,训练不稳定甚至崩溃。 零卷积保证了在 t=0t=0 时刻,新加入的侧分支输出完全为零,主干网络接收到的信息与没有 ControlNet 时完全一致。随着训练进行,侧分支的参数逐渐更新,慢慢学会从控制信号中提取有用信息并修正主干特征,这种平滑的热启动方式保护了预训练模型的完整性,使微调更加稳定高效。
-
不这样做的后果:训练初期会出现严重的性能震荡,模型生成质量急剧恶化,收敛缓慢,甚至可能永远无法恢复到预训练模型的水平。
T2I-Adapter 与 ControlNet 的差异在哪?它们各自更适合哪种控制信号?¶
两者都是为文生图扩散模型添加空间控制的轻量级方案,但在架构和适用性上有明显区别。
简言之,ControlNet 是重装武器,精度高但成本大;T2I-Adapter 是轻骑兵,高效且足够应对众多场景。选择取决于应用对控制精度和计算预算的权衡。
扩散模型中的 Classifier Guidance 与 Classifier-Free Guidance 的优缺点对比。¶
这两种引导方法都是为了让扩散模型生成符合特定条件(如类别标签)的样本,但实现路径截然不同。
总的来说,CFG 凭借其简洁高效、生成质量更优的特点,成为了事实上的行业标准。
为什么扩散模型在生成高质量人脸时容易出现畸形手部?目前有哪些改进?¶
手部畸形是多模态生成模型的老大难问题,主要有以下原因:
-
数据不平衡:在训练数据中,手部通常只占图像的极小部分,像素面积小,存在形态稀少。模型对主要面部特征投入了大量参数去学习,而手部的变异性极高(握拳、伸展、各种手势),样本覆盖率不足。
-
高维流形的复杂性:手部有 21 个自由度(手腕+手指),比面部复杂得多。在扩散模型学习的图像流形中,手部区域的概率密度分布非常复杂且稀疏。模型很容易生成一个“平均手部”,导致手指数量不对、关节位置错误、相互穿透等畸形。
-
缺乏专用结构化先验:模型没有显式的手部骨骼或关节模型,纯粹从像素统计中学习,难以捕捉手指之间的严格非穿透约束和关节铰链结构。
-
分辨率和注意力问题:即使在高分辨率生成中,手部细节也可能因为自注意力机制的全局感受野而被其他部分影响,或者由于卷积的下采样而丢失精细结构。
目前的改进方法:
-
使用更好的数据:专门加入手部特写、手势数据集,或使用手部检测模型从现有数据中裁剪放大手部进行训练。
-
结构先验注入:结合手部关键点检测或手部网格模型,如 ControlNet 的 hand pose 控制,用骨骼图作为条件引导生成。
-
后处理修复:先生成图像,再用专门针对手部的修复模型(如基于 SD 的 inpainting)对畸形手部进行局部重绘,或用 GFPGAN 等超分模型间接改善。
-
注意力优化:在模型架构中加入局部增强机制,使手部区域获得更高的生成优先级。
-
负向提示词:在推理时使用负向提示词(如 “bad hands, fused fingers”),利用 CFG 的排斥作用简单压制畸形手部的出现。
尽管问题尚未完全解决,但通过上述组合策略,手部生成质量已经有了显著提升。
视频扩散模型如何保证时间一致性?常见的时间注意力机制是如何工作的?¶
视频扩散模型的核心挑战在于保证相邻帧之间在内容、运动上的连贯性,避免闪烁或突变。实现时间一致性的关键机制是时间注意力层。
时间注意力机制的工作原理:
-
时空分离处理:为了在控制计算量的同时实现时间交互,视频扩散模型通常将空间注意力和时间注意力分开。在 U-Net 的每一个 Transformer 块中,先进行空间自注意力(同帧内各像素交互),提取每一帧的空间特征;然后紧接着进行时间注意力。
-
时间注意力的计算:在时间注意力层,将不同时间步但相同空间位置的 token(即同一个空间坐标 (h,w)(h,w) 在所有帧上的特征)组成一个序列,进行自注意力运算。这意味着每一帧的某个位置都会关注其他所有帧的同一位置,从而捕获该像素点在时间上的变化规律。
-
为什么有效:这种机制允许模型在生成当前帧时,显式地“看到”相邻帧的内容,从而自然地预测出平滑的过渡和一致的运动。它可以学习到物体如何移动、光影如何连续变化,最终输出连贯的视频序列。
-
位置编码:为了让模型感知帧的顺序,通常会在时间注意力层中加入可学习的时间位置编码(如正弦编码),告诉模型哪一帧在前、哪一帧在后。
通过这种时空分离的注意力设计,模型在不显著增加计算复杂度(时间注意力的序列长度为帧数,通常远小于空间像素数)的情况下,有效地保证了视频的时间一致性。
Sora 使用的 DiT 架构是如何处理视频的时空 patches 的?与传统 ViT 有何不同?¶
Sora 基于 Diffusion Transformer (DiT) 架构,将视频视为一个时空立方体。
-
传统 ViT 处理图像:将 2D 图像切分成固定大小的 patches(如 16×16 像素块),展平为一维 token 序列,加上位置编码后送入 Transformer。
-
Sora 处理视频:
- 时空 patches:将视频(时间 TT × 空间 HH × WW)直接在三维上切分成时空 patches,例如一个 patch 的大小为 t×h×wt×h×w(如 4帧 × 16像素 × 16像素)。这样每个 patch 本身就是一个小的时空立方体,包含了局部的空间信息和运动信息。
- 统一 token 序列:这些时空 patches 被展平为一维序列,输入 Transformer。由于 patch 已经包含了时间维度,序列长度变为 T/t×H/h×W/wT/t×H/h×W/w,相比逐帧处理再拼接,时空 patch 直接建模了空间与时间的联合分布。
- 与 ViT 的核心不同:
- 维度:ViT 处理 2D 图像,patch 不含时间;DiT 处理 3D 时空数据,patch 内嵌时间关系。
- 位置编码:ViT 只需空间位置编码;Sora 需要时空位置编码,告诉模型每个 token 的时间和空间坐标,使模型能够学习物体在时空中如何运动。
- 计算复杂度:将时间维度分解到 patch 中,避免了对每一帧独立编码然后再做时间融合的双阶段流水线,使整个模型可以端到端地学习时空依赖,但同时也带来了巨大的计算量,要求极高的模型容量和数据规模。
Sora 的涌现能力很大程度上归功于这种原生三维时空 patch 的设计,它让模型从底层就理解了视频的动态本质。
扩散模型推理加速中,为什么 LCM 能够用极少步骤生成图像?蒸馏过程是怎样的?¶
LCM(潜在一致性模型)的核心思想是学习从任意噪声水平直接映射到干净图像,从而跳过多步迭代去噪的过程。
-
为什么能加速:标准扩散模型需要逐步去噪,是因为模型只被训练为预测某一小步的噪声(相邻时间步的去噪)。而 LCM 的训练目标是一致性函数:对于扩散过程中的任意点(无论在时间轴上的哪个噪声水平),一致性模型都能直接输出同一个干净图像 x0x0。因此推理时,可以从纯噪声 xTxT 直接一步生成,或仅用几步(如 4 步)修正,大幅减少步骤。
-
蒸馏过程:
- 教师模型:预先训练好一个标准扩散模型(如 SD),它可以多步生成高质量图像。
- 学生模型(LCM):目标是将教师的多步去噪能力压缩到单步或少量步。训练时,从数据集中取真实图像,通过前向扩散得到某一个时间步 tt 的噪声图 xtxt,然后要求 LCM 从 xtxt 直接预测 x0x0。
- 一致性蒸馏损失:最关键的损失是一致性损失。对于同一条扩散轨迹上的两个不同时间步 tt 和 t′t′,教师模型分别给出它们的多步预测结果。学生模型被训练为:从 xtxt 预测的 x0x0 应该与教师模型最终生成的 x0x0 一致。这可以通过最小化学生预测和教师预测之间的差异来实现。
- 轨迹优化:通常结合了 score distillation sampling 的思路,利用教师模型的预测来指导学生的直接映射。
通过这种蒸馏,LCM 学会了直接跳转到终点的“思维捷径”,从而实现了 1-4 步生成高质量图像,速度提升数十倍。
DPM-Solver 是如何将扩散 SDE 转化为 ODE 并快速求解的?¶
DPM-Solver 基于一个重要的观察:扩散模型的前向过程虽然用随机微分方程(SDE)描述,但其对应的概率流(probability flow)可以用一个常微分方程(ODE)精确表示,且该 ODE 的解与 SDE 的边缘分布相同。

- 快速求解:这个 ODE 具有半线性结构,可以分解为线性部分和非线性部分。DPM-Solver 利用这种结构,提出了指数积分器形式的高阶求解器。它将非线性部分(得分函数)在时间上进行多项式近似,然后解析计算线性部分的积分,避免了传统黑箱 ODE 求解器的重复函数评估。例如,DPM-Solver-2 每步只需要两次神经网络评估,就能达到二阶收敛。由于该 ODE 非常平滑,高阶求解器在极少(10~20 步)就能达到极高精度,速度远超传统的 DDPM/DDIM 采样。
DPM-Solver 正是通过利用扩散 ODE 的数学结构,设计专用求解器,将生成步数从上千步压缩到个位数,同时保持了生成质量。
如何对扩散模型进行微调,使其能生成特定主体(如你的宠物)在不同场景下的图像?如 Dreambooth。¶
Dreambooth 是目前最主流的个性化微调方法,它通过“植入”一个新概念到预训练文生图模型中,让模型学会将这个新词与特定主体绑定。
微调步骤:
-
准备数据:拍摄 3-5 张该宠物的照片,要求不同角度、不同光照,但主体清晰。
-
选择稀有词标识符:用一个模型词表中几乎没有的罕见词(如
sks)作为类标识符。训练时,图像对应的文本提示设为 “a photo of sks dog”,即<稀有词> <类别名>。 -
微调模型:使用这些图像和提示词,对整个扩散模型(或仅 UNet)进行微调,使用常规扩散损失。为了防止过拟合,必须加入先验保留损失(见下题)。
-
推理生成:训练完成后,就可以用新的提示词生成该宠物在各种场景下的图像,例如 “a photo of sks dog swimming in the ocean”。
这种方法不是简单地记忆训练图像,而是将宠物的视觉特征与 sks 这个符号关联起来,并成功融入模型已有的语言-视觉先验中。
Dreambooth 训练时,如何防止过拟合和语言漂移?先验保留损失怎么加?¶
Dreambooth 的最大风险是:模型微调后,不仅学会了 sks dog 对应你的宠物,还可能忘记 dog 这个通用类别的样子(语言漂移),或者生成的图像多样性丧失,沦为训练样本的复现(过拟合)。
先验保留损失(Prior Preservation Loss) 是解决这些问题的关键。
-
原理:在微调新概念的同时,用预训练模型自身生成一批该类别(如
dog)的通用图像,称为“先验数据”。然后训练时,不仅用新主体的图像去更新模型,还同时随机采样这些先验数据,用对应的通用类别提示(如 “a photo of a dog”)做监督。损失函数为: L=Lrecon(新主体)+λLrecon(先验)L=Lrecon(新主体)+λLrecon(先验) 这强制模型在适应新主体的同时,不要偏离原来对类别dog的理解。 -
实施细节:
- 微调前,用原模型根据类别提示词(如 “a photo of a dog”)生成 100-200 张通用狗的图片。
- 训练时,每个批次同时包含新主体图片(使用 “a photo of sks dog” 提示)和先验图片(使用 “a photo of a dog” 提示),两个损失联合优化。
-
权重 λλ 通常设为 1 或略小。
-
效果:先验保留损失一方面维护了类别语义的完整性,防止语言漂移;另一方面,它作为正则项,限制了模型向少数几张训练图像过度拟合,保留了生成多样性。
文生图模型中,如何实现对构图、颜色、数量的精确控制?目前技术能做到多精细?¶
实现精确控制主要依赖空间条件注入和文本描述的组合,当前技术已经可以做到相当精细的程度。
- 构图控制:
- 布局到图像:通过提供边界框、分割图或关键点骨架,使用 ControlNet 或 T2I-Adapter 将空间条件编码并注入 U-Net。例如,指定每个人物的位置、大小和姿态。
-
场景图控制:更高阶的方式是提供场景图(物体及其关系),模型据此生成合理布局。目前多模态 LLM 结合扩散模型能够根据自然语言描述的位置关系(如“左边一只猫,右边一只狗”)生成图像,但复杂交互仍有偏差。
-
颜色控制:
- 色块条件:输入带有色块的草图或调色板,通过适配器让模型遵循颜色分布。
- 文本提示:在提示词中详细描述颜色(如 “a red car with black wheels”),模型通常能较好遵循,但对精确 RGB 值无能为力。
-
ControlNet 重着色:可使用边缘检测图结合颜色信息作为控制。
-
数量控制:
- 文本指定数量(如 “three apples”)有时会失败,模型可能生成过多或过少。通过额外的空间引导(如在分割图中画出三个苹果的区域)可以强制数量,但这需要手动标注。
- 基于语言理解能力的提升,较新的大模型(如 SD3、DALL-E 3)在文本遵循上显著增强,对数量、颜色、空间关系的遵守度大幅提高,但对精确计数(7 个以上)仍有挑战。
目前技术精细度:可以达到像素级空间控制(如精确的深度图或分割掩码),但在纯自然语言接口下,对于模糊或复杂的空间关系、精确 RGB 颜色值和精确计数,控制仍不完美。未来趋势是更强大的多模态大模型直接作为条件编码器,进一步提升语义理解和生成准确性。
解释扩散模型的基本原理:前向加噪过程和反向去噪过程分别怎样定义?¶
扩散模型是一类受非平衡热力学启发的生成模型,其核心思想可以直观理解为:先有意识地彻底破坏数据中的结构,再从一片混乱中重新学习出恢复结构的方法。模型由两个相互拮抗的马尔可夫过程构成:前向加噪过程负责系统性摧毁数据,反向去噪过程则试图逆转这一破坏,从纯噪声中重塑出有意义的数据样本。
前向加噪过程(Forward Diffusion Process) 前向过程是一个固定的、不包含任何可训练参数的马尔可夫链。它从真实数据分布中取出一个样本 x0x0,然后在随后每个时间步 tt 中,按照一个预先定义的方差计划 β1,β2,…,βTβ1,β2,…,βT 向样本中注入微量的各向同性高斯噪声。单步前向过程定义为:



也就是说,对于任意时间步 tt,我们向数据 x0x0 中加入噪声 ϵϵ 得到 xtxt,然后让模型 ϵθϵθ 去预测这个 ϵϵ。在推理时,从随机噪声开始,对于每个时间步,模型先预测噪声 ϵθ(xt,t)ϵθ(xt,t),然后利用这个预测值以及 xtxt 计算出 xt−1xt−1 的均值,再注入一个由方差计划决定的小量随机噪声,逐步恢复出清晰的图像。
整个反向过程就好比一位雕塑家,面对一块包含了无穷可能性的噪声大理石,逐刀剔除那些不属于目标轮廓的“冗余”,最终显现出细腻的形态。前向过程为模型提供了无数的“雕刻教学样本”(即 xtxt 与它对应的去除目标),反向过程则学会并执行这一雕刻流程。正是这种优雅的破坏与重建的设计,使扩散模型在生成多样性和训练稳定性上取得了突破性成就。
潜在扩散模型(Stable Diffusion)与传统像素空间扩散模型相比,核心改进是什么?¶
传统扩散模型(例如 DDPM 和最初的文生图扩散模型)直接在像素空间上运行。这意味着模型需要在高维的 RGB 像素空间(例如 512×512×3512×512×3 约 78 万维)中进行加噪和去噪,每一步的计算和存储开销极大,尤其在生成高分辨率图像时变得非常不经济。潜在扩散模型(LDM,以 Stable Diffusion 为典型代表)的核心改进,正是将扩散过程从高维的像素空间迁移到了一个低维、感知上等价的潜在空间。
核心改进的具体实现:
-
感知压缩:LDM 首先使用一个预训练的感知压缩模型(通常是 VAE 或 VQ-VAE)将原始图像压缩到一个低维潜在表示中。在 Stable Diffusion 1.x 和 2.x 中,这个压缩模型将 512×512512×512 的图像映射为 64×64×464×64×4 的潜在张量(压缩比约为 48 倍)。这个潜在空间被设计为在语义上光滑且具有感知意义:即潜在空间中相邻的点对应着视觉上相似的图像。
-
在潜在空间中进行扩散:所有的扩散和去噪过程(即 U-Net 的操作)都在这个紧凑的潜在表示上进行,而不再是像素。这带来两个巨大的优势:
- 计算和存储效率:由于潜在空间维度大幅降低,扩散模型的训练和推理速度数倍提升,GPU 内存占用显著减少。这使得训练和部署高分辨率图像生成模型在消费级硬件上成为可能。
-
专注于语义内容:VAE 已经剥离了大量感知上不重要的高频细节(如纹理的精确相位),只保留关键的结构和语义信息。扩散模型因此可以更集中于图像的语义内容和全局结构,而将细节重建的任务留给 VAE 的解码器。
-
跨模态条件注入:低维潜在空间提供了一个自然的“语义瓶颈”,文本、图像、语义图等条件可以通过交叉注意力机制优雅地注入到 U-Net 中,控制生成过程。由于潜在特征已经高度压缩,条件信息能更直接地影响核心语义。
效果总结:Stable Diffusion 之所以叫“Stable”,就是因为它通过这种分阶段的设计,把图像生成的复杂问题分解为“知觉压缩”和“语义生成”两个相对独立的子问题。这不但大幅降低了计算门槛,也提高了生成过程的稳定性和可控性。传统像素扩散模型像是一位画家在巨大的画布上同时处理构图、造型和笔触的每一个细节,而潜在扩散模型则是先确定草稿的布局和色块(在潜在空间),再交给专业的渲染器(VAE 解码器)补全细节。这种分工让模型在效率和效果上取得了极佳的平衡。
Stable Diffusion 中的 U-Net 如何接收文本条件并控制图像生成?¶
Stable Diffusion 的控制核心在于其 U-Net 架构中融入的交叉注意力机制。文本条件通过一个预训练的文本编码器(通常是 CLIP 的文本编码器)转化为语义向量,然后以交叉注意力的方式在 U-Net 的多个层级注入,从而引导模型生成与文本描述匹配的图像。
具体工作流程:
-
文本编码:用户输入的文本提示首先被分词,并送入冻结的 CLIP 文本编码器。编码器为每个 token 输出一个上下文相关的嵌入向量,最终得到一个长度为 NN、维度为 dd 的文本特征序列(通常取编码器最后一层的输出,并在末尾附加一个特殊的 EOS token 的嵌入)。
-
U-Net 内部结构:Stable Diffusion 的 U-Net 由一系列下采样块、中间块和上采样块组成,每个块中都包含 ResNet 卷积层、自注意力层和交叉注意力层。
-
交叉注意力的计算:在交叉注意力层中,来自 U-Net 上一个层的特征图(经过 ResNet 和自注意力处理后的空间潜在表示)被用作查询(Query),而文本特征序列同时作为键(Key)和值(Value)。对于空间潜在表示中的每一个像素位置(或更准确地说,每一个潜在 token),它都会去“关注”文本序列中的各个单词,并根据相似度分配注意力权重,然后将单词的值向量加权聚合到自己身上。其公式为:

- 多层级注入:这种交叉注意力不仅出现在 U-Net 的底层(处理最粗粒度的特征),也出现在更高分辨率的层中。因此,文本语义可以在不同的抽象层次上影响图像生成:粗层控制全局场景布局和主体,细层影响纹理、颜色和细节。通过这种层层渗透的机制,文本条件能够精确地调控整个生成过程。
此外,某些实现中还会将时间步嵌入与文本的全局池化向量(如 EOS 对应的输出)结合,作为一种整体条件加入,但交叉注意力是目前实现细粒度文本控制最主流和有效的方式。
DALL-E 系列和 Stable Diffusion 在生成范式上有何根本不同?¶
DALL-E 系列(指 DALL-E 1)和 Stable Diffusion 系列分属两种不同的生成范式:自回归式生成与扩散式生成。这种根本差异导致它们在模型架构、训练方式、生成过程、效率和特性上都有显著不同。
DALL-E 1(及后续 DALL-E 的部分思路)——自回归图像生成
-
核心机制:将图像视为一种“语言”,通过 VQ-VAE 将图像量化为离散的视觉 token 序列(类似于文本中的单词)。然后训练一个自回归 Transformer(如 GPT),以文本 token 为条件,逐 token 地预测下一个视觉 token,从而生成整个图像 token 序列。最后将 token 序列通过 VQ-VAE 解码器还原为图像。
-
生成过程:是顺序化的,按从左到右、从上到下的顺序逐个生成视觉 token,每个 token 的生成依赖于之前已生成的所有 token 和文本条件。
-
特点:生成过程是离散采样,天然具有多样性;但顺序生成导致推理速度较慢,且受限于固定序列长度,高分辨率图像需要极大的序列长度,计算代价高。
Stable Diffusion ——扩散式图像生成
-
核心机制:在连续潜在空间(而非离散 token 空间)上操作。通过逐步去噪一个随机潜在向量来生成图像,该过程是并行地对整个图像的所有位置同时进行更新,而非逐 token 生成。
-
生成过程:从纯噪声开始,经过几十步到上百步的迭代去噪,每一步都并行更新整个潜在表示,最终通过 VAE 解码器恢复成图像。整个过程是高度并行的,每一步的计算量虽然不小,但由于可以同时更新所有像素,总推理时间在 GPU 上可能更短,且更容易支持可变分辨率。
-
特点:生成质量高,训练稳定,对复杂分布建模能力强;但采样速度受限于去噪步数(通过 DDIM 等已大幅改善)。
核心范式差异总结:
DALL-E 2 及后续的 DALL-E 3 实际上已经转向了基于扩散模型的方案(DALL-E 2 使用 CLIP 先验 + 扩散解码器,DALL-E 3 完全基于扩散),这也体现了扩散范式的胜利。但 DALL-E 1 的自回归思路仍然在统一多模态理解与生成(如 GPT-4o)方面提供了重要启示。
自回归图像生成模型(如 DALL-E 1)如何将图像转化为 token 序列?VQ-VAE 扮演什么角色?¶
在 DALL-E 1 这类自回归图像生成模型中,连续像素无法直接作为离散 token 输入到 Transformer 中。因此,必须先将图像压缩并离散化为一串整数 ID 序列。这一关键转换正是由 VQ-VAE(Vector Quantized-Variational AutoEncoder) 完成的。
VQ-VAE 的核心角色与流程:
- 编码器:将输入图像 xx 映射为一个较低分辨率的特征图 ze(x)ze(x),其尺寸为 h×w×dh×w×d,其中 dd 是每个空间位置的编码维度。

DALL-E 1 如何使用它:
DALL-E 1 的生成部分是一个自回归 Transformer(类似 GPT-3),接收文本 token 序列和可选的图像 token 前缀,然后逐 token 预测下一个视觉 token。它的输入序列形如:[text_tokens] [image_token_1] [image_token_2] ...。在推理时,给定文本,模型生成一个视觉 token 序列,然后将该序列按照空间顺序 reshape 成索引网格,交给 VQ-VAE 解码器重建出图像。
VQ-VAE 因此扮演了一个离散化图像表征学习器的角色。它提供了一种高效的压缩和离散化方案,将冗余的像素信息转化为高度紧凑的语义 token,使 Transformer 能够高效地处理图像。这种“连续->离散->生成->连续”的思路,至今仍在多模态大模型(如 Unified-IO、Chameleon)和视频生成领域(如 VideoPoet)中被广泛借鉴。
DALL-E 2 中使用的 CLIP 潜在空间如何串联文本和图像生成?¶
DALL-E 2 并不是直接生成图像,而是通过一个两阶段框架,利用 CLIP 的联合多模态潜在空间 作为文本和图像之间的语义桥梁。整个流程可以理解为:先根据文本在 CLIP 空间中找到对应的“视觉想象”(图像嵌入),再把这个想象解码为真实图像。
具体串联机制:
-
CLIP 联合空间的性质:CLIP 通过大规模图文对比学习,将图像和文本分别编码到同一个嵌入空间中,并拉近匹配的图文对。这使得在该空间中,文本嵌入 ztzt 和对应的图像嵌入 zizi 距离很近,但不完全相等。这个空间既承载了文本的抽象语义,又蕴含了图像的视觉特征。
-
先验模型(Prior):
- 作用:由于文本嵌入和图像嵌入之间存在模态鸿沟(文本描述通常丢失了视觉细节),直接使用文本嵌入去让扩散模型生成图像效果不佳。因此,DALL-E 2 训练了一个先验模型,专门负责将 CLIP 的文本嵌入 ztzt 映射为对应的 CLIP 图像嵌入 zizi。先验本身可以是一个扩散模型或自回归模型,它输入文本嵌入,输出一个“幻想的”图像嵌入。
-
设计必要性:这个转换并非简单的向量变换,而是需要从文本中“脑补”出缺失的视觉细节(例如布局、视角、光照等)。先验的任务本质就是学习这个条件分布 p(zi∣zt)p(zi∣zt)。
-
解码器模型(Decoder):
- DALL-E 2 的解码器是一个基于扩散模型的图像生成器,但是它以 CLIP 图像嵌入为条件。扩散 U-Net 接收从先验模型生成的图像嵌入 zizi(或通过某种投影层)作为条件,结合可选的文本编码,最终生成图像。
-
之所以用图像嵌入而不是文本嵌入,是因为图像嵌入已被证明包含更丰富的视觉几何和风格信息,能够更好地指导扩散模型重建出高质量的图像。
-
生成流程:用户输入文本 → CLIP 文本编码器提取 ztzt → 先验模型从 ztzt 生成 zizi → 扩散解码器以 zizi 为条件生成图像。由于 zizi 包含了丰富的视觉语义,它还支持图像变体生成(对真实图像的 CLIP 嵌入加噪声后再解码)和图文混合编辑等高级功能。
CLIP 潜在空间在 DALL-E 2 中扮演的角色相当于一个高级的“视觉语义中转站”。它有效分离了语义理解和视觉生成:文本的语义理解由 CLIP 完成,视觉细节的先验推理由先验模型完成,最终的高保真生成由扩散模型完成。这种模块化设计让 DALL-E 2 在生成质量和可控性上达到了当时的顶尖水平。
ControlNet 如何在预训练扩散模型上实现可控生成?为什么只增加很少参数量?¶
ControlNet 通过一种精巧的“复制+零卷积”微调策略,在不破坏原有预训练模型能力的前提下,为其添加了任意的空间控制信号(如边缘图、姿态图、深度图等),从而实现了精细化可控生成。
实现可控生成的机制:
-
网络复制与锁定:ControlNet 首先将预训练好的 Stable Diffusion U-Net 的编码器部分(下采样块)的权重复制一份,形成一个“可训练副本”。原始的 U-Net 权重被完全冻结,保持不变。可训练副本接收额外的控制信号(如 Canny 边缘图、语义分割图等)作为输入。
-
零卷积连接:可训练副本的输出并不是直接注入到冻结的 U-Net 中,而是通过一组特殊的 1×1 卷积层,这组卷积层的权重和偏置被初始化为零(称为“零卷积”)。这些零卷积层再连接到冻结 U-Net 对应层级的输出上(通常是相加)。
-
训练过程:在训练开始时,由于零卷积输出为零,可训练副本的注入对原始 U-Net 没有任何影响,模型等同于原生的 Stable Diffusion。随着训练进行,反向传播梯度会逐渐更新可训练副本和零卷积的参数,使它们学会从控制信号中提取有用的修正信息,调整冻结主干生成的特征,从而让输出符合控制信号的约束。
-
多尺度注入:ControlNet 拷贝了整个编码器路径(通常包含多个下采样块),因此控制信号可以在多个分辨率级别上对生成过程进行干预。这保证了粗粒度的结构(如人体位置)和细粒度的细节(如边缘对齐)都能得到控制。
为什么只增加很少参数量?
-
可训练副本只占一部分:虽然复制了 U-Net 编码器的结构,但 U-Net 的权重本身参数量并不算极大(尤其是编码器部分),而且 ControlNet 通常只复制编码器,不包括解码器部分。相比整个 UNet 的参数量,可训练副本加上零卷积层增加的参数比例相当小。
-
零卷积的设计精妙:零卷积层本身只有极少量的参数(1×1 卷积核),几乎不计入参数开销。更重要的是,零初始化确保了微调初期的稳定性,允许使用较少的迭代步数和数据就能完成训练,间接降低了算力需求。
-
无需重训主干:最大的优势在于完全不需要修改或重新训练庞大的冻结主干网络。这意味着你可以在已有的、经过大量数据预训练的模型上,仅用少量算力和领域数据就为其添加一种全新的控制能力。
ControlNet 这种“寄生虫式”的可控微调策略,凭借其稳定性和高效性,迅速成为扩散模型可控生成的基石技术。
对比 DALL-E 3 和之前版本,它在遵循复杂指令方面做了哪些改进?¶
DALL-E 3 相较于 DALL-E 2 最显著的飞跃,就是对复杂、长尾、包含抽象关系和细致描述的文本提示的遵循能力得到了跨越式提升。这主要得益于一种创新的训练策略:为图像生成重建高质量描述(Recaptioning)。
在 DALL-E 2 时代,文生图模型通常使用从互联网上爬取的粗粒度图文对(alt-text)训练。这些文本往往简短、缺失细节,甚至与图像内容无关。模型因此学到了忽略文本中的复杂描述,而只依赖几个关键词来生成图像。为了改变这一点,DALL-E 3 采取了以下关键步骤:
-
用大模型重新描述数据集:OpenAI 训练了一个专用的图像描述模型,对训练集中的每一张图像生成极其详尽、准确且结构化的长文本描述。这些描述不仅包含主要物体,还详细刻画了物体属性、空间关系、光照、氛围、背景细节,甚至物体的计数和文字内容。这就好比将模糊的“一只猫”替换为“一只三花猫趴在洒满阳光的木质窗台上,旁边有一杯冒着热气的咖啡,背景是模糊的城市天际线”。
-
高质量数据训练:使用这些重新标注后的高质量图文对训练扩散模型。此时,模型被迫学习文本中每个细节与图像中对应视觉元素之间的精确对应关系,因为忽略任何细节都会增加训练损失。这使得模型真正学会了“阅读理解”整个提示词,而不仅仅是抓取关键词。
-
结合 T5 大型语言编码器:DALL-E 3 很可能使用了像 T5-XXL 这样的大型预训练语言模型作为文本编码器,替换了 CLIP 文本编码器。这类纯文本大模型具有更强的语言理解和推理能力,能够更好地编码复杂的长句、逻辑关系、否定和计数等挑战性语义。
-
强化学习优化(RLHF):有证据表明 DALL-E 3 在后期也引入了基于人类反馈的强化学习,进一步对齐人类对图像美学、安全性和提示遵循的偏好,减少了忽略提示的情况。
通过这种“数据飞轮”式的改进(用更聪明的模型生产更好的数据,再训练出更聪明的生成模型),DALL-E 3 成功解决了文生图领域长期存在的“提示遗忘”问题,能够可靠地生成包含多个主体、特定空间关系和精确属性描述的复杂图像,甚至可以在图像中生成风格化的准确文字。
解释 DDIM 和 DDPM 的核心区别,DDIM 如何实现少步骤快速生成?¶
DDIM(Denoising Diffusion Implicit Models)与 DDPM(Denoising Diffusion Probabilistic Models)都是去噪扩散模型的变体,核心区别在于反向过程的定义方式:DDPM 的反向过程被明确定义为一个随机的马尔可夫链,而 DDIM 的反向过程则是非马尔可夫的,并且可以被视为一个确定的常微分方程(ODE) 的离散化求解过程。这一区别使得 DDIM 能够实现显著的少步骤快速生成。
DDPM 的反向过程:严格遵循马尔可夫性,即 xt−1xt−1 的生成仅依赖于 xtxt,且每一步都会引入一小部分随机噪声。这样的设计使得生成过程与正向的马尔可夫扩散过程在数学上完全对偶,训练目标也很自然。但由于每步都需重采样噪声,且链的步数必须与训练时的步数(通常1000步)保持一致才能保证质量,导致生成极慢。
DDIM 的反向过程:注意到 DDPM 的训练目标 LsimpleLsimple 仅依赖于条件分布 q(xt∣x0)q(xt∣x0) 的边缘分布,而不依赖于具体的正向马尔可夫过程细节。DDIM 抓住这一点,重新定义了一个新的非马尔可夫正向过程,它只在边缘分布上与原始 DDPM 一致。对应的反向过程被设计为一个可以跳步的确定性映射。在极限情况下,这个映射相当于求解一个与扩散过程相关的概率流 ODE。具体地,DDIM 采样公式可以写为:

(这是确定性版本,无随机项)。因为步骤之间不再有严格的马尔可夫依赖,DDIM 允许我们仅在扩散时间轴上均匀选取一个子序列(如从 1000 步中取 50 步)进行迭代,而无需遍历所有步。每步预测出 x0x0 后再根据时间步混合噪声,理论上等同于沿着 ODE 轨迹进行大步长跳转。由于 ODE 的轨迹相比随机链要平滑得多,这种跳转仍能保持很好的生成质量,从而将生成步数从 1000 步降至 10-50 步,速度提升数十倍。
此外,DDIM 还有一个额外的好处:由于其反向过程是确定的(若不加入随机噪声),从同一个初始噪声出发,可以生成几乎相同的图像,这使得 DDIM 非常适合于图像编辑和插值等需要一致性的任务。
扩散模型中的“无分类器引导”是什么原理?如何控制保真度和多样性?¶
无分类器引导(Classifier-Free Guidance, CFG)是当前文生图扩散模型中广泛采用的一种技术,能够在无需额外分类器的情况下,显著提升生成图像的保真度(图像质量、与文本的一致性),但以牺牲一定的多样性为代价。
原理: CFG 的核心思想是:在训练扩散模型时,不仅训练它以文本为条件进行去噪,还同时训练它无条件去噪的能力。具体做法是在训练过程中,以一定概率 puncondpuncond(例如 10-20%)随机丢弃文本条件(将文本嵌入替换为一个空嵌入),使得模型学会在不给任何文本的情况下也能生成图像(通常是无引导的通用图像)。
在推理采样时,对于每一个去噪步骤,模型会同时进行两种预测:

其中 ww 被称为引导强度(guidance scale),通常 w≥1w≥1。
如何控制保真度和多样性:
-
当 w=1w=1 时,ϵ~ϵ~ 就是普通的条件预测,生成效果与标准训练无异。
-
当 w>1w>1 时,公式实际上是在将条件预测推离无条件预测的方向。也就是说,模型不仅要去除噪声,还要额外远离那个“通用、模糊、缺乏特定语义”的无条件生成方向。这迫使生成的图像更加贴合文本描述的特定语义,使主体更突出、细节更符合描述,从而大幅提升保真度和文本-图像对齐度。
-
然而,这种“过分的推离”也使得生成过程偏离了真实数据分布,导致输出更倾向于模型“认为”最安全、最典型的样本,从而抑制了多样性。ww 越大,保真度越高,但多样性越低,图像可能变得过于饱和、风格化,甚至产生不真实的伪影。
在实践中,ww 是一个关键的超参数,通常设置在 7.5 左右可以获得较好的保真度与多样性的折衷。CFG 之所以被广泛使用,是因为它简单有效,无需训练和维护额外的分类器,直接利用模型内部的条件与无条件知识差异来实现引导。
什么是 DiT 架构?它和基于 U-Net 的扩散模型相比有什么不同?Sora 为什么选择了它?¶
DiT(Diffusion Transformer)是一种用纯 Transformer 架构替代传统 U-Net 作为扩散模型骨干网络的新型架构。它将扩散模型的生成范式从卷积时代推向了 Transformer 时代。
DiT 与 U-Net 的核心不同:
-
基础构建块:U-Net 基于卷积层和自注意力层的组合,通过上下采样的层次结构融合多尺度信息;DiT 则完全由 Transformer 块构成,没有卷积的归纳偏置(如局部性和平移等变性),完全依赖自注意力机制学习全局依赖。
-
处理数据的方式:U-Net 处理的是特征图,其内在结构保留了空间维度;而 DiT 延续了 ViT 的思路,先将输入(在潜在空间中)切分成多个不重叠的 patch,然后将每个 patch 线性投影为一个 token,并将所有 token 送入 Transformer 层。位置编码用于赋予序列空间位置感。
-
条件注入方式:U-Net 通常通过交叉注意力和特征调制注入条件(如时间步 tt 和文本 cc)。DiT 则设计了多种条件注入机制,最常用的是 adaLN-Zero(自适应层归一化零初始化)。它回归与时间步和文本条件相关的维度变换参数(尺度、偏置)以及门控参数,这些参数作用于 Transformer 块内的层归一化,并且在训练开始时初始化为零,保证训练的平稳过渡。
-
扩展性:U-Net 在增加参数和计算量方面的扩展性相对有限,通常通过增加通道数或深度来实现;而 Transformer 架构的扩展律已经被充分验证,DiT 能够非常自然地通过增加 Transformer 层数、隐藏维度和注意力头数来平滑地扩大模型规模,展现出更强的可扩展性。
Sora 为什么选择 DiT:
Sora 是一个基于 Diffusion Transformer 的视频生成模型。它选择 DiT 架构而不是传统的基于 U-Net 的时空扩散模型,主要基于以下几点:
-
原生处理时空 patches 的能力:Sora 将视频看作一个三维的时空块,直接将其切分成时空 patches,作为 Transformer 的输入 token 序列。这种处理方式极为统一且自然,免去了 U-Net 中复杂的时空分解和交互设计(如分离的空间和时间注意力、3D 卷积等),让模型直接端到端地学习全局时空依赖。
-
惊人的可扩展性:视频数据量巨大,模型需要极强的容量来捕获复杂动态。DiT 架构的卓越扩展性使得 Sora 可以成长为一个参数量极大的模型,并且随着模型和训练数据规模的增加,表现出涌现能力。
-
高质量与灵活性:Transformer 的全局自注意力使得模型能够生成长时间、长距离的时间一致性视频,同时支持可变分辨率、可变时长和多种宽高比的视频生成,这些在 U-Net 框架下较难统一实现。
DiT 的出现标志着扩散模型骨干网络的一次重要迁移,Sora 的成功则充分证明了 Transformer 在生成式模型中的广泛统治力。