扩散原野DIFFUSION FIELD
0/8
03Reverse process

学习每一步该往哪里走。

生成不是把某张噪声图“锐化”。模型根据当前 xtx_t 和时间步 tt,预测一个反向条件高斯分布的参数或等价参数化。

先分清三件事

真实后验 q(xt1xt,x0)q(x_{t-1}\mid x_t,x_0) 只在训练时可用;模型 pθ(xt1xt)p_\theta(x_{t-1}\mid x_t) 在生成时工作;εθ\varepsilon_\theta 是参数化反向均值的一种常用方式。

qq固定前向过程qq · 固定前向过程shape: 分布

人为设计,不含可学习参数。

pθp_\theta模型反向过程pθp_\theta · 模型反向过程shape: 分布

用神经网络近似不可直接获得的反向条件分布。

μθ\mu_\theta反向均值μθ\mu_\theta · 反向均值shape: 同 xₜ

决定本步主要去噪方向。

Σθ\Sigma_\theta反向协方差Σθ\Sigma_\theta · 反向协方差shape: 标量/对角/同维

控制本步采样随机性;实现中可固定或学习。

εθ\varepsilon_\theta预测噪声εθ\varepsilon_\theta · 预测噪声shape: 同 xₜ

常用等价参数化,可转换为 x^0\hat x_0μθ\mu_\theta

pθ(x0:T)=p(xT)t=1Tpθ(xt1xt)p_\theta(x_{0:T})=p(x_T)\prod_{t=1}^{T}p_\theta(x_{t-1}\mid x_t)
训练时

我们知道 x0x_0

因此可以写出可计算的后验 q(xt1xt,x0)q(x_{t-1}\mid x_t,x_0),把它当成监督反向模型的老师。

生成时

我们没有 x0x_0

只能从 xtx_t 出发,让 pθ(xt1xt)p_\theta(x_{t-1}\mid x_t) 近似训练时可用的真实后验。

网络到底输出什么?

pθ(xt1xt)=N ⁣(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1}\mid x_t)=\mathcal N\!\left(x_{t-1};\mu_\theta(x_t,t),\Sigma_\theta(x_t,t)\right)

原始形式预测均值与协方差参数;DDPM 常用的等价参数化让 U-Net 预测 ε\varepsilon,再把 ε\varepsilon 转换为反向均值。输出的不是固定图片,而是分布信息。

可控误差实验

预测噪声为什么能恢复 x0x_0

这里用已知前向噪声作为“老师”,人为给模型预测加入可控误差。它是公式实验,不是训练结果。

xtx_t模型输入:带噪状态
ε\varepsilon训练时知道的真实噪声
εθ\varepsilon_\theta模拟的模型预测
x^0\hat x_0由带噪状态与预测噪声反推
噪声预测 MSE0.0325
x^0=xt1αˉtεθ(xt,t)αˉt\hat x_0=\frac{x_t-\sqrt{1-\bar\alpha_t}\varepsilon_\theta(x_t,t)}{\sqrt{\bar\alpha_t}}

观察:tt 很大时 αˉt\sqrt{\bar\alpha_t} 很小,噪声预测的同样误差会被除法放大。这也是不同时间步学习难度与损失加权值得讨论的原因。

换一种方式理解

预测 ε 与恢复 x₀ 有什么关系?

知道加进去什么,就能把它扣出来

xtx_t 是信号与噪声的线性组合。如果模型准确找出噪声部分,就能反解出干净信号的估计。

带噪观测 − 估计噪声 → 信号估计

训练时的“老师”:真实后验

给定 x0x_0 后,q(xt1xt,x0)q(x_{t-1}\mid x_t,x_0) 是两个高斯关系的乘积与归一化结果,因此仍是高斯。它告诉我们:如果知道干净样本,本步最佳反向分布应该是什么。

展开后验均值与方差公式
q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)q(x_{t-1}\mid x_t,x_0)=\mathcal N(x_{t-1};\tilde\mu_t(x_t,x_0),\tilde\beta_t I)
μ~t=αˉt1βt1αˉtx0+αt(1αˉt1)1αˉtxt\tilde\mu_t=\frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t}x_0+\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t
β~t=1αˉt11αˉtβt\tilde\beta_t=\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t

训练时可用 x0x_0 构造这个老师;生成时没有 x0x_0,所以只能让 pθp_\theta 根据 xtx_ttt 给出近似。

Concept player

代码与采样同步

01x = randn(shape)                 # x_T02for t in reversed(range(1, T+1)):03    eps = model(x, t)04    mean = reverse_mean(x, eps, t)05    z = randn_like(x) if t > 1 else 006    x = mean + sigma[t] * z      # x_{t-1}07return x                         # x_0
x50x_{50}概念性二维轨迹 · 不是神经网络推理结果
当前行 1反向步 5049随机项 zN(0,I)z\sim\mathcal N(0,I)
概念演示: 上方二维点的聚拢只说明“每一步根据模型给出的方向修正状态”。它不等同于真实大型 U-Net 的图像推理。
停下来想 30 秒

生成阶段为什么不能直接使用 q(xt1xt,x0)q(x_{t-1}\mid x_t,x_0)

下一节:训练目标