前向扩散和反向扩散:一个给照片慢慢撒盐的过程,凭什么能学会画画

有一个问题困扰了我很久:给一张照片慢慢加噪声,直到它变成一片雪花,然后训练一个神经网络把这个过程反过来——凭什么这样的操作能让模型学会画出一张全新的图?这听起来就像把一本小说撕碎,再让一个人从碎片里学会写小说,怎么看都违反直觉。直到我啃完DDPM和Score-based的论文,才想通这件事背后的数学其实极其优雅,它不是“从碎片恢复原书”,而是“学会了这本书的语法和世界观”。

AI technology illustration

先说前向扩散——也就是“撒盐”的过程。想象你有一张猫咪的照片,你往上面撒一把盐(高斯噪声),照片变得有点模糊;再撒一把,更模糊;撒了1000次之后,猫咪彻底消失,只剩下一张均匀的雪花图。这就是前向扩散的数学定义:一个马尔可夫链,每一步给图像加一点高斯噪声,噪声的强度由一个精心设计的方差序列控制,最终图像分布收敛到标准正态分布。这个过程的妙处在于,它不需要学习,完全由人工设定,就像人的遗忘曲线,你只需要决定每一步撒多少盐。

那反向扩散怎么能学会画画?关键在于,神经网络不是去学习“怎么从噪声一步恢复原图”,而是学习“预测每一步撒的那把盐是什么”。DDPM的论文里提出,训练时前向加噪的每一步噪声是已知的,模型只需要输入当前噪声图和步数,输出对这一步加入的噪声的预测,然后用均方误差损失去逼它猜准。这个设计非常聪明:直接预测干净图像很难,因为噪声强度不同时恢复难度差异巨大;但预测噪声本身是一个归一化程度很高的任务,训练稳定得多。我最早以为扩散模型就是自编码器,把噪图压缩再解压,后来才意识到它每一步都输出完整的噪声预测,根本不需要瓶颈——这让我卡了很久,直到看到损失函数的推导,才明白它在做一件更底层的事:学习数据分布的梯度场。

这个梯度场,就是Score-based模型里说的“分数函数”。宋飏等人的工作把扩散模型和分数匹配统一了起来:前向扩散相当于在数据分布上不断加噪声,使得分布越来越平滑;反向扩散则是在不同噪声水平下估计分布的梯度,然后沿着梯度方向往上爬,逐步找到高概率区域。也就是说,模型学会了“怎样的图像更像真实数据”,它能从一团噪声中,一小步一小步地朝着“像猫咪”的方向挪动。这解释了为什么扩散模型能生成全新的图像:它不是记住训练数据,而是学会了数据分布的形状,然后从随机噪声开始,沿着这个形状的梯度场“走”进一个合理的位置。

讲到这里,一个更深的困惑浮现了:撒盐是把信息一步步破坏,反向是逐步恢复,那为什么恢复出来的不是原图?如果我们训练时用的都是真实图片加噪,模型难道不会学会把噪声图还原成原始图片吗?答案藏在DDPM的推理过程里。推理时,我们不是从一张加了噪的真实图片出发,而是从纯随机噪声出发,模型每一步预测噪声并减去,同时加一点额外的随机噪声(为了保持马尔可夫性),最后得到一张干净的图。因为初始点是完全随机的,最终生成的结果由噪声决定,每一张都是全新的——就像你从不同的随机种子出发,沿着同一个梯度场会走到不同的山峰。所以,撒盐过程教会了模型“什么是真实图像的分布”,推理时模型从零开始创造,本质上是在做“从噪声中采样”。

这就引出了扩散模型和GAN的根本区别,也是它为什么在图像生成质量上能后来居上。GAN是让生成器和判别器对抗,生成器直接输出图像,训练不稳定,容易模式坍塌;扩散模型则把生成拆解成数百个微小的去噪步骤,每一步都只需要做简单的预测,训练极其稳定,而且生成多样性更好,因为它在噪声空间做随机采样,覆盖了整个分布。最初Sohl-Dickstein的扩散模型工作受热力学启发,但真正的爆发点在于DDPM证明了它可以在高分辨率图像上击败GAN。

不过,扩散模型也有它的阿喀琉斯之踵:慢。反向扩散需要迭代几百到上千步,一张图生成几十秒,根本没法实时交互。DDIM通过将马尔可夫链换成非马尔可夫过程,把采样步数压缩到几十步,质量几乎不降;Stable Diffusion更进一步,把扩散过程搬到了潜空间,在压缩后的特征图上做扩散,大幅降低了计算量。这些改进让扩散模型从实验室走进了产品,但根本矛盾依然存在:生成质量和速度之间的权衡,是当前扩散模型最核心的工程挑战。

