去噪扩散概率模型(Denoising Diffusion Probabilistic Model,DDPM) 的训练常被一句话概括为「随机 (t)、加噪、预测 (\epsilon)」——但若不清楚前向公式里每一项从哪来、损失标签为何已知,容易误以为逆向过程在「猜随机数」。本文用 2 维玩具数据(可视为 2 像素灰度图)手算完整一步训练,符号与 Diffusion-1 完全一致;读完后应能回答:前向链不训练,监督来自真实 (x_0) + 已知 (\epsilon)。
段末注释:DDPM 为 Ho et al.(2020)提出的离散时间高斯扩散框架;MSE 为均方误差(Mean Squared Error)。
前置阅读:Diffusion-0 概述、Diffusion-Math-0 §8–§10 重参数化与 SNR
后续阅读:Example-1 蛋白序列离散扩散数值例题
公式推导:Diffusion-1 §2、§5
连续时间对照:Diffusion-2 §2 DSM
插图:5003.大模型-架构-Diffusion-Example/example-fig*.png
1. 问题:前向「完全随机」,训练靠什么?
常见困惑:
| 误解 | 正解 |
|---|---|
| 前向加噪是黑箱随机,逆向无法学 | 前向 (q) 是固定高斯马尔可夫链,(\beta_t) 由人设定,不训练 |
| 网络要去猜未知的随机噪声 | 训练时 (\epsilon) 和 (t) 是自己采的,(\epsilon) 直接作回归标签 |
| 只有损坏后的 (x_t),没有监督 | (x_0) 来自数据集;((x_0, t, \epsilon)) 确定性地构造 (x_t) |
训练学的是 (p_\theta(x_{t-1}\mid x_t))(实践中以 (\epsilon_\theta(x_t,t)) 参数化),不是学前向 (q)。
2. 玩具设定:2 维「迷你图片」
把一张归一化后的灰度图缩成 2 个像素,即 (x_0 \in \mathbb{R}^2)。扩散步数取 (T=4)(真实 DDPM 常用 (T=1000),这里便于手算)。
2.1 符号表
| 符号 | 含义 | 本例取值 |
|---|---|---|
| (x_0) | 干净数据 | ([,1.0,;-0.5,]^\top) |
| (T) | 总扩散步数 | (4) |
| (\beta_t) | 第 (t) 步噪声方差 | ({0.2,;0.3,;0.4,;0.5}) |
| (\alpha_t) | (1-\beta_t) | ({0.8,;0.7,;0.6,;0.5}) |
| (\bar\alpha_t) | (\prod_{s=1}^{t}\alpha_s) | 见 §2.2 |
2.1.1 (\alpha_t) 与 (\bar\alpha_t) 分别是什么?
前向单步转移(Diffusion-1 §2)为:
[
q(x_t \mid x_{t-1}) = \mathcal{N}\big(\sqrt{1-\beta_t},x_{t-1},,\beta_t \mathbf{I}\big)
= \mathcal{N}\big(\sqrt{\alpha_t},x_{t-1},,(1-\alpha_t)\mathbf{I}\big).
]
| 符号 | 时间范围 | 含义 | 直觉 |
|---|---|---|---|
| (\beta_t) | 第 (t) 步 | 该步加入的高斯噪声方差 | 噪声日程的「原始旋钮」,由人设定 |
| (\alpha_t = 1-\beta_t) | 一步 (x_{t-1}\to x_t) | 该步均值里保留上一时刻信号的系数 | (\alpha_t) 越小,这一步丢信号越多 |
| (\bar\alpha_t = \prod_{s=1}^{t}\alpha_s) | (t) 步 (x_0\to x_t) | 从 (x_0) 连走 (t) 步后,(x_0) 在 (x_t) 中累积保留的系数 | (t) 越大,连乘越多小于 1 的数 → 越接近纯噪 |
记忆:(\alpha) 看单步,(\bar\alpha)(bar = 连乘)看从原图到当前步的累积。训练时随机抽 (t),用 (\bar\alpha_t) 决定「这一档噪声有多重」,并一步构造 (x_t):
[
x_t = \sqrt{\bar\alpha_t},x_0 + \sqrt{1-\bar\alpha_t},\epsilon.
]
- (t) 小、(\bar\alpha_t \approx 1):(\sqrt{\bar\alpha_t},x_0) 主导,(x_t \approx x_0);
- (t) 大、(\bar\alpha_t \approx 0):(\sqrt{1-\bar\alpha_t},\epsilon) 主导,(x_t \approx \epsilon)。
信噪比(Signal-to-Noise Ratio,SNR) 常写为 (\mathrm{SNR}(t)=\bar\alpha_t/(1-\bar\alpha_t))——(\bar\alpha_t) 越大,信号相对噪声越强。详见 Math-0 §9–§10。
段末注释:SNR 为信噪比;(\bar\alpha_t) 是训练重参数化里唯一需要的「累积」系数,不必逐步循环 (x_1\to x_2\to\cdots\to x_t)。
2.2 噪声日程递推
[
\bar\alpha_t = \prod_{s=1}^{t}(1-\beta_s).
]
| (t) | (\beta_t) | (\alpha_t) | (\bar\alpha_t) | (\sqrt{\bar\alpha_t}) | (\sqrt{1-\bar\alpha_t}) |
|---|---|---|---|---|---|
| 1 | 0.2 | 0.8 | 0.800 | 0.894 | 0.447 |
| 2 | 0.3 | 0.7 | 0.560 | 0.748 | 0.663 |
| 3 | 0.4 | 0.6 | 0.336 | 0.580 | 0.815 |
| 4 | 0.5 | 0.5 | 0.168 | 0.410 | 0.912 |
概念锚点 · 信噪比:(\bar\alpha_t) 越小,(x_t) 中保留的 (x_0) 信号越少(Math-0 §10)。

