在 AI 绘画(如 Midjourney, Stable Diffusion)和视频生成(如 Sora)大火的今天,扩散模型 (Diffusion Models) 已经成为了生成式 AI 的绝对皇冠。
但对于很多开发者来说,扩散模型的数学门槛似乎很高:变分推断、马尔可夫链、高斯分布……别担心,本文将拨开复杂的数学迷雾,带你从零推导扩散模型的本质原理。
# 1. 核心直觉:搞破坏 vs. 搞修复
扩散模型的灵感来源于非平衡热力学。我们可以把它想象成一个“墨水扩散”的过程。
# 前向过程 (Forward Process):毁灭
想象你往一杯清水里滴入一滴墨水。随着时间的推移,墨水分子会逐渐扩散,直到整杯水变成均匀的浑浊状态。在图像处理中,这个过程等同于:不断地向一张清晰的图片中添加高斯噪声,直到它变成一张完全随机的雪花屏。
# 逆向过程 (Reverse Process):创造
如果我们能把时间倒流呢?如果我们能从那一杯浑浊的墨水中,精准地把每一个墨水分子还原回最初的那一滴形状呢?
这就是扩散模型要做的事:从纯噪声(雪花屏)开始,一步步去除噪声,最终“无中生有”地变出一张清晰的图像。
# 2. 数学推导:前向过程
前向过程是一个固定的马尔可夫链 (Markov Chain)。我们规定每一步都加入微小的高斯噪声。
给定真实数据 ,我们在 时刻加入噪声得到 。
# 单步加噪公式
- :预先设定的方差调度 (Variance Schedule),控制每一步加多少噪声(通常很小)。
- :为了保持数据分布的方差稳定而加的系数。
# 任意步加噪(重参数化技巧)
如果我们想求第 100 步的状态 ,不需要一步步迭代。令 ,,我们可以直接得出:
这意味着:任何时刻的图像 ,都可以看作是原图 和纯噪声 的线性组合。
# 3. 数学推导:逆向过程
这是 AI 发挥作用的地方。我们要把 变回 。
理论上,如果前向过程的步长 足够小,那么逆向过程 也近似于一个高斯分布。
由于我们无法直接算出这个分布,我们训练一个神经网络 来近似它:
这里有两个未知数:
- 均值 :去噪后的图像中心在哪里?(这是核心难点)
- 方差 :通常固定为常数,不进行学习。
通常使用 U-Net 结构的神经网络来预测噪声。
# 4. 训练目标:AI 到底在学什么?
我们要让 AI 预测的分布 尽可能接近真实的逆向分布 。
在数学上,这等价于最小化变分下界(ELBO),最终简化为最小化预测噪声的均方误差 (MSE)。
# 核心发现
经过复杂的贝叶斯公式推导,我们发现真实的后验均值 其实只取决于一个变量:当前时刻包含的噪声 。
这是扩散模型最反直觉也最精妙的地方:
神经网络不需要学会画图,它只需要学会**“找茬”**。
- 输入:一张带噪点的图 。
- 输出:这张图里包含的噪声 是多少。
- Label:前向过程中实际加入的真噪声 。
# 5. 采样过程:从 0 到 1 的生成
一旦模型训练好(能准确预测噪声了),我们就可以开始生成图像了。这是一个迭代的“去噪”过程。
# 采样算法 (Sampling Algorithm)
-
从混沌开始:随机采样一个标准正态分布噪声 。
-
循环迭代:从 到 :
- 让模型看着 ,预测噪声 。
- 根据预测的噪声,计算出上一时刻的均值。
- 加上一点点随机扰动 (Langevin 动力学),防止生成的图像过于死板。
-
最终结果:当循环结束得到 ,就是一张清晰的图片。
如上图所示,随着步数 的减小,纯噪声逐渐显现出清晰的数字轮廓。
# 6. 总结
扩散模型之所以强大,是因为它放弃了 GAN 那种“一步到位”的生成方式,而是选择了“慢工出细活”。
- 前向 (Forward):物理过程,把数据变成噪声。
- 逆向 (Reverse):AI 过程,通过预测噪声,把数据一步步还原。
- 训练 (Training):本质是在训练一个“去噪器”,计算 Loss 只需简单的 MSE。
正是这种迭代式的生成过程,让扩散模型拥有了捕捉极其复杂数据分布的能力,从而诞生了今天令人惊叹的 AIGC 时代。