回到题目:撒盐凭什么能学会画画?因为它教会了模型“真实世界应是什么样子”,而不是“这张图原来是什么”。前向扩散像是一场精心设计的遗忘实验,反向扩散则是在遗忘的废墟上重建秩序。模型在无数次猜盐的过程中,逐渐内化了数据分布的底层规律——线条的方向、颜色的搭配、物体的轮廓——这些规律在训练时被编码进了神经网络的参数里。推理时,给定一个随机噪声,模型就用这些规律一点一点地把“画”勾勒出来。它不是在还原,而是在创造,只是创造的方式遵循了它从撒盐中学到的世界语法。

前向扩散的数学骨架

用更精确的语言描述:给定数据点x₀,前向过程按固定马尔可夫链q(xₜ|xₜ₋₁)逐步添加高斯噪声,每一步的噪声方差βₜ构成一个递增序列(通常从1e-4到0.02线性增长)。经过T步后,x_T近似于标准正态分布。DDPM的一个关键设计是,任意步的xₜ可以直接从x₀计算出来,不需要迭代:xₜ = √(ᾱₜ) x₀ + √(1-ᾱₜ) ε,其中ε标准正态噪声,ᾱₜ是累积乘积。这个“一步到位”的性质让训练变得高效,因为我们可以随机采样任意时间步,直接计算目标噪声。

为什么预测噪声比预测图像更好?

我做过一个实验:分别训练两个模型,一个输出预测的干净图像,一个输出预测的噪声。在噪声较高时,预测图像的模型完全崩溃,而预测噪声的模型还勉强能猜。原因很简单:噪声的分布是固定的、简单的,而干净图像的分布是复杂且多模态的。预测噪声等价于学习一个去噪函数,它天然具有回归性质,损失函数更平滑。DDPM的变分下界也证明了,预测噪声实际上等价于优化加权后的证据下界,是一个更优的变分目标。

扩散模型 vs GAN:一张表说清

维度 扩散模型 GAN
生成原理 逐步去噪的马尔可夫链 生成器与判别器的对抗博弈
训练稳定性 非常稳定,损失平滑下降 不稳定,容易模式坍塌或震荡
生成多样性 高,天然覆盖分布 较低,容易丢失模式
采样速度 慢,需要数百步迭代 快,单次前向传播
控制性 可通过引导注入条件 可用条件GAN,但训练更复杂

这张表解释了我为什么在2021年后几乎弃用GAN:扩散模型在训练时不需要微调纳什均衡,也不需要监控判别器过强——它唯一需要的就是把噪声猜准,简单到令人发指。但代价是推理时你得忍受漫长的等待,直到后来DDIM和潜在扩散的出现,才让我重新觉得“这玩意儿能用了”。

常见误解与澄清

扩散模型会记住训练数据吗?

不会。扩散模型学习的是数据分布,而不是具体样本。除非训练数据极小且过拟合,否则生成的图像不是训练集的副本。但确实存在“记忆”风险,已有研究显示在极大数据集上,扩散模型可能偶然复现某些训练样本,不过概率极低。

前向扩散的噪声步数越多越好吗?

不是。步数太多会增加训练时间,且推理时也需要更多步数。DDPM原论文用1000步,后来发现200步也能工作,但质量会下降。步数需要在生成质量和速度之间权衡,DDIM则通过去马尔可夫化,让步数可以大幅减少而不损失质量。

扩散模型只能生成图片吗?

远不止。扩散模型已经用于音频生成、分子构象、文本生成、视频预测,甚至蛋白质结构设计。它的核心框架是通用的“破坏-重建”范式,只要你能定义前向破坏的过程,就能训练反向生成模型。

Stable Diffusion和DDPM是什么关系?

Stable Diffusion是扩散模型的一次工程飞跃,它用了DDPM的框架,但把扩散空间从像素级搬到了预训练的潜空间(VAE的编码器输出),大幅降低计算量,再加上文本条件引导,实现了文生图的爆发。它本质上还是扩散模型,只是换了个更高效的战场。

最后,给一个我认为最重要的判断:扩散模型之所以能画画,是因为它把“生成”这个复杂问题,分解成了无数个“去噪”的简单问题,而“去噪”需要的信号,恰好来自数据里最本质的结构。这就像拆解一个魔方,你不需要知道最终状态,只需要每一步都更接近“正确”,最终自然会到达。这种化繁为简的哲学,才是扩散模型最让我着迷的地方。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/63.html

(0)
上一篇 2026年8月14日 上午12:27
下一篇 2026年8月14日 上午12:27

相关推荐