【DDPM 扩散模型】Part 3:反向扩散的数学推导(从噪声中“捡回图像”的全过程)
DDPM 扩散模型 — Part 3:反向扩散的数学推导(从噪声中“捡回图像”的全过程)
🧨 本章是 DDPM 论文最难、最核心、最关键的部分。
我会用最通俗、最生活化的语言,把反向扩散背后的数学逻辑全部讲明白。🎯 目标:彻底弄懂:
1)反向过程为什么也是高斯?
2)网络到底在预测什么?
3)为什么预测噪声比预测图像更合理?
4)DDPM 的“真身”到底是什么?📅 最后更新:2025年11月
📋 目录
- 1. 为什么反向扩散这么重要?
- 2. 整个反向过程的直觉理解
- 3. 核心目标:求 p(xₜ₋₁ | xₜ)
- 4. 反向分布也会是高斯?为什么?
- 5. 反向扩散的均值 μₜ 是如何推出来的?(贝叶斯直觉版)
- 6. 神经网络的任务:预测噪声 ε
- 7. 为什么预测噪声比预测 x₀ 更好?
- 8. 最终反向采样公式(DDPM 的灵魂)
- 9. 图解:生成图像到底发生了什么?
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(xt∣xt−1)
但是反向过程是:
p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} | x_t) pθ(xt−1∣xt)
我们要求的就是这个分布。
这里 θ 表示神经网络的参数。
人生问题:
给你一张“半噪图” 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θ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σt)
其中:
- 均值 μₜ = 神经网络要预测的部分(非常重要!)
- 方差 Σₜ = 论文已给定(可固定)
所以:
🎯 神经网络只需要学习均值 μₜ
5. 反向扩散的均值 μₜ 是如何推出来的?(贝叶斯直觉版)
反向分布可以用贝叶斯写成:
q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt−1∣xt,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=αˉtx0+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)=αt1(xt−1−αˉ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 xt−1=αt1(xt−1−αˉtβtεθ(xt,t))+σtz
其中:
- 第一部分:减噪
- 第二部分:加回一点随机性(使分布合理)
这里 z 是一个新的高斯噪声。
🎨 直观理解:
xₜ
→ 扣掉网络预测的噪声
→ 再加点合理的噪声
→ 得到 xₜ₋₁(更清晰一点)
反复 1000 次:
随机噪声 → → → 清晰图像
扩散模型就是这样“从噪声中画画”的。
9. 图解:生成图像到底发生了什么?
🎬 动画式理解:
初始:纯噪声(xₜ)
↓ 网络告诉我噪声在哪里
一步:噪声稍微被清理
↓
↓
第 100 步:能看到模糊轮廓
↓
↓
第 300 步:有具体形状
↓
↓
第 700 步:细节出现
↓
第 1000 步:高清图像(x₀)
模型生成图像的过程本质就是:
每一步都变得“更像图像一点”
直到变成最终结果。
🎉祝你天天开心,我将更新更多有意思的内容,欢迎关注!
最后更新:2025年11月
作者:Echo
更多推荐
所有评论(0)