3. 训练第 1 步:从数据集取 (x_0)
[
x_0 = \begin{bmatrix} 1.0 \ -0.5 \end{bmatrix} \sim q(x_0).
]
这是整条监督链的根:模型最终要学会「什么样的 (x_0) 是真实的」。前向加噪只是把已知 (x_0) 映射到各噪声档位的损坏版本 (x_t),供网络练习去噪。
4. 训练第 2 步:随机抽 (t) 与 (\epsilon)
[
t = 3, \qquad
\epsilon = \begin{bmatrix} 0.5 \ -1.0 \end{bmatrix} \sim \mathcal{N}(0, \mathbf{I}).
]
- (t \sim \mathrm{Uniform}{1,\ldots,T}):本例固定 (t=3),对应「中等偏重度」噪声档。
- (\epsilon):标准高斯噪声,训练时完全已知,将作为网络的回归目标。
4.1 (\epsilon \sim \mathcal{N}(0, \mathbf{I})) 是什么?
(\sim) 表示「从……中抽样」。(\mathcal{N}(0, \mathbf{I})) 是 (d) 维标准多元高斯分布((d) 与 (x_0) 维数相同;本例 (d=2)):
| 符号 | 含义 |
|---|---|
| (0) | 均值向量 (\boldsymbol{\mu}=\mathbf{0}),每个分量期望为 0 |
| (\mathbf{I}) | 单位阵协方差:各维独立,且 (\mathrm{Var}(\epsilon_i)=1) |
因此本例中
[
\epsilon = \begin{bmatrix} 0.5 \ -1.0 \end{bmatrix}
]
等价于 (\epsilon_1 \sim \mathcal{N}(0,1))、(\epsilon_2 \sim \mathcal{N}(0,1)) 且彼此独立的一次具体实现——手算时为固定数字;真实训练中每步用 randn 重新抽,例如下一 batch 可能是 ([0.3,,1.2]^\top)。
为何用标准高斯? 前向公式 (x_t = \sqrt{\bar\alpha_t},x_0 + \sqrt{1-\bar\alpha_t},\epsilon) 里,噪声项协方差为 ((1-\bar\alpha_t)\mathbf{I}),与 (q(x_t\mid x_0)=\mathcal{N}(\sqrt{\bar\alpha_t}x_0,,(1-\bar\alpha_t)\mathbf{I})) 的方差一致;为何均值里是 (\sqrt{\bar\alpha_t}) 而非 (\bar\alpha_t) 见 §4.2(Math-0 §3)。
与 (x_0 \sim q(x_0)) 的分工:
| 抽样 | 随机对象 | 训练中的作用 |
|---|---|---|
| (x_0 \sim q(x_0)) | 真实数据 | 携带数据分布信息 |
| (\epsilon \sim \mathcal{N}(0, \mathbf{I})) | 人造噪声 | 已知标签,网络 (\epsilon_\theta) 要回归它 |
| (t \sim \mathrm{Uniform}{1,\ldots,T}) | 噪声档位 | 告诉网络当前损坏有多重 |
段末注释:(\mathcal{N}) 为正态(高斯)分布;(\mathbf{I}) 为 (d\times d) 单位矩阵。高维图像时 (\epsilon) 对每个像素/通道各抽一个 (\mathcal{N}(0,1)),彼此独立——Example-0 用 2 维只是便于手算。
4.2 (x_t) 与 (x_0):为何是 (\sqrt{\bar\alpha_t}) 而非 (\bar\alpha_t)?
§4.1 已出现 (x_t = \sqrt{\bar\alpha_t},x_0 + \sqrt{1-\bar\alpha_t},\epsilon)。(x_t) 是 (x_0) 经前向加噪 (t) 步后的损坏版本;二者在概率上由条件高斯联系:
[
q(x_t \mid x_0) = \mathcal{N}!\big(\sqrt{\bar\alpha_t},x_0,;(1-\bar\alpha_t)\mathbf{I}\big),
]
即:给定 (x_0),(x_t) 的均值是 (\sqrt{\bar\alpha_t},x_0),协方差是 ((1-\bar\alpha_t)\mathbf{I})。文献里有时写 (\bar\alpha_t x_0)(不开方),有时写 (\sqrt{\bar\alpha_t},x_0)——不是两套矛盾公式,而是在描述不同阶数的量:
| 场景 | 公式 | 含义 |
|---|---|---|
| 采样 / 重参数化 / 均值 | (\sqrt{\bar\alpha_t},x_0) | 线性缩放,标准差级别 |
| 方差、协方差 | ((1-\bar\alpha_t)\mathbf{I}) | 方差 = 标准差² |
| 信噪比 SNR、信号能量 | (\bar\alpha_t)、(\bar\alpha_t/(1-\bar\alpha_t)) | 二阶量(功率比),不开方 |
记忆:写 (x_t=\cdots)(样本)→ 用 (\sqrt{\bar\alpha_t});写方差、SNR → 用 (\bar\alpha_t)。
为何单步均值里是 (\sqrt{\alpha_t}) 而不是 (\alpha_t)? 单步前向可等价写成
[
x_t = \sqrt{\alpha_t},x_{t-1} + \sqrt{1-\alpha_t},\xi_t,
\quad \xi_t \sim \mathcal{N}(0,\mathbf{I}).
]
高斯随机量线性缩放时,方差按平方缩放:(\mathrm{Var}(\sqrt{\alpha_t},x_{t-1})=\alpha_t,\mathrm{Var}(x_{t-1}))。再加方差为 (1-\alpha_t) 的独立噪声,才与 (q(x_t\mid x_{t-1})) 中 (\beta_t=1-\alpha_t) 的设定一致。从 (x_0) 连走 (t) 步,信号系数连乘:
[
\sqrt{\alpha_1}\cdots\sqrt{\alpha_t}=\sqrt{\bar\alpha_t},
]
故 (x_t) 的均值必须是 (\sqrt{\bar\alpha_t},x_0),而非 (\bar\alpha_t x_0)。
数值核对(本例 (t=3)):若错误写成 (0.336,x_0) 而非 (0.580,x_0),信号幅度仅为正确值的约 (0.336/0.580\approx 58%),与 §5.2 手算及 (q(x_3\mid x_0)) 不一致。信号部分的平方范数按 (\bar\alpha_t) 衰减:
[
|\sqrt{\bar\alpha_t},x_0|^2 = \bar\alpha_t,|x_0|^2.
]
给定 (x_0) 时还有 (\mathbb{E}[x_t\mid x_0]=\sqrt{\bar\alpha_t},x_0)、(\mathrm{Var}(x_t\mid x_0)=(1-\bar\alpha_t)\mathbf{I})(Math-0 §10)。
段末注释:SNR 为信噪比 (\mathrm{SNR}(t)=\bar\alpha_t/(1-\bar\alpha_t)),分子用 (\bar\alpha_t) 因比较的是方差(功率)而非标准差。
5. 训练第 3 步:前向构造 (x_t)
5.1 马尔可夫链 vs 重参数化
逐步加噪(理解用):
[
q(x_t \mid x_{t-1}) = \mathcal{N}\big(\sqrt{1-\beta_t},x_{t-1},,\beta_t \mathbf{I}\big).
]
从 (x_0) 经 (x_1 \to x_2 \to x_3),每步再采独立高斯扰动。训练实现从不逐步循环,而用闭式重参数化:
[
\boxed{
x_t = \sqrt{\bar\alpha_t},x_0 + \sqrt{1-\bar\alpha_t},\epsilon
}
]
概念锚点 · 重参数化:(x_t) 是 (x_0) 与 (\epsilon) 的确定性函数,使 (\epsilon) 可直接当标签;(\sqrt{\bar\alpha_t}) 与 (\bar\alpha_t) 的分工见 §4.2(Math-0 §8)。

