扩散模型
先把图像"搅成"噪声,再学会从噪声中"还原"图像——Stable Diffusion、DALL-E 背后的核心思想
✦ 先看效果:图像在噪声中消失,又从噪声中还原
点「加噪」观察图像逐步变成随机噪声;点「去噪」看它从噪声中被还原出来。
逆向过程:神经网络学会预测并去除每步的噪声,逐步还原
01 大白话讲扩散模型
照片在雪地里消失的故事
想象一张清晰的照片,你每隔一秒往上面撒一点点沙子。100 秒后,照片完全被沙子盖住,只剩一堆随机的颗粒。
扩散模型的核心问题是:能不能训练一个神经网络,让它学会"一次去掉一粒沙子"?
如果这个网络学会了,就可以从一堆随机噪声开始,一步步去掉"沙子",最终还原出一张图片——甚至生成一张全新的图片。
两个过程
每步往图像上叠加一点高斯噪声。这个过程是固定的数学公式,可以直接从 x₀ 一步跳到任意时间步 x_t,不需要逐步计算。
从纯噪声 x_T 出发,神经网络每步预测"这张图里混入的噪声是什么",减去噪声后得到稍微干净的 x_{t-1},重复 T 步还原出 x₀。
训练时做什么?
用前向公式直接生成 x_t(带 t 步噪声的版本)
网络输入 x_t 和时间步 t,输出预测噪声 ε̂
Loss = ‖ε - ε̂‖²,非常简单的 MSE 损失
就这三步,反复训练百万张图片,网络就学会了"去噪"。
为什么比 GAN 更好?
只需最小化 MSE,不存在 GAN 的两个网络对抗博弈不稳定问题
每次从不同随机噪声出发,生成结果多样,不会模式崩塌
在去噪时加入文字条件(Stable Diffusion),就能做文生图
生成需要几十到几百步去噪,比 GAN 的一次前向传播慢很多
现实中的扩散模型
在压缩的"潜空间"做扩散,速度更快,开源可本地运行
OpenAI 的文生图模型,理解复杂文字提示
将扩散模型扩展到视频生成,时间维度上也做扩散
WaveGrad(语音合成)、RoseTTAFold(蛋白质结构预测)
一步步构建扩散过程
从噪声调度到前向扩散可视化,逐步搭建。
线性调度从小到大逐步增加噪声,ᾱ_t 是累积信号保留率。
不用逐步迭代,直接用公式一步算出任意时间步 t 的噪声信号。
观察 t=0(原始正弦波)到 t=99(纯噪声)的信号演变过程。
02 代码
03 学术性讲解
扩散概率模型(DDPM)(Ho et al., 2020)通过定义马尔科夫链加噪过程和学习其逆转过程,在图像生成质量上超越了 GAN,并具有更稳定的训练特性。
前向过程(Fixed Forward Process)
前向过程定义为马尔科夫链,每步叠加高斯噪声:
q(x_t | x_{t-1}) = N(x_t; √(1-β_t)·x_{t-1}, β_t·I)
由于高斯分布的可重参数化性质,可以直接从 x₀ 采样任意步 x_t:
x_t = √ᾱ_t · x₀ + √(1-ᾱ_t) · ε,其中 ε ~ N(0,I),ᾱ_t = ∏ᵢ₌₁ᵗ αᵢ
当 t→T 时,ᾱ_T→0,x_T 退化为标准高斯噪声。
逆向过程(Learned Reverse Process)
逆向转移 q(x_{t-1}|x_t) 难以直接计算,但在给定 x₀ 时有闭合形式:
q(x_{t-1} | x_t, x₀) = N(x_{t-1}; μ̃_t, β̃_t·I)
神经网络 ε_θ 学习在给定 x_t 和 t 时预测噪声 ε,从而估计均值 μ̃_t。
训练目标
原始 ELBO 目标经化简后等价于:
L = E_{x₀,ε,t} [ ‖ε - ε_θ(√ᾱ_t·x₀ + √(1-ᾱ_t)·ε, t)‖² ]
即:随机采样时间步 t 和噪声 ε,加噪得到 x_t,让网络预测噪声 ε,最小化 MSE。
网络架构
编码器逐步降分辨率提取特征,解码器逐步升分辨率还原,跳跃连接保留细节。适合处理图像的噪声预测任务。
用正弦位置编码将标量 t 映射到高维向量,注入到 U-Net 各层,让网络知道"现在处于第几步"。
用 Cross-Attention 将文本编码(CLIP)注入 U-Net 中间层,引导去噪方向。Classifier-Free Guidance (CFG) 进一步增强条件控制强度。
改进方向
非马尔科夫采样,步数从 1000 减到 50 步,大幅提速
在 VAE 压缩后的潜空间扩散,分辨率降 8 倍,Stable Diffusion 的基础
用直线路径替代扩散路径,训练更稳定,Stable Diffusion 3 / Flux 采用
OpenAI 提出,训练网络直接从任意 x_t 一步跳到 x₀,极速生成
总结
逐步加噪,马尔科夫链
神经网络预测噪声
MSE 噪声预测,简单稳定
从纯噪声 T 步去噪到图像