DDPM 扩散模型 — Part 3:反向扩散的数学推导(从噪声中“捡回图像”的全过程)

🧨 本章是 DDPM 论文最难、最核心、最关键的部分。
我会用最通俗、最生活化的语言,把反向扩散背后的数学逻辑全部讲明白。

🎯 目标:彻底弄懂:
1)反向过程为什么也是高斯?
2)网络到底在预测什么?
3)为什么预测噪声比预测图像更合理?
4)DDPM 的“真身”到底是什么?

📅 最后更新:2025年11月


📋 目录


1. 为什么反向扩散这么重要?

在 Part 2 中,我们知道了:

前向扩散(Forward):把图像弄坏  
反向扩散(Reverse):把噪声修回来

前向扩散是人为设计的:
我们自己往图里加噪声,想怎么加就怎么加。

但反向扩散是真正神经网络要学习的:

神经网络的全部任务就是:从带噪图中一步步恢复出原图。

所以 DDPM 的核心就是:

🎯 反向扩散能不能被学出来?

如果可以 → 扩散模型成功
如果不行 → 整个体系崩溃

DDPM 最厉害的地方就是它证明了:

反向过程也近似是高斯分布,可以被神经网络学习。

这一步是整篇论文的灵魂。

我们现在就来讲清楚:
为什么反向过程也是高斯?
为什么网络只需要预测噪声?
为什么这样能重建图像?


2. 整个反向过程的直觉理解

前向过程(人为设计):

x₀ → x₁ → x₂ → … → xₜ  
(每一步加一点噪声)

反向过程(模型学习):

xₜ → xₜ₋₁ → … → x₁ → x₀  
(每一步去掉一点噪声)

用生活比喻:

前向:往水杯里加墨水(越来越浑)  
反向:想办法把墨水一点点滤掉(越来越清)

关键问题来了:

我们知道怎么“加噪”,
但怎么学“去噪”?

这就是 p(xₜ₋₁ | xₜ) 的问题。


3. 核心目标:求 p(xₜ₋₁ | xₜ)

前向过程是我们人为定义的:

q ( x t ∣ x t − 1 ) q(x_t | x_{t-1}) q(xtxt1)

但是反向过程是:

p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} | x_t) pθ(xt1xt)

我们要求的就是这个分布。

这里 θ 表示神经网络的参数。

人生问题:

给你一张“半噪图” xₜ,
你能猜出它的下一张“更清晰一点的图” xₜ₋₁ 吗?

这就是 p(xₜ₋₁ | xₜ)。


4. 反向分布也会是高斯?为什么?

这是 DDPM 论文最妙的一步:

如果前向扩散是“线性高斯模型”,
那么反向扩散(后验分布)也是高斯分布。

数学理论:线性高斯模型的后验分布依然是高斯。

不用害怕,这句话可以理解为:

“你用高斯加法把图像毁掉,
那么修复它的过程也必然是高斯形式。”

直观理解:

  • 前向:加入的都是“高斯噪声”
  • 一堆高斯混在一起 → 还是高斯
  • 反向:从“高斯 + 图像信息”中恢复 → 依然用高斯公式

所以 p(xₜ₋₁ | xₜ) 也可以写成高斯:

p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ t ) p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1};\mu_\theta(x_t, t), \Sigma_t) pθ(xt1xt)=N(xt1;μθ(xt,t),Σt)

其中:

  • 均值 μₜ = 神经网络要预测的部分(非常重要!)
  • 方差 Σₜ = 论文已给定(可固定)

所以:

🎯 神经网络只需要学习均值 μₜ


5. 反向扩散的均值 μₜ 是如何推出来的?(贝叶斯直觉版)

反向分布可以用贝叶斯写成:

q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt1xt,x0)

表示“在知道真实原图 x₀ 的情况下,从 xₜ 推回 xₜ₋₁ 的概率”。

虽然看起来复杂,但你只需要理解:

前向过程可以一次到 t:
x t = α ˉ t x 0 + 1 − α ˉ t ε x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\varepsilon xt=αˉt x0+1αˉt ε
所以 x₀ 可以从 xₜ 和 ε 中反推出来。

然后:

反向均值 μₜ 是从“前向公式反过来推”得到的。

其形式就是:

μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t ε θ ( x t , t ) ) \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \varepsilon_\theta(x_t,t) \right) μθ(xt,t)=αt 1(xt1αˉt βtεθ(xt,t))

这就是 DDPM 的核心公式之一。

你现在还不需要完全理解推导细节(Part 4 会完整推)。
这章只需要知道它从哪里来。


6. 神经网络的任务:预测噪声 ε

这是 DDPM 思想最性感的地方。

网络不是预测:

  • x₀(太难)
  • xₜ₋₁(太难)
  • μₜ(太复杂)

而是预测:

ε θ ( x t , t ) \varepsilon_\theta(x_t, t) εθ(xt,t)

也就是:

“告诉我 xₜ 中的噪声是什么样?”

为什么?

因为如果网络知道噪声,就能把噪声从 xₜ 中扣掉:

xₜ - 噪声 = 更干净的图像 = 逼近 xₜ₋₁

这比直接预测 xₜ₋₁ 容易太多。


7. 为什么预测噪声比预测 x₀ 更好?

理由如下:


✔ 原因 1:图像模态太复杂

图像像素的变化巨大、模式多样、空间结构复杂。

要直接预测:

xₜ → x₀

对网络来说几乎是“智商毁灭级”。


✔ 原因 2:噪声是“均匀、简单、可建模”的

噪声的分布固定就是高斯 N(0, I)。
这比图像简单一万倍。

噪声预测任务反而更“线性”、“规律”、“好学习”。


✔ 原因 3:数学上更好优化(Part 4 会专讲)

论文最终推导出一个极其简单的损失:

L = ∣ ∣ ε − ε θ ( x t , t ) ∣ ∣ 2 L = ||\varepsilon - \varepsilon_\theta(x_t, t)||^2 L=∣∣εεθ(xt,t)2

一个 MSE 就能训练 SOTA 模型,这是史无前例的。


8. 最终反向采样公式(DDPM 的灵魂)

掌握了噪声预测后,反向采样最终写成:

x t − 1 = 1 α t ( x t − β t 1 − α ˉ t ε θ ( x t , t ) ) + σ t z x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \varepsilon_\theta(x_t,t) \right) + \sigma_t z xt1=αt 1(xt1αˉt βtεθ(xt,t))+σtz

其中:

  • 第一部分:减噪
  • 第二部分:加回一点随机性(使分布合理)

这里 z 是一个新的高斯噪声。

🎨 直观理解:

xₜ  
→ 扣掉网络预测的噪声  
→ 再加点合理的噪声  
→ 得到 xₜ₋₁(更清晰一点)

反复 1000 次:

随机噪声 → → → 清晰图像

扩散模型就是这样“从噪声中画画”的。


9. 图解:生成图像到底发生了什么?

🎬 动画式理解:

初始:纯噪声(xₜ)  
↓ 网络告诉我噪声在哪里  
一步:噪声稍微被清理  
↓  
↓  
第 100 步:能看到模糊轮廓  
↓  
↓  
第 300 步:有具体形状  
↓  
↓  
第 700 步:细节出现  
↓  
第 1000 步:高清图像(x₀)

模型生成图像的过程本质就是:

每一步都变得“更像图像一点”
直到变成最终结果。


🎉祝你天天开心,我将更新更多有意思的内容,欢迎关注!

最后更新:2025年11月
作者:Echo

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