5.2 手算 (x_3)
代入 (t=3),(\bar\alpha_3 = 0.336):
信号项:
[
\sqrt{\bar\alpha_3},x_0 = 0.580 \begin{bmatrix} 1.0 \ -0.5 \end{bmatrix} = \begin{bmatrix} 0.580 \ -0.290 \end{bmatrix}.
]
噪声项:
[
\sqrt{1-\bar\alpha_3},\epsilon = 0.815 \begin{bmatrix} 0.5 \ -1.0 \end{bmatrix} = \begin{bmatrix} 0.408 \ -0.815 \end{bmatrix}.
]
合成:
[
\boxed{
x_3 = \begin{bmatrix} 0.988 \ -1.105 \end{bmatrix}
}.
]

5.3 不同 (t) 下同一 ((x_0, \epsilon)) 的 (x_t)
固定 (x_0 = [1.0, -0.5]^\top)、(\epsilon = [0.5, -1.0]^\top),只变 (t):
| (t) | (x_t)(公式计算) | (\sqrt{\bar\alpha_t}) | 直觉 |
|---|---|---|---|
| 1 | ([1.12,;-0.89]^\top) | 0.894 | 几乎就是原图 |
| 2 | ([1.08,;-1.04]^\top) | 0.748 | 轻微扰动 |
| 3 | ([0.99,;-1.11]^\top) | 0.580 | 中等噪声 |
| 4 | ([0.87,;-1.12]^\top) | 0.410 | 接近纯噪 |

