扩散模型
笔记 / AI 原理
扩散模型的思路近乎荒谬:先定义怎么把图像毁掉,然后学着把这个过程倒放。「怎么毁」是固定的数学过程,不用训练;模型只学一件事——认清噪声并消掉它。文本与图像的对齐空间见 多模态模型,本分类全部笔记见 AI 原理。
一、前史:GAN 为什么被换掉
扩散之前图像生成的主流是 GAN:生成器画图、判别器鉴伪,对抗中共同进步。GAN 出图锐利,但训练极不稳定——模式坍塌(生成器只画少数几类图)与损失震荡是常态,根因是对抗双方没有稳定的共同下降方向。扩散模型把「两个网络互搏」换成了「一个网络做回归」,训练稳定性上不是一个量级,这是范式切换的真实原因,画质优势反而是后来才拉开的。
二、三步流程
第一步:前向加噪。 从清晰图像出发反复添加高斯噪声,约一千步后信息完全淹没,得到纯高斯噪声:
每步的噪声幅度由预设的噪声调度决定,整个过程是固定的马尔可夫链,不需要任何训练。
第二步:训练去噪网络。 训练一个网络(早期是 U-Net)学会预测每一步添加的噪声:
这个简单到意外的目标是扩散成功的核心:模型不直接生成整张图,只学「认出这一步的噪声」——回归任务,梯度稳定。而且每一步都给监督信号,一张图就是上千个训练样本,数据效率极高。
第三步:采样。 从纯噪声开始,用训练好的网络一步步去噪:预测噪声、减去、得到稍清晰的 ,循环到 。代价直白:生成一张图要跑几十到上千次网络前向——推理慢是扩散的原罪,也是后文所有加速工作的战场。
三、文本控制:交叉注意力
上面的流程只会生成「随机图像」。按文字生成的接入点在去噪网络内部:用文本编码器(CLIP Text Encoder,见 多模态模型)把 prompt 编码成一组向量,在去噪网络的每一层通过交叉注意力注入——去噪的每一步都能「参考」文本,生成过程因此收敛到与文字一致的方向。
💡 提示词工程的原理就在这一步。文本只通过注意力影响去噪方向,没有任何机制保证模型「理解」了你的意思——你调整的是注意力权重,不是下达指令。这解释了为什么写提示词常常「像在许愿」。
四、潜空间:消费级显卡的前提
直接在像素空间扩散有多贵?512×512×3 的图约 78.6 万维,在这个空间里做上千步扩散一度只有集群能跑。Stable Diffusion 的突破是用预训练的 VAE 先把图像压缩进潜空间,扩散全程在潜空间进行,最后解码回像素:
| 像素空间 | 潜空间 | |
|---|---|---|
| 表示维度 | 万 | 万 |
| 扩散在哪发生 | 直接在像素上 | 全程潜空间,末尾 VAE 解码 |
约 48 倍的压缩是「在自己电脑上跑 Stable Diffusion」成为可能的那块基石——潜空间里丢弃的是人眼几乎无感的冗余,语义结构保留在 VAE 的训练目标里。
五、扩展与后续演进
围绕「可控性」的扩展已经形成一个家族:img2img(从原图加部分噪声再按新 prompt 去噪,改内容保结构)、Inpainting(只对选定区域加噪去噪)、超分(去噪中逐步提分辨率)、视频与 3D(把帧序列或三维表示作为扩散对象)。其中 ControlNet 值得单独一提:它把 U-Net 复制一份旁路挂在主网络上,注入边缘图、深度图、姿态骨架这类空间控制信号——纯文本说不清「四肢的每个角度」,一张骨架图说得清。AI 绘画从「碰运气」变成「可精确控制」是它带来的。
2024 年之后的两条主线则动到了范式本身:
- 骨干换血:U-Net → DiT。 去噪网络从卷积的 U-Net 换成纯 transformer(Diffusion Transformer),规模化的收益曲线立刻变陡——Sora、Stable Diffusion 3、主流视频生成模型都在 DiT 骨干上。这条线与 从 CNN 到 Vision Transformer 的结论遥相呼应:数据够时,通用架构胜过专用先验。
- 少步化:蒸馏与 flow matching。 逐步去噪的千步采样靠蒸馏压到几步(SDXL-Turbo、LCM、一致性模型把「走完全程」的能力蒸进单步网络);另一条线是 flow matching——把扩散的「逐步加噪/去噪」换成直接学一条从噪声到数据的直线路径(线性插值),训练更稳、路径更短,Stable Diffusion 3 与多数 2024 后的新模型已经把底层范式换成了它。扩散这个名字会留下来,但它的数学内核正在被更简单的版本替换。
训练目标与采样过程的不对称贯穿了这全部演进:学的时候只认一小步噪声,用的时候要独立走完全程——所有加速工作的本质,都是把这段路程变直、变短。