6. 训练第 4 步:网络前向与损失
6.1 输入 / 输出
输入:((x_3,, t=3))
[
x_3 = \begin{bmatrix} 0.988 \ -1.105 \end{bmatrix}.
]
输出:(\epsilon_\theta(x_3, 3) \in \mathbb{R}^2)。真实实现中 (t) 经正弦位置编码或 embedding 注入 U-Net / Transformer;本例省略网络结构细节。
6.2 简化训练目标
与 Diffusion-1 §5 一致:
[
\mathcal{L}{\mathrm{simple}} = \big|\epsilon - \epsilon\theta(x_t, t)\big|^2.
]
情形 A · 预测正确:
[
\epsilon_\theta = \begin{bmatrix} 0.5 \ -1.0 \end{bmatrix} = \epsilon
\quad\Rightarrow\quad \mathcal{L} = 0.
]
情形 B · 预测错误(猜成零噪声):
[
\epsilon_\theta = \begin{bmatrix} 0 \ 0 \end{bmatrix}
\quad\Rightarrow\quad
\mathcal{L} = 0.5^2 + (-1.0)^2 = 1.25.
]
反向传播更新 (\theta),使下次类似 ((x_3, 3)) 时预测更接近真实 (\epsilon)。

6.3 不同 (t) 的参数:共享 (\theta),不是各档独立
结论:所有时间步共用同一套网络参数 (\theta),记为 (\epsilon_\theta(x_t,, t))——不是为每个 (t) 训练一个独立模型。
| 设计 | 参数量 | DDPM 主流? |
|---|---|---|
| 共享 (\epsilon_\theta(x_t,t)) + 时间 embedding | 一套 U-Net / Transformer | ✓ |
| 每档独立 (\epsilon_{\theta_t}(x_t)) | 约 (T) 倍((T=1000) 不可行) | ✗ |
(t) 如何进入网络? 作为条件输入,而非一组独立权重:
- 整数 (t) → 正弦位置编码或 MLP → 时间嵌入向量;
- 与 (x_t) 特征相加,或通过 AdaGN / FiLM 调制各层 GroupNorm 的 scale/shift。
训练时 batch 内样本可能对应 (t=12,,847,,503) 等不同档位,但一次 optimizer.step() 更新的是同一个 (\theta)——网络学的是一族去噪函数 ({f_\theta(\cdot,t)}_{t=1}^{T}),由共享骨干 + 时间条件表示。
段末注释:AdaGN 为 Adaptive Group Normalization;固定的是前向日程 (\beta_t),可训练的是逆向网络 (\theta)。
7. 为何预测 (\epsilon) 等价于「还原 (x_0)」
由重参数化式反解:
[
x_0 = \frac{1}{\sqrt{\bar\alpha_t}}\Big(x_t - \sqrt{1-\bar\alpha_t},\epsilon\Big).
]
用网络输出 (\hat\epsilon = \epsilon_\theta) 得 (\hat x_0):
[
\hat x_0 = \frac{1}{\sqrt{\bar\alpha_t}}\Big(x_t - \sqrt{1-\bar\alpha_t},\epsilon_\theta\Big).
]
预测正确时((\epsilon_\theta = \epsilon)):
[
\hat x_0 = \frac{1}{0.580}\Big(\begin{bmatrix}0.988\-1.105\end{bmatrix} - 0.815\begin{bmatrix}0.5\-1.0\end{bmatrix}\Big)
= \frac{1}{0.580}\begin{bmatrix}0.580\-0.290\end{bmatrix}
= \begin{bmatrix}1.0\-0.5\end{bmatrix} = x_0 ;\checkmark
]
预测错误时((\epsilon_\theta = \mathbf{0})):
[
\hat x_0 = \frac{x_3}{\sqrt{\bar\alpha_3}} \approx \begin{bmatrix}1.70\-1.91\end{bmatrix},
]
远离真实 (x_0)——损失大,梯度推动修正。
因此:表面上是「猜噪声」,实质是在每个 (t) 上学「从 (x_t) 指回数据流形」;大量 (x_0 \sim q(x_0)) 进入期望,编码了数据分布。
8. 一个 minibatch 里发生什么
设 batch size (= 3)(与 Diffusion-1 训练算法 一致):
| 样本 | (x_0)(数据集) | 随机 (t) | 随机 (\epsilon) | 构造 (x_t) | 损失项 |
|---|---|---|---|---|---|
| 1 | 样本 A | 847 | (\epsilon^{(1)}) | 公式算出 (x_{847}^{(1)}) | (|\epsilon^{(1)} - \epsilon_\theta(x_{847}^{(1)}, 847)|^2) |
| 2 | 样本 B | 12 | (\epsilon^{(2)}) | (x_{12}^{(2)}) | (|\epsilon^{(2)} - \epsilon_\theta(x_{12}^{(2)}, 12)|^2) |
| 3 | 样本 C | 503 | (\epsilon^{(3)}) | (x_{503}^{(3)}) | (|\cdots|^2) |
总损失 = 三项平均。前向 (q) 不参与梯度((\beta_t)、(\bar\alpha_t) 固定);仅 (\epsilon_\theta) 的参数 (\theta) 更新。
每个样本、每个 (t) 都在教网络:
当你看到这一档噪声程度下的损坏向量 (x_t),应去掉对应的 (\epsilon),使样本回到真实 (x_0) 附近。
9. 与 ELBO / 得分匹配的对应(一句话)
| 视角 | 本例中的体现 |
|---|---|
| 变分推断(VI) | 固定方差下,(L_{t-1}) 中 two-Gaussians 的 KL 化为 (|\epsilon - \epsilon_\theta|^2)(Diffusion-1 §4.2) |
| 去噪得分匹配(DSM) | (\nabla_x \log p_t(x) \propto -\epsilon/\sigma);预测 (\epsilon) 即预测得分(Diffusion-2 §2) |
本例是 DDPM / VP 扩散 离散版;DSM 中 (\sigma \leftrightarrow \sqrt{1-\bar\alpha_t}) 角色相同。
10. 生成阶段:同一 (\epsilon_\theta),不再使用 (x_0)
10.1 训练 vs 推理:(t) 各扮演什么角色?
| 阶段 | (t) 如何定 | 含义 |
|---|---|---|
| 训练 | (t \sim \mathrm{Uniform}{1,\ldots,T}) 随机抽 | 让同一 (\epsilon_\theta) 学会每一档噪声下的去噪 |
| 生成 | 固定从 (t=T) 起,再 (T!\to!T!-!1!\to!\cdots!\to!1) | 不再随机 (t);起点 = 日程中的最大噪声档 |
训练时 Example-0 手算用的是 (t=3);推理时不会再抽一个「初始 (t)」,而是:
[
x_T \sim \mathcal{N}(0, \mathbf{I}), \quad \text{等价于前向链末端 } q(x_T\mid x_0)\approx\mathcal{N}(0,\mathbf{I})\ \ (\bar\alpha_T\approx 0).
]
对真实图像(如 (512\times512\times3)),(x_T) 每个像素、每个通道各抽 (\mathcal{N}(0,1)),得到「雪花图」——初始噪声水平由训练前设定的 (T) 与 (\beta_t) 日程决定,生成时无需再测。
日程检查:需 (\bar\alpha_T=\prod_{s=1}^{T}(1-\beta_s)\approx 0),保证 (t=T) 足够接近纯噪;否则应增大 (T) 或调整余弦/线性 schedule(Math-0 §9)。
10.2 标准采样循环
训练完成后:
- 采样 (x_T \sim \mathcal{N}(0, \mathbf{I}))(纯噪声,与数据同 shape);
- 对 (t = T, T-1, \ldots, 1),调用同一 (\epsilon_\theta(x_t, t)) 计算 (\mu_\theta),采样 (x_{t-1})(Diffusion-1 §6);
- 得到生成样本 (x_0)。
1 | # 伪代码:同一 model、不同 t 输入 |
10.3 非标准起点(了解即可)
| 场景 | 起始状态 | 起始「噪声档」 |
|---|---|---|
| 标准文生图 | (x_T\sim\mathcal{N}(0,I)) | (t=T) |
| 图生图 img2img | 对给定图加噪到 (x_{t_0}) | 用户选 (t_0<T)(strength) |
| DDIM 跳步 | 仍从 (x_T) 或 (x_{t_0}) | 只在子序列上更新,最大档含义不变 |
图生图:(x_{t_0}=\sqrt{\bar\alpha_{t_0}},x_{\mathrm{init}}+\sqrt{1-\bar\alpha_{t_0}},\epsilon),再从 (t_0) 去噪;(t_0) 越大越不像原图(见 Diffusion-3 §2)。
生成依赖训练阶段在成千上万个 ((x_0, t, \epsilon)) 对上学到的各档去噪规律;§6.3 强调这些档位由同一 (\theta) 承担。
11. 与条件生成、文生图的关系(扩展)
本文与 Diffusion-1 讲的是无条件 DDPM:数据集只有 ({x_0}),网络 (\epsilon_\theta(x_t,t)) 学的是边缘分布 (p(x_0))。文生图与条件蛋白质 design 并不改变「加噪—猜噪声/去噪」骨架,而是把目标换成条件分布 (p(x_0\mid c)):
| 阶段 | 无条件(本文 Example-0) | 条件生成(文生图 / 条件 design) |
|---|---|---|
| 训练数据 | 仅 (x_0) | ((x_0,, c)) 配对(图–文 caption、结构–序列标签等) |
| 网络 | (\epsilon_\theta(x_t,, t)) | (\epsilon_\theta(x_t,, t,, c)) |
| 损失 | (|\epsilon - \epsilon_\theta(x_t,t)|^2) | 同形,但 (c) 注入网络(cross-attention、拼接等) |
| 推理 | 仅随机 (x_T) | (x_T) + 用户条件 (c)(prompt、motif、二级结构等) |
文生图典型链路(Diffusion-3 §4–§5):
- 大规模 (图像, caption) 上训练 (\epsilon_\theta(x_t,t,c)),(c) 为 CLIP/T5 文本嵌入;
- 训练时以概率 (p_{\mathrm{uncond}}) 丢弃 (c)(空 prompt (\varnothing)),便于 Classifier-free Guidance(CFG);
- 推理:(\hat\epsilon = \epsilon_\theta(x_t,t,\varnothing) + w\big(\epsilon_\theta(x_t,t,c) - \epsilon_\theta(x_t,t,\varnothing)\big)),(w>1) 强化「听 prompt」。
为何「每张训练图互不关联」仍能文生图? 同一套参数 (\theta) 在全体样本上共享,学的是 (q(x_0\mid c)) 的统计规律;关系通过条件 (c)(语言描述、结构标签)编码,而非图片两两连边。新 prompt 组合训练见过的语义,在 (c) 条件下去噪采样即可。
生物对照:序列离散扩散 + motif 固定见 Example-1 蛋白序列离散扩散数值例题;骨架连续扩散 + CFG 见 Diffusion-3、Diffusion-5。
段末注释:CFG 为 Classifier-free Guidance;caption 为图像–文本对中的文字描述。
12. 常见误解对照
1 | ❌ 前向随机 → 逆向只能碰运气猜随机数 |
13. 小结
| 环节 | 是否随机 | 是否训练 | 作用 |
|---|---|---|---|
| 前向 (q(x_t\mid x_{t-1})) | 是 | 否 | 制造损坏样本 |
| 采样 (x_0) | 是 | — | 数据分布监督 |
| 采样 (t,,\epsilon) | 是 | — | 已知标签 + 噪声档位 |
| 网络 (\epsilon_\theta) | — | 是 | 各档去噪 |
| 损失 (|\epsilon-\epsilon_\theta|^2) | — | — | 绑定「猜噪声」与「还原 (x_0)」 |
本例中 (x_3 = [0.988, -1.105]^\top) 单独看像乱数,但它确定地来自 (x_0) 与 (\epsilon);网络学会在该档减掉 (\epsilon),就能回到 ([1.0, -0.5]^\top)——这就是 DDPM 前向训练的全部逻辑。
本篇概念索引
| 概念 | 出现章节 | 延伸阅读 |
|---|---|---|
| 噪声日程 (\beta_t,,\alpha_t,,\bar\alpha_t) | §2.1–§2.2 | Math-0 §9 |
| (x_0 \sim q(x_0))、(\epsilon \sim \mathcal{N}(0,\mathbf{I})) | §3–§4.1 | Math-0 §2–§3 |
| (x_t) 与 (x_0);(\sqrt{\bar\alpha_t}) vs (\bar\alpha_t) | §4.2 | Math-0 §9–§10 |
| 重参数化 / SNR | §5 | Math-0 §8、§10 |
| (\mathcal{L}_{\mathrm{simple}}) | §6 | Diffusion-1 §5 |
| 共享 (\theta);时间 embedding | §6.3 | Diffusion-1 §5.2 |
| 生成从 (t=T) 起 / 训练 vs 推理 | §10 | Diffusion-1 §6 |
| ELBO / KL → MSE | §9 | Diffusion-1 §4 |
| DSM / 得分 | §9 | Diffusion-2 §2 |
| 逆向采样 | §10 | Diffusion-1 §6 |
| 条件生成 / CFG / 文生图 | §11 | Diffusion-3 §4–§5;Example-1 |
参考与延伸阅读
- Ho et al., Denoising Diffusion Probabilistic Models(NeurIPS 2020)——训练算法 Algorithm 1。
- Vincent, A Connection Between Score Matching and Denoising Autoencoders(2011)——DSM 与去噪的等价性。
- 本仓库 Diffusion-1 完整 ELBO 推导。
- 条件生成与 CFG:Diffusion-3。
- 蛋白序列离散扩散手算:Example-1。