PAPER READING · ICLR 2021 ORAL

Score SDE

把噪声过程、分数学习与生成求解器分开理解

完整36页与附录A–I · 5张原表、17张原图 · 数学边界与双版本实现审计

01 · 先把五种对象分清

Score SDE 的核心贡献是把“怎样加噪、学什么、怎样生成”拆成可以独立研究的三个部分:预先规定前向随机微分方程,用同一个时间条件网络估计各时刻的分布分数,再选择反向 SDE、预测校正采样器或概率流 ODE。它不仅提供一个更强的生成器,也说明 DDPM 与 Langevin 系列为什么可以共用 score,以及为什么同一网络能支持密度计算和条件生成。

2.20 FID / 9.89 IS

CIFAR-10 无条件生成,NCSN++ continuous deep,VE SDE,训练中最佳 FID checkpoint。

2.99 bits/dim

均匀去量化 CIFAR-10,DDPM++ continuous deep,sub-VP,最后 checkpoint 的概率流 ODE 密度。

1024×1024

CelebA-HQ 定性生成,另一个高分辨率配置。上述三项成绩不能拼成“同一模型一次运行”。

对象定义和作用不能混同的内容
前向 SDE固定漂移和扩散系数,把数据扰动为接近简单先验的分布不是训练得到的神经生成器
Score 网络输入带噪图像和时间,输出与图像同维的对数密度梯度不是标量概率,也不是分类器置信度
反向 SDE在负时间步下使用完整 score 漂移,并持续加入随机增量不是简单取消前向噪声
概率流 ODE使用一半 score 系数、无扩散项的确定性输运理想情况下共享边缘分布,不共享随机轨迹
有限步采样程序离散器、corrector、末端去噪和数值容差的组合其实际输出不自动等于理想连续过程

主来源:arXiv v2,2021-02-10,ICLR 2021 Oral。原件 36 页:正文 1–9 页,致谢及参考文献 10–12 页,附录 A–I 为 13–36 页;本页覆盖全部 5 张编号表、17 张编号图及 5 个算法。旧笔记原字节保留,纠正清单见后文。

原Figure 1,前向扩散与反向score场示意,部分1
原 Figure 1 · 前向扩散与反向score场示意 · Song et al., ICLR 2021 · 原PDF第2页 · 来源

02 · 为什么需要连续时间统一

SMLD 先在一组噪声尺度上学 score,再逐尺度运行退火 Langevin;DDPM 则固定离散前向链,学习反向高斯转移。二者都在不同噪声水平上学习去噪信息,但网络、损失参数化与采样器绑在各自离散设计上,容易把模型能力和采样策略混为一谈。本文把有限个噪声分布扩展为连续密度族,从而可以研究“同一学到的 score 换一个 solver 会怎样”。

正向加噪不要求知道数据密度的显式表达式,只需要数据样本;反向生成也不需要知道归一化常数,只需要对图像求导的 log-density 梯度。难点由“直接学复杂密度”转为“在所有扰动尺度准确学向量场”。大噪声改善低密度区域的估计和跨模态移动,小噪声负责细节,时间条件网络共享不同尺度的统计结构。

理论基础的反向扩散定理来自 Anderson,去噪 score matching 来自既有研究,概率流推导受已有 Fokker–Planck 工作启发。论文的新贡献主要是把这些部分组成统一生成框架,提出 PC 采样组合、sub-VP、与神经 ODE 的实用联系,并通过系统架构探索把性能做强。不能把每个基础定理都归为本文首次提出,也不能用今天的扩散模型成绩改写 2021 年的历史比较。

原Figure 2,数据到噪声再返回数据的SDE总流程,部分1
原 Figure 2 · 数据到噪声再返回数据的SDE总流程 · Song et al., ICLR 2021 · 原PDF第4页 · 来源

03 · 概率对象与符号

令数据维数为 \(d\),连续时间 \(t\in[0,T]\)。图像实验通常取 \(T=1\)。\(\mathbf{x}(t)\) 是随机过程,\(\mathbf{x}_t\) 是某时刻的随机变量;一个给定起点仍对应许多 Brownian 随机轨迹。只固定时间并不会让图像分布变成高斯:高斯通常指固定干净样本后的条件扰动核,边缘分布是这些高斯对数据分布的混合。

\[ p_t(\mathbf{x})=\int p_0(\mathbf{x}_0)\,p_{0t}(\mathbf{x}\mid\mathbf{x}_0)\,\mathrm{d}\mathbf{x}_0,\qquad \mathbf{s}^{\ast}(\mathbf{x},t)=\nabla_{\mathbf{x}}\log p_t(\mathbf{x}). \]
符号含义
\(p_0,p_t,p_T\)数据、时刻 t 的扰动边缘、终端分布;计算时用简单高斯近似终端先验
\(p_{0t}(\mathbf{x}_t\mid\mathbf{x}_0)\)从给定干净样本到 t 的条件核,仿射漂移实验中可解析
\(\mathbf{f},g,\mathbf{G}\)向量漂移、标量扩散系数、一般矩阵扩散系数;不是 score 网络参数
\(\mathbf{s}_{\theta},\boldsymbol{\epsilon}_{\theta}\)score 参数化与噪声预测参数化,符号和尺度变换必须与核标准差匹配
\(\lambda(t),\epsilon,r\)训练权重、截断终止时间、corrector 的信噪比超参数;三个量互不相同
\(\alpha_i,\bar\alpha_i\)原论文用 α 表示累积乘积;本页解释 DDPM 时用 \(\bar\alpha_i=\prod_{j=1}^{i}(1-\beta_j)\) 避免与代码单步 alphas 混淆

标准正态噪声写作 \(\mathbf{z}\sim\mathcal N(\mathbf0,\mathbf I)\)。高斯记号第二个参数是协方差,不是标准差。令条件核为 \(\mathcal N(a(t)\mathbf{x}_0,b(t)^2\mathbf I)\),则条件 score 为 \(-(\mathbf{x}_t-a(t)\mathbf{x}_0)/b(t)^2=-\mathbf z/b(t)\)。这里的已知训练靶标与未知边缘 score 是两个对象,下一节解释为何前者能训练后者。

04 · 从离散去噪损失到连续目标

SMLD 的原式 1 以噪声方差加权每个尺度的 DSM;DDPM 原式 3 把常用噪声 MSE 改写成 score MSE,权重是条件方差。两者都属于以下统一形式:

\[ \mathcal L_{\mathrm{DSM}}= \mathbb E_{t\sim\mathcal U(0,T),\,\mathbf{x}_0\sim p_0,\,\mathbf{x}_t\sim p_{0t}} \left[\lambda(t)\left\|\mathbf{s}_{\theta}(\mathbf{x}_t,t) -\nabla_{\mathbf{x}_t}\log p_{0t}(\mathbf{x}_t\mid\mathbf{x}_0)\right\|_2^2\right]. \tag{原式7} \]

以均方误差的条件期望最优性,可得最优网络是条件 score 在给定带噪样本下的后验平均;把梯度移入边缘化积分后,正好是边缘 score。此论证要求相关可微、可积条件,且“最优”是假设数据、容量与优化充分,绝不保证训练后的网络处处精确。

\[ \mathbb E[\nabla_{\mathbf{x}_t}\log p_{0t}(\mathbf{x}_t\mid\mathbf{x}_0)\mid\mathbf{x}_t] =\frac{\nabla_{\mathbf{x}_t}p_t(\mathbf{x}_t)}{p_t(\mathbf{x}_t)} =\nabla_{\mathbf{x}_t}\log p_t(\mathbf{x}_t). \]

对上述高斯核取 \(\lambda(t)=b(t)^2\),训练可直接实现为 \(\mathbb E\|b(t)\mathbf{s}_{\theta}+\mathbf z\|^2\)。若令网络输出噪声预测,则 \(\mathbf{s}_{\theta}=-\boldsymbol{\epsilon}_{\theta}/b(t)\),损失变成噪声 MSE。负号不可省,VP 的 b 随时间变化;不是两个模型仅差一个固定终端系数。SMLD 的离散权重为 \(\sigma_i^2\),DDPM 为 \(1-\bar\alpha_i\)。

一次训练更新只需抽一批数据、一个 t 和一份高斯噪声,直接解析采样带噪图像;不必跑完整前向链或对求解器反向传播。连续训练学习的仍是同一个时间条件网络,并不意味着训练无时间采样误差。改变权重会改变有限容量下各噪声区间的拟合优先级,最佳似然和最佳视觉质量未必一致。

原文 §2.1–2.2、§3.3;原式 1、3、7;官方 losses.py 的 get_sde_loss_fn 与 get_score_fn。

05 · 反向时间的符号和随机性

\[ \mathrm d\mathbf{x}=\mathbf f(\mathbf x,t)\,\mathrm dt+g(t)\,\mathrm d\mathbf w,\qquad \mathrm d\mathbf{x}=[\mathbf f(\mathbf x,t)-g(t)^2\nabla_{\mathbf x}\log p_t(\mathbf x)]\,\mathrm dt +g(t)\,\mathrm d\bar{\mathbf w}. \tag{原式5、6} \]

第一式的时间向前;第二式从 T 走向 0,因此 \(\mathrm dt\lt0\),\(\bar{\mathbf w}\) 是反向时间方向定义的标准 Wiener 过程。不能把它当成向前 Brownian 增量再取负数。前向轨迹里的随机噪声也没有被逐项“找回”,反向过程恢复的是正确的概率演化。

把一步正的步长写为 \(h\gt0\),从 t 走到 t−h 的 Euler–Maruyama 更新是:

\[ \mathbf{x}_{t-h}=\mathbf{x}_t-\left[\mathbf f(\mathbf{x}_t,t)-g(t)^2\mathbf{s}_{\theta}(\mathbf{x}_t,t)\right]h +g(t)\sqrt h\,\mathbf z. \]

漂移乘 h,噪声乘根号 h,score 修正乘 \(g^2\)。若改用正向增长的新钟 \(\tau=T-t\),漂移应写成 \(-\mathbf f+g^2\mathbf s\),不要一边改钟一边沿用旧负号。网络、终端先验近似、有限步离散都引入误差;原论文引用的唯一强解条件也不是任意神经场都自动满足的许可证。

直觉上,正向扩散从高密度处向外摊开;反向时 score 指向高密度区域,补偿扩散造成的概率散开。但“梯度上升找 mode”仍不足以描述生成,因为反向 SDE 的噪声项与时间变化共同维持多模态分布,去掉噪声却保留完整 score 系数通常会走向错误分布。

06 · VE、VP 与 sub-VP 的完整比较

定义 \(B(t)=\int_0^t\beta(s)\,\mathrm ds\)、\(a(t)=e^{-B(t)/2}\)。以下表同时写清扩散系数和条件方差,避免把 sub-VP 标准差误开平方:

过程漂移 f扩散平方 g²条件均值条件方差 b²
VE0\(\mathrm d\sigma(t)^2/\mathrm dt\)\(\mathbf x_0\)\(\sigma(t)^2-\sigma(0)^2\)
VP\(-\beta(t)\mathbf x/2\)\(\beta(t)\)\(a(t)\mathbf x_0\)\(1-e^{-B(t)}\)
sub-VP\(-\beta(t)\mathbf x/2\)\(\beta(t)(1-e^{-2B(t)})\)\(a(t)\mathbf x_0\)\((1-e^{-B(t)})^2\)

VE 离散增量的方差是相邻噪声方差的差:\(\mathbf x_i=\mathbf x_{i-1}+\sqrt{\sigma_i^2-\sigma_{i-1}^2}\mathbf z\)。只有这样各步独立噪声方差才望远镜求和为总方差。VP 的 \(\mathbf x_i=\sqrt{1-\beta_i}\mathbf x_{i-1}+\sqrt{\beta_i}\mathbf z\),在 \(\beta_i\approx\beta(t)\Delta t\) 极限下,展开平方根得到漂移 \(-\beta(t)\mathbf x/2\)。离散 β 与连续 β 相差时间尺度,不能直接把最大 20 当离散单步概率。

\[ \Sigma_{\mathrm{VP}}(t)=e^{-B(t)}\Sigma_0+(1-e^{-B(t)})\mathbf I,\qquad \Sigma_{\mathrm{subVP}}(t)=e^{-B(t)}\Sigma_0+(1-e^{-B(t)})^2\mathbf I. \]

因此 VP 只有在初始协方差为单位阵时才每时刻保持单位协方差;一般是有界并趋于单位阵。相同起点和 β 下,二者差为 \(e^{-B(t)}(1-e^{-B(t)})\mathbf I\succeq0\),故 sub-VP 方差不超过 VP。sub-VP 在中间时刻注入更少噪声,仍可在足够大的 B 下逼近标准正态,其较好似然是本文的经验结果,不是对所有数据集的普遍保证。

VE 的“exploding”说的是随噪声尺度增大方差可增大,并非在有限 T 必然数学发散。有限终点的分布仍含少量数据均值与结构;把它替换为零均值高斯只是受噪声强度控制的近似。以上推导对应原式 8–12、20–29。

07 · 实际噪声日程与零时刻问题

\[ \sigma(t)=\sigma_{\min}\left(\frac{\sigma_{\max}}{\sigma_{\min}}\right)^t,\quad g_{\mathrm{VE}}(t)=\sigma(t)\sqrt{2\log(\sigma_{\max}/\sigma_{\min})}; \quad\beta(t)=0.1+19.9t,\quad B(t)=0.1t+9.95t^2. \]

CIFAR 配置中 VE 使用 \(\sigma_{\min}=0.01,\sigma_{\max}=50\),数据尺度为 [0,1];VP/sub-VP 图像通常转到 [−1,1],β 从 0.1 线性升至 20。噪声参数和输入尺度是一套约定,混用会让 score、损失与终端先验都错位。官方 NCSN++ 内部又把非 centered 输入变换为 [−1,1],这是网络内部预处理,不应悄悄改变外层 VE 核的定义。

原附录 C 专门讨论 VE 起点:离散约定 \(\sigma(0)=0\),而连续几何日程的右极限是 0.01,所以不能把日程在零点假装成光滑函数。一般式 29 中的方差差值与实践式 31 中直接使用 \(\sigma(t)^2\) 需要这项边界约定。实现避开零点,在 \([\epsilon,1]\) 上训练或求解。

用途VE εVP / sub-VP ε说明
训练10⁻⁵10⁻⁵防止零方差导致除零或极大 score
采样10⁻⁵10⁻³VP 末端方差匹配离散 DDPM 的第一噪声层
似然10⁻⁵10⁻⁵论文观察更小截断常改善 likelihood,但不是无代价精确零点

原式 30–34 是上节高斯核的具体实例:VP 标准差为 \(\sqrt{1-e^{-0.1t-9.95t^2}}\),sub-VP 则是 \(1-e^{-0.1t-9.95t^2}\)。Figure 5 比较 1000 步离散核和连续核的均值及方差,说明近似吻合,而不是任意有限步离散精确等价。

原Figure 5,1000步离散核与连续VE/VP核的均值、方差对齐,部分plot
原 Figure 5 · 1000步离散核与连续VE/VP核的均值、方差对齐 · Song et al., ICLR 2021 · 原PDF第16页 · 来源

08 · 为什么 ODE 只用一半 score

标量、与状态无关的扩散满足 Fokker–Planck 方程:

\[ \partial_t p_t=-\nabla\cdot(\mathbf f p_t)+\frac12g(t)^2\Delta p_t =-\nabla\cdot\left[\left(\mathbf f-\frac12g(t)^2\nabla\log p_t\right)p_t\right]. \]

右侧是连续性方程,因此向量场 \(\mathbf v=\mathbf f-\frac12g^2\nabla\log p_t\) 的确定性流具有同一族边缘密度。把它反向积分即可从先验生成数据。这个一半来自扩散方程的二阶项,不能把反向 SDE 中的噪声删掉后保持系数 1。

\[ \frac{\mathrm d\mathbf x}{\mathrm dt}=\mathbf v_{\theta}(\mathbf x,t) =\mathbf f(\mathbf x,t)-\frac12g(t)^2\mathbf s_{\theta}(\mathbf x,t). \tag{原式13的模型版本} \]

相同的是每个时刻的分布,不是耦合、转移概率或单条路径。ODE 给定初值后没有额外随机性;SDE 会持续分叉。同一随机种子不能保证两种 sampler 产生同一张图。只有真实 score、匹配端点分布和精确积分的理想条件下,才能直接使用边缘等价结论。

学到的近似 score 通常不等于模型自己所有边缘的 score,此时把它分别代入 ODE 与 SDE,两个生成分布可能不相同。因此 ODE 可定义一个可计算密度的模型,但其 likelihood 不能自动称为“同一近似反向 SDE 的精确 likelihood”。这是读摘要最容易漏掉的范围限制。

原文 §4.3;附录 D.1 原式 35–38 的逐项散度重写。这里从标量情形展示逻辑,一般矩阵情形见下一节。

09 · 一般矩阵扩散与附录公式核查

令 \(A(\mathbf x,t)=\mathbf G(\mathbf x,t)\mathbf G(\mathbf x,t)^{\mathsf T}\)。当扩散依赖状态时,多出的矩阵散度项不能省略;按原文逐行散度约定:

\[ \mathrm d\mathbf x=[\mathbf f-\nabla\cdot A-A\nabla\log p_t]\,\mathrm dt+\mathbf G\,\mathrm d\bar{\mathbf w}, \qquad \dot{\mathbf x}=\mathbf f-\frac12\nabla\cdot A-\frac12A\nabla\log p_t. \tag{原式16、17} \]

条件反向 SDE 再减去 \(A\nabla_{\mathbf x}\log p_t(y\mid\mathbf x)\),对应原式 18。原式 15 是一般前向 SDE;原式 35–37 展开双重求导,利用 \(\nabla p=p\nabla\log p\) 把扩散项写成流的散度。理论支持一般 G,但官方本次核查的 SDE 基类和反向封装主要实现标量、状态无关扩散,不能把代码包装器直接用于任意矩阵 G。

对于非仿射漂移,扰动核未必有解析式。可数值模拟前向过程得到样本,再使用不需要条件核 score 的 sliced score matching。此处原 v2 的式 19 在 PDF 文本和 arXiv HTML 数学源码中都写成了形如 \(\mathbf v^{\mathsf T}\mathbf s_{\theta}\mathbf v\) 的项,缺少 Jacobian,维数也不成立。下面明确写出数学上应使用的 score-matching 形式,不冒充原式逐字正确:

\[ \mathbb E_{t,\mathbf x_t,\mathbf v}\left[ \lambda(t)\left(\frac12\|\mathbf s_{\theta}(\mathbf x_t,t)\|^2 +\mathbf v^{\mathsf T}J_{\mathbf s_{\theta}}(\mathbf x_t,t)\mathbf v\right)\right], \quad\mathbb E[\mathbf v]=0,\quad\mathbb E[\mathbf v\mathbf v^{\mathsf T}]=\mathbf I. \]

该式把 divergence 用随机方向的 Jacobian 二次型估计;在标准边界条件下与 Fisher divergence 只差不依赖参数的常数。额外前向模拟和导数计算并非免费,论文的主要图像实验仍用解析高斯核的 VE/VP/sub-VP DSM,不应声称已经实证了任意复杂 SDE。

10 · 密度、散度、去量化与精确的边界

沿概率流 ODE,连续变量的密度满足 \(\mathrm d\log q_t(\mathbf x_t)/\mathrm dt=-\nabla\cdot\mathbf v_{\theta}\)。从数据积分到 T 后,模型密度为:

\[ \log q_{\epsilon}(\mathbf x_{\epsilon}) =\log\pi(\mathbf x_T)+\int_{\epsilon}^{T}\nabla\cdot\mathbf v_{\theta}(\mathbf x_t,t)\,\mathrm dt. \tag{原式39的截断与模型记号} \]

这里用 q 和 π 显式区分学到的 ODE 模型与未知真实数据密度。积分式前是加号,因为我们从低噪声向先验方向编码;若程序把散度状态定义成负号,最后合并也必须相应改变。计算的是向量场 Jacobian 的 trace,不是 score 向量求和或图像梯度模长。

\[ \nabla\cdot\mathbf v_{\theta}=\operatorname{tr}J_{\mathbf v_{\theta}} =\mathbb E_{\boldsymbol{\eta}}\!\left[\boldsymbol{\eta}^{\mathsf T}J_{\mathbf v_{\theta}}\boldsymbol{\eta}\right], \quad\mathbb E[\boldsymbol{\eta}]=0,\quad \mathbb E[\boldsymbol{\eta}\boldsymbol{\eta}^{\mathsf T}]=\mathbf I. \tag{原式40} \]

Hutchinson–Skilling 估计器通过自动微分的向量–Jacobian 乘积实现,不构造 d×d 矩阵。官方默认 Rademacher ±1 向量,也支持 Gaussian;每次 ODE 求解先抽一次探针并沿积分保持固定,重新运行再抽。无偏的是理想 trace 估计;有限探针、有限容差、自适应求解与 ε 截断仍有误差,不能把“exact likelihood”解释成浮点程序无误差或真实数据 likelihood 已知。

论文使用 SciPy RK45,atol=rtol=10⁻⁵,ε=10⁻⁵;Table 2 的 test bits/dim 平均五次运行。其“exact”主要区别于用变分下界代理 log-likelihood,基于可逆流的 change-of-variables;训练并非最大似然训练。

8-bit 像素先做均匀去量化:\(u=(k+\xi)/256,\ \xi\sim\mathcal U(0,1)\)。若密度建在 [0,1],bpd 为 \(8-\log q(u)/(d\log2)\);若再缩放为 [−1,1],缩放 Jacobian 使常数变为 7。这个量是均匀去量化协议下的连续密度评价;把一个 bin 的积分变成离散概率仍有 Jensen 下界关系。Table 2 的带星 DDPM 数字来自离散数据 ELBO,不能只看数值便把差值全归因于“去掉 ELBO 松弛”。

末端 Tweedie 去噪是采样后处理,可能改变分布或可逆性; likelihood.py 对纯 ODE 积分计算密度,不是对“ODE 加末端去噪”复合操作无条件给出同一密度。评估时要记录这一差别。

11 · ODE 采样与可辨识编码

固定网格可用原式 43–44 的 probability-flow predictor;也可从先验初值反向运行自适应 RK45,容差控制局部积分误差。Figure 3 的 14、86、548 是三种精度下的 score 函数评估次数,说明同一 ODE 可以更灵活地分配计算;“减少超过 90% 且视觉无损”是展示样本的定性描述,不是整个数据集统一加速倍数或任何容差都保 FID 的定理。

原Figure 3,ODE自适应评估点、14/86/548次评估示例和插值,部分1
原 Figure 3 · ODE自适应评估点、14/86/548次评估示例和插值 · Song et al., ICLR 2021 · 原PDF第8页 · 来源

给定固定前向 SDE、同一真实数据分布和精确 score,概率流向量场确定;在适当唯一解条件下,某输入的编码也确定。改变 SDE 或日程后一般得到另一种编码,因此“uniquely identifiable”不是跨任意生成器的万能语义坐标。有限训练结果只是近似;附录用每分辨率 4 与 8 个 block 的两种 NCSN++ 模型对 16 张 CIFAR 图像比较编码,不能把这个小实验写成所有图像的严格同一性证明。

Figure 7 画一张图前 100 维 latent;Figure 8 的打乱基线和维度相关性支持相似编码,图内某一维例子 r=0.96,并非所有维度均值。图中没有提供可重建的完整数字表,本页保留原图,不伪造点值或统计检验。

原Figure 7,不同深度模型对一张图像前100维latent编码的比较,部分plot
原 Figure 7 · 不同深度模型对一张图像前100维latent编码的比较 · Song et al., ICLR 2021 · 原PDF第21页 · 来源
原Figure 8,16张图像的编码差异、打乱基线和逐维相关性,部分plot
原 Figure 8 · 16张图像的编码差异、打乱基线和逐维相关性 · Song et al., ICLR 2021 · 原PDF第21页 · 来源

同一 ODE 可把真实图像编码为 latent,再逆积分重建或进行球面插值、改变 latent 范数来调温。温度变化会改变先验,因而输出分布也改变;插值平滑不代表每个 latent 方向已经语义解耦。Figure 6 来自 256×256 CelebA-HQ 的 DDPM 配置,而不是 CIFAR 的最佳 VE 模型。

原Figure 6,CelebA-HQ256的球面插值与latent温度缩放,部分1原Figure 6,CelebA-HQ256的球面插值与latent温度缩放,部分2
原 Figure 6 · CelebA-HQ256的球面插值与latent温度缩放 · Song et al., ICLR 2021 · 原PDF第20页 · 来源

12 · 四种离散采样规则

设前向离散一步为 \(\mathbf x_{i+1}=\mathbf x_i+\mathbf f_i(\mathbf x_i)+G_i\mathbf z\),其中 \(\mathbf f_i,G_i\) 已经吸收步长。对从 i+1 返回 i 的步骤:

\[ \begin{aligned} \text{reverse diffusion: }\quad \mathbf x_i&=\mathbf x_{i+1}-\mathbf f_{i+1}(\mathbf x_{i+1})+G_{i+1}^2\mathbf s_{\theta}(\mathbf x_{i+1},i+1)+G_{i+1}\mathbf z,\\ \text{probability flow: }\quad \mathbf x_i&=\mathbf x_{i+1}-\mathbf f_{i+1}(\mathbf x_{i+1})+\tfrac12G_{i+1}^2\mathbf s_{\theta}(\mathbf x_{i+1},i+1). \end{aligned} \]

这是原式 41–46 的标量写法。reverse diffusion 与 DDPM ancestral 都逼近同一连续反向过程,但有限步公式不同。VP ancestral 为 \(\mathbf x_{i-1}=(\mathbf x_i+\beta_i\mathbf s_{\theta})/\sqrt{1-\beta_i}+\sqrt{\beta_i}\mathbf z\);VP reverse diffusion 的均值则为 \((2-\sqrt{1-\beta_i})\mathbf x_i+\beta_i\mathbf s_{\theta}\)。展开到 β 的一阶才对齐;把两者叫成完全同一个 finite-step 算法会丢失实验问题。

\[ \mathbf x_{i-1}=\mathbf x_i+(\sigma_i^2-\sigma_{i-1}^2)\mathbf s_{\theta}(\mathbf x_i,i) +\sqrt{\frac{\sigma_{i-1}^2(\sigma_i^2-\sigma_{i-1}^2)}{\sigma_i^2}}\,\mathbf z. \tag{原式47} \]

VE ancestral 的均值与 reverse diffusion 一样,噪声方差更小,是条件高斯后验推导出的选择;最后 \(\sigma_0=0\) 时噪声消失。附录 F 在参数化说明里把 score 写成估计正的 z/σ,但条件高斯 score 应是负的 z/σ;其均值式、原式 47、官方 losses.py 的负 target 相互一致,文字符号错误已在此显式指出。

连续 VP/sub-VP 实验改用 Euler–Maruyama predictor,原因是原 DDPM 离散器在靠近零时间处对连续方差的匹配较差,影响 FID。任何 solver 名称后都应跟上时间网格、步数、末端 ε、是否去噪和 score 参数化,才是一份可复现实验描述。

13 · PC 与五个算法逐步对应

原 Algorithm 1 先 predictor 从当前时间向低噪声时间移动,再做 M 个 corrector 使样本向该时刻的边缘靠近。Algorithm 2/3 分别把 VE/VP 的 reverse-diffusion 更新代入;Algorithm 4/5 给出退火 Langevin corrector。Langevin 更新为:

\[ \mathbf x\leftarrow\mathbf x+\eta\,\mathbf s_{\theta}(\mathbf x,t)+\sqrt{2\eta}\mathbf z,\qquad \eta_{\mathrm{VE}}=2\left(r\frac{\|\mathbf z\|_2}{\|\mathbf s_{\theta}\|_2}\right)^2. \]

VP Algorithm 5 为 \(\eta_{\mathrm{VP}}=2\alpha_i(r\|\mathbf z\|_2/\|\mathbf s_{\theta}\|_2)^2\),这里暂保留原文记号 αᵢ,并在实现审计中区分其与代码单步 alphas。r 控制一次更新中 score 漂移与随机噪声的相对尺度,不是训练 loss 权重;论文大批量下用 batch 平均范数,小批量建议以根号 d 代替噪声范数。有限步未 Metropolis 校正的 Langevin 只近似保持目标分布,corrector 也不能保证修正所有网络系统误差。

  1. 选 SDE 和适配网络,从 VE 的方差 σmax² 高斯或 VP/sub-VP 标准高斯初始化
  2. 按降噪顺序循环,使用 predictor 推进一步;VE 的扩散增量使用相邻方差差,VP 使用对应漂移和扩散
  3. 同一噪声层做 M 次 Langevin,每次重新算 score 和噪声,按 r 调整 η
  4. 最后执行单次去噪,返回图像;原 SMLD 相当于 identity predictor,原 DDPM 相当于 identity corrector

一般高斯核的 Tweedie 后验均值可写为 \(\widehat{\mathbf x}_0=(\mathbf x_t+b(t)^2\mathbf s_{\theta})/a(t)\),VE 的 a=1。官方 PC 返回最后 predictor 的无噪均值 x_mean,ODE sampler 可额外执行一次 reverse-diffusion 均值更新;精确实现并非直接逐字计算同一个任意核公式。论文指出人眼不明显的小噪声会显著恶化 FID,因此所有比较都要检查去噪开关。

重要代码差异:两套官方实现的每个网格时刻实际上先 corrector 再 predictor,不是 Algorithm 1 的先后顺序。它是在当前密度上校正后再向前推进的可用离散变体,不能声称有限步逐行完全复现了伪代码。对应源码位置与 α 记号问题在实现审计中列出。

14 · 采样比较的全部原表

Table 1/4 比较固定网络下的采样:两种SDE均使用Ho等DDPM架构,分别按原离散SMLD和DDPM目标训练1000个噪声层,并不是后面最佳NCSN++ deep的对照。CIFAR-10 FID 越低越好,± 为五次采样运行标准差,不是五次独立训练。P1000 约 1000 次 score 评估;P2000、C2000、PC1000 都约 2000 次,PC1000 是 1000 predictor 加 1000 corrector。C2000 列在原表跨三行合并,本页重复显示以避免误读成三个不同值。

原 Table 1 · 线性插值,FID ± 五次采样标准差

PredictorVE P1000VE P2000VE C2000VE PC1000VP P1000VP P2000VP C2000VP PC1000
ancestral sampling4.98 ± .064.88 ± .0620.43 ± .073.62 ± .033.24 ± .023.24 ± .0219.06 ± .063.21 ± .02
reverse diffusion4.79 ± .074.74 ± .0820.43 ± .073.60 ± .023.21 ± .023.19 ± .0219.06 ± .063.18 ± .01
probability flow15.41 ± .1510.54 ± .0820.43 ± .073.51 ± .043.59 ± .043.23 ± .0319.06 ± .063.06 ± .03

VE 上单独 ODE predictor 较差,加入 corrector 后从 15.41 降至 3.51;VP 上 PC 的改善较小。相同计算预算应把 PC1000 与 P2000 比,而不是只报对 P1000 的提升。原 Table 1 使用线性时间 embedding 插值,Table 4 改为向下取整插值:

原 Table 4 · 取整插值,FID ± 五次采样标准差

PredictorVE P1000VE P2000VE C2000VE PC1000VP P1000VP P2000VP C2000VP PC1000
ancestral sampling4.98 ± .064.92 ± .0220.43 ± .073.62 ± .033.24 ± .023.11 ± .0319.06 ± .063.21 ± .02
reverse diffusion4.79 ± .074.72 ± .0720.43 ± .073.60 ± .023.21 ± .023.10 ± .0319.06 ± .063.18 ± .01
probability flow15.41 ± .1512.87 ± .0920.43 ± .073.51 ± .043.59 ± .043.25 ± .0419.06 ± .063.06 ± .03

这里有一个值得保留的限定:Table 4 中 VP ancestral P2000=3.11 优于 PC1000=3.21;reverse diffusion P2000=3.10 也优于 PC1000=3.18。因此“corrector 总胜过加倍 predictor”太强,正文说通常更好或接近才符合完整表。离散训练只有 1000 噪声层,P2000 使用额外插值,不能把结果全部归因于积分阶数。

原 Table 5 · 最佳corrector信噪比r

PredictorVE P1000VE P2000VE C2000VE PC1000VP P1000VP P2000VP C2000VP PC1000
ancestral sampling——0.220.17——0.270.01
reverse diffusion——0.220.16——0.270.01
probability flow——0.220.17——0.270.04

r 以 0.01 步长网格搜索得到,表中 predictor-only 的 r 不适用;corrector-only 在每噪声层 2 步,PC 默认每层 1 步。CIFAR 训练 batch128、采样 batch1024;LSUN bedroom/church 256² 训练 batch64、采样 batch8,r=0.075。Figure 9 展示预算在 P 与 C 间分配的定性效果,没有对应的完整数值 FID 表,不填造曲线点。

原Figure 9,LSUN采样预算在predictor与corrector之间的分配,部分1原Figure 9,LSUN采样预算在predictor与corrector之间的分配,部分2
原 Figure 9 · LSUN采样预算在predictor与corrector之间的分配 · Song et al., ICLR 2021 · 原PDF第23页 · 来源

15 · 网络结构与基础模型和深模型

网络是多尺度卷积 U-Net 型 score 网络,不是 Transformer,也没有单独的 VAE latent 压缩。输入为 H×W×3 带噪 RGB 与一个时间或噪声条件,输出同尺寸三通道向量。下采样路径保存特征,瓶颈做残差和 attention,上采样拼接 skip 特征恢复空间分辨率。噪声 embedding 经两层全连接注入各 residual block;“conditional=True”在这里表示噪声条件,不是训练时使用类别标签。

组件NCSN++ / VEDDPM++ / VP 与 sub-VP
基础通道与分辨率CIFAR nf=128,倍率 (1,2,2,2),对应 32、16、8、4 像素;16 像素 attention,瓶颈也有 attention
归一化与激活GroupNorm、Swish;dropout=0.1;卷积大小 3;输出末层 init_scale=0
残差块BigGAN 型;skip 相加后按根号 2 缩放;基础每分辨率 4 个,deep 为 8 个
上/下采样抗混叠FIR,核 [1,3,3,1]不使用 FIR
渐进输入 / 输出residual / nonenone / none
连续时间 embedding对 log σ 的随机 Fourier 特征,scale16官方配置保留 positional embedding;时间标签缩放为 t×999
输出解释模型内部除以 σ,输出 score网络输出经 wrapper 取负并除以条件标准差成为 score
EMA0.9990.9999

“4 个 block 每分辨率”是配置计数,不是整个网络只有 16 层。源码下行每级 num_res_blocks,上行每级 num_res_blocks+1,另有瓶颈、重采样 residual block、attention 与输入输出卷积。deep 翻倍的是这项 block 配置,不应在没有测量时声称总参数精确翻倍。论文没有提供统一参数量表,本次没有实例化模型统计参数或 FLOPs。

附录 H 的架构探索包含 FIR、skip rescale、BigGAN block、2→4 blocks、输入与输出 progressive 组合。VE 在 CIFAR 和 CelebA64 上比较,VP 仅 CIFAR;VP 共 144 个配置,NCSN++ 的结构排第 4,而最佳 DDPM++ 去掉 FIR 与 progressive。Equalized learning rate 早期有害而未继续探索,不能列成最终训练技巧。

原Figure 10,VE架构探索的FIR、skip、block、深度与progressive五面板,部分plot
原 Figure 10 · VE架构探索的FIR、skip、block、深度与progressive五面板 · Song et al., ICLR 2021 · 原PDF第25页 · 来源

Figure 10 是其他组件也可以变化时的箱线图,不是所有因素都严格固定的一次单变量对照。论文没有逐配置数字表,本页完整保留五面板、不给箱线位置编造小数。结果支持“组件组合有帮助”,对每一项的独立因果增益应谨慎。

16 · 数据、训练和选 checkpoint 的细节

CIFAR-10 是 60,000 张 32² 彩色图,官方划分 50,000 train / 10,000 test;无条件生成不使用类别监督,只有额外分类器实验用标签。CelebA64 用于 VE 架构搜索,LSUN bedroom 与 church outdoor 的 256² 图用于 PC、补全与上色,CelebA-HQ 用于 256² ODE 展示和 1024² 生成。这些不同目的的数据实验不可合并成单一训练集。CIFAR 原始数据说明

官方 loader 的 CIFAR 使用 train/test split 与训练随机水平翻转;CelebA 中央裁 140 再缩放,LSUN 按分辨率配置缩放裁切。用于 bpd 的 loader 专门打开均匀去量化,默认训练配置 uniform_dequantization=False,不要为了“遵从似然协议”无意改写所有训练图像。高分辨率 CelebA-HQ 的精确文件清单、全部预处理 provenance 与原内部 checkpoint 本次未获得。

设置论文与已固定源码范围限定
优化器Adam,lr2×10⁻⁴,β₁0.9,PyTorch 明确 β₂0.999,eps10⁻⁸,weight decay0来自默认 CIFAR 配置与 losses.py,不能默认所有历史外部基线相同
稳定化5000-step 线性 warmup,梯度范数裁剪 1,EMAVE 与 VP 的 EMA 不同
基础架构搜索默认 1.3M iterations,每 50k 保存VE 用 0.5M 后各 checkpoint FID 平均;VP 用 0.25M–0.5M 平均
连续与 deep论文 NCSN++ cont. 描述降为 0.95M;deep 配置 n_iters=950001当前非 deep NCSN++ cont. 配置仍继承 1300001,复现须明确覆盖
batchCIFAR128;LSUN64;CelebA-HQ1024为8采样 batch 另有1024和8,不与训练混同
FID50,000 生成样本,tensorflow_gan统计文件、Inception 版本与归一化也是协议的一部分
最终选模Table3 训练中最低 FID;Table2 最后 checkpoint同时报告 best 与 last,不能当成同一权重的性能权衡

连续损失默认 likelihood_weighting=False,意味着按论文的核方差加权。库里还实现了另一篇工作对应的 g² likelihood weighting,不能看到选项便归入本文所有结果。VE 默认 reduce_mean=False 使用半个维度求和,VP/sub-VP 配置 reduce_mean=True;把 sum 改为 mean 会改变数值尺度,需要连同优化设置记录。

JAX 原版依赖固定在 Flax0.3.1、JAX0.2.8、jaxlib0.1.59、TensorFlow2.4.0;PyTorch requirements 写 torch≥1.7.0 并仍依赖 TF 的数据与评估。README 的 4×V100 框架训练性能比较不是所有论文实验的实际硬件清单。本次只做静态阅读,不安装旧环境、不下载权重、不声称重现实测。

17 · 原 Table 2 完整数值与比较边界

下表所有方法行和两项指标保留。“—”是原文未报告,不能填零。除带星两行外,NLL 是均匀去量化 CIFAR 的 bits/dim。带星行是 Ho 等工作的离散 ELBO 上界,FID 也来自其原采样协议;本文模型行的 FID 则来自 black-box ODE 和最后 checkpoint。

原 Table 2 · CIFAR-10 NLL与FID,星号保留原协议区别

ModelNLL Test ↓ bits/dimFID ↓
RealNVP (Dinh et al., 2016)3.49—
iResNet (Behrmann et al., 2019)3.45—
Glow (Kingma & Dhariwal, 2018)3.35—
MintNet (Song et al., 2019b)3.32—
Residual Flow (Chen et al., 2019)3.2846.37
FFJORD (Grathwohl et al., 2018)3.40—
Flow++ (Ho et al., 2019)3.29—
DDPM (L), Ho et al.≤ 3.70*13.51
DDPM (Lsimple), Ho et al.≤ 3.75*3.17
DDPM, 本文ODE评价3.283.37
DDPM cont. (VP)3.213.69
DDPM cont. (sub-VP)3.053.56
DDPM++ cont. (VP)3.163.93
DDPM++ cont. (sub-VP)3.023.16
DDPM++ cont. (deep, VP)3.133.08
DDPM++ cont. (deep, sub-VP)2.992.92

最干净的内部比较是相同架构、同类训练与评估协议下换 SDE:基础 DDPM cont. 的 VP3.21→sub-VP3.05;DDPM++ cont. 的3.16→3.02;deep 的3.13→2.99。架构和 SDE 共同改善最终结果。原 H.2 段在讨论 DDPM++ 时提到3.21/3.05,但 Table2 明确把这一对标为基础 DDPM cont.;本页以完整表的行身份区分,DDPM++ 对应3.16/3.02。

Table2 中 VP DDPM++ cont. 虽 NLL3.16 好于基础 DDPM3.28,ODE FID3.93 却差于3.37。这直接说明 likelihood 与视觉质量不是同一个优化目标。2.99 的“最佳”限于论文当时、此去量化协议和列出的模型,不是今天的排行榜结论。

18 · 原 Table 3 与高清实验

原 Table 3 · CIFAR-10样本质量,本文模型采用训练中最佳FID权重

监督组ModelFID ↓IS ↑
ConditionalBigGAN (Brock et al., 2018)14.739.22
ConditionalStyleGAN2-ADA (Karras et al., 2020a)2.4210.14
UnconditionalStyleGAN2-ADA (Karras et al., 2020a)2.929.83
UnconditionalNCSN (Song & Ermon, 2019)25.328.87 ± .12
UnconditionalNCSNv2 (Song & Ermon, 2020)10.878.40 ± .07
UnconditionalDDPM (Ho et al., 2020)3.179.46 ± .11
UnconditionalDDPM++2.789.64
UnconditionalDDPM++ cont. (VP)2.559.58
UnconditionalDDPM++ cont. (sub-VP)2.619.56
UnconditionalDDPM++ cont. (deep, VP)2.419.68
UnconditionalDDPM++ cont. (deep, sub-VP)2.419.57
UnconditionalNCSN++2.459.73
UnconditionalNCSN++ cont. (VE)2.389.83
UnconditionalNCSN++ cont. (deep, VE)2.209.89

Table3 同时保留 conditional 与 unconditional 两组,以防把需要标签的比较混成无条件。NCSN++ deep 的2.20 FID优于表中 conditional StyleGAN2-ADA2.42,但其 IS9.89小于10.14,因此不能写成所有指标全面优于条件 GAN。相比 NCSN++2.45,continuous2.38,再到deep2.20;这里同时涉及训练目标、embedding、训练时长和容量变化,不能把全部提升归为单独的“连续时间”。

DDPM++ deep VP 和 sub-VP 都有2.41 FID,但 IS 分别9.68与9.57。最佳视觉结果来自 VE,最佳似然来自sub-VP,支持为具体任务选 SDE,而不是宣布某一个始终优越。Table3多数新结果没有给±,不补造置信区间;Table1的五次采样标准差也不能移植给Table3。

原Figure 11,NCSN++ continuous deep VE的无条件CIFAR样本,部分1
原 Figure 11 · NCSN++ continuous deep VE的无条件CIFAR样本 · Song et al., ICLR 2021 · 原PDF第27页 · 来源

1024² CelebA-HQ 使用修改版 NCSN++:continuous训练约2.4M步,batch8,EMA0.9999,Fourier scale16,input_skip 与 output_skip;PC采用2000时间步,每个predictor一次Langevin,r=0.15。与 CIFAR 基础 residual/none 架构不同。论文展示高保真人脸,同时承认面部对称性等可见缺陷,没有给这一分辨率的完整 FID、感知实验或GPU延迟表。

原Figure 12,修改版NCSN++的1024平方CelebA-HQ样本,部分1
原 Figure 12 · 修改版NCSN++的1024平方CelebA-HQ样本 · Song et al., ICLR 2021 · 原PDF第28页 · 来源

这些肖像是论文生成样本图,不用于身份推断。README 说明受发布政策影响,原 CelebA/CelebA-HQ 权重未公开,之后发布的是作者另行训练的 FFHQ1024、FFHQ256、CelebA-HQ256等。后续公开权重可帮助实践,但不是原 Figure12 checkpoint 的逐位复现证明。

19 · 分类器条件生成

Bayes 分解给出一个关键恒等式:

\[ \nabla_{\mathbf x}\log p_t(\mathbf x\mid y)=\nabla_{\mathbf x}\log p_t(\mathbf x) +\nabla_{\mathbf x}\log p_t(y\mid\mathbf x). \tag{原式49} \]

把右侧替换进反向 SDE 得到原式14/48。在条件分布趋近无条件终端先验时,可以从相同简单先验初始化;否则严格应从条件终端分布出发。分类器必须认识对应 t 的带噪样本,不能拿干净图片分类器梯度不加说明地套用全部时间段。

附录 I.1 在 CIFAR 上训练 Wide-ResNet-28-10,使用 VE 扰动,并以 log σ 的随机 Fourier 特征作为噪声条件;不同噪声层采样交叉熵训练。score model 使用 4-block NCSN++ 无条件模型,PC2000采样。原 Figure13 同时包含十类样本与分类准确率随噪声增大的曲线。分类梯度不需要重新训练 score 网络,但确实需要另一个有标签训练的 classifier;“所有条件生成完全无额外训练”不成立。

原Figure 4,CIFAR类别控制与LSUN补全、上色,部分1原Figure 4,CIFAR类别控制与LSUN补全、上色,部分2
原 Figure 4 · CIFAR类别控制与LSUN补全、上色 · Song et al., ICLR 2021 · 原PDF第9页 · 来源
原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分1原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分2原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分3原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分4原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分5原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分6原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分7原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分8原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分9原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分10原Figure 13,十类条件样本和噪声条件分类器准确率曲线,部分plot
原 Figure 13 · 十类条件样本和噪声条件分类器准确率曲线 · Song et al., ICLR 2021 · 原PDF第30页 · 来源

本文公式系数为1,没有把后来流行的 classifier-free guidance、空条件训练或大于1的 guidance scale 当成本文已验证结果。若人为放大梯度,一般改变目标分布,也可能牺牲多样性;这应作为后续实验设计,而非原文定理。

20 · 补全、上色和一般逆问题

补全观察某些像素 Ω,未知区域为其补集。VE/VP 的漂移逐坐标作用、扩散对角,允许给已知像素加入与时间匹配的噪声,把它和当前未知区域组合,再用无条件 score 更新未知部分。附录 I.2 的关键步骤是近似忽略“原始已知像素 y”在给定其带噪版本之后的额外影响,并以一次采样代替对所有带噪观测的积分。它是实用后验近似,不是任意 mask 都严格无偏的后验采样器。

实现每个 corrector/predictor 更新后,用条件核的带噪已知区域重新投影,mask=1表示已知、0表示待补。一直把已知区域固定成干净像素会与高噪声网络输入分布失配。最终希望满足观测约束,同时生成多种合理填补;Figure14/15 展示 bedroom/church 的扩展样本,没有定量 PSNR/后验校准表。

原Figure 14,LSUN bedroom扩展补全结果,部分1
原 Figure 14 · LSUN bedroom扩展补全结果 · Song et al., ICLR 2021 · 原PDF第33页 · 来源
原Figure 15,LSUN church扩展补全结果,部分1
原 Figure 15 · LSUN church扩展补全结果 · Song et al., ICLR 2021 · 原PDF第34页 · 来源

上色先做正交通道变换,第一通道承载等权 RGB 灰度方向,其余两通道作为未知部分补全,然后逆变换。原 I.3 的矩阵是精确正交基的三位小数展示;实现保留更多精度并计算逆矩阵。用行向量颜色的约定,可写:

\[ M= \begin{pmatrix} 1/\sqrt3&-\sqrt{2/3}&0\\ 1/\sqrt3&1/\sqrt6&1/\sqrt2\\ 1/\sqrt3&1/\sqrt6&-1/\sqrt2 \end{pmatrix},\qquad \mathbf c'=\mathbf cM,\quad M^{\mathsf T}M=\mathbf I. \]

正交变换保持各向同性 Wiener 噪声;第一通道是和为根号3归一化的灰度分量,不应直接当作带感知权重的任意 luminance 公式。变换方向若写成列向量就必须转置 M;代码 einsum 明确采用行向量输入乘 M。Figure16/17 保留不同颜色解,说明颜色本来不唯一。

原Figure 16,LSUN bedroom扩展上色结果,部分1
原 Figure 16 · LSUN bedroom扩展上色结果 · Song et al., ICLR 2021 · 原PDF第35页 · 来源
原Figure 17,LSUN church扩展上色结果,部分1
原 Figure 17 · LSUN church扩展上色结果 · Song et al., ICLR 2021 · 原PDF第36页 · 来源

一般逆问题令观测模型为 \(p(y\mid\mathbf x)\),需要当前噪声层的观测梯度,不只是干净空间的梯度。原 I.4 要求能采样可处理的 \(p(y_t\mid y)\),并近似 \(p_t(\mathbf x_t\mid y_t,y)\approx p_t(\mathbf x_t\mid y_t)\),再抽一个 \(\widehat y_t\) 代替积分:

\[ \nabla_{\mathbf x_t}\log p_t(\mathbf x_t\mid y) \approx\mathbf s_{\theta}(\mathbf x_t,t) +\nabla_{\mathbf x_t}\log p_t(\widehat y_t\mid\mathbf x_t). \tag{原式50的近似} \]

精确恒等式的条件 score 可以用于多种solver;然而这里的近似不保证一般非线性、噪声观测或严重病态问题仍精确。尤其 score of mixture 不是各分量 score 的简单无权平均。作者提供三个图像任务展示,未实测所有逆问题,也没有把未知 forward likelihood 自动学出来。

21 · 固定版本的实现审计

已固定并只读检查原 JAX 仓库 0acb9e0ea3b8cccd935068cd9c657318fbc6ce4c 与官方 PyTorch 版 cb1f359f4aadf0ff9a5e122fe8fffc9451fd6e44。38个源码/配置/说明文件分别保存哈希。以下是这两个快照的静态事实,不把当前主分支、历史实验与其他库实现混为一个版本。

核查点源码行为复现影响
SDE / ODE 开关sde_lib.reverse 将 score 系数设1或0.5;ODE diffusion置0不能仅关闭随机采样而保留SDE漂移
sub-VP 的 stdmarginal_prob 返回 1−exp(−B),不是其平方根它是标准差;再开方会把模型变成另一噪声核
负噪声映射VP/sub-VP get_score_fn 使用 −network/std;连续标签 t×999硬编码999是时间embedding约定,num_scales改动需审查
PC顺序采样循环先corrector后predictor;论文Algorithm1相反需指定实际离散变体,不宣称逐行相同
VP corrector αsde.alphas=1−discrete_betas,为单步量;另有alphas_cumprod论文前文α定义是累积量,Algorithm5未澄清换记号;不要擅自按一套替换另一套
sub-VP corrector路径LangevinCorrector接受subVPSDE类型,却读取其未定义的alphas属性静态可见的潜在属性错误;提供的sub-VP配置corrector=none避开此路径,本次未运行确认
NFE返回PC固定返回N×(n_steps+1),即使NoneCorrector不调用score这个计数可能高估实际forward次数;测速度应真实计数
末端去噪PC返回x_mean;ODE可加一次reverse-diffusion均值更新额外去噪forward不包含在solve_ivp的nfev内
ODE似然RK45、固定Hutchinson探针、先验logp加积分;默认Rademacher不是精确trace全维展开,也不是DDPM ELBO
数值保护范数比未显式给grad_norm加小常数;读取ODE最终状态,未见对solution.success的显式检查极端零范数或solver失败需要外层验证,不能默认为已处理
通用性PyTorch广播多处固定[:,None,None,None]适合四维图像张量,不能无改动推广任意图/序列维数
后续功能likelihood_weighting开关及Diffusers集成超出原实验主配置应注明使用后来的选项,不能覆盖v2历史事实

另外,JAX与PyTorch的bpd尺度补偿写法不同:JAX根据inverse_scaler导数加log₂项,PyTorch用7−inverse_scaler(−1)匹配受支持的identity/centered两种缩放。对这两种情形分别得到8或7,但后一写法不是任意非线性归一化的通用Jacobian公式。

源码中的配置名虽有DDPM++,实际类仍注册为 ncsnpp,由配置切换结构。README 明确 PyTorch 不含其JAX版预训练分类器条件生成功能;不能只切换框架就假定所有demo均可用。上述两个仓库为Apache-2.0,数据集、图片与权重的使用条件另需分别核查。

22 · 可执行前必须固定的实验清单

  1. 记录源码commit、配置展开后的全部字段、数据split和预处理;确认输入尺度、SDE参数、模型输出参数化三者一致
  2. 训练一次更新:抽t于ε到1、抽z、用marginal_prob构造图像、计算DSM、反传、warmup与clip、更新EMA;VE和VP的reduce方式分开记录
  3. 采样:写清P/C类型、N、M、r、ε、corrector与predictor顺序、是否输出均值、seed与batch;不把名义NFE当真实forward计数
  4. 样本质量评估:固定50k样本、相同统计文件与Inception实现、相同图像后处理;报告checkpoint选择方法、真实耗时和硬件
  5. likelihood评估:单独loader均匀去量化、正确尺度Jacobian、最后checkpoint、RK45容差、探针类型及重复次数、检查solver成功
  6. 条件生成:分类器噪声日程必须对齐;inpainting mask、灰度变换和投影时刻要明示;用观测残差和多样性补充视觉展示

建议最小数学单元测试(本页的独立验证脚本已执行,不调用学习模型):检验sub-VP方差不超过VP、协方差演化的差值恒等式、VE相邻方差可望远镜相加、M的正交性、标准正态在VP下的概率流速度为0,以及一维线性ODE的change-of-variables符号。它们能抓公式实现错误,不能证明神经模型训练、GPU环境或FID复现成功。

这次交付提供源码审计与数学/文档静态检查,没有运行训练和图像生成,也没有下载checkpoint或原始训练数据。用户要求的浏览器验收延后,因此MathJax实际渲染、外部图像的浏览器加载、导航点击和1440/760/390布局仍列为未运行。

23 · 对原笔记的追加纠正

原笔记完整保留在合并候选的起始字节段,不覆盖其推导或链接。以下以证据说明应如何重读:

原笔记易错处应采用的解释
固定t就有高斯分布,均值写成根号α条件于x₀才有已知高斯核;均值还需乘x₀,协方差是1−累计α,边缘通常是高斯混合
固定x₀就确定一条轨迹还需固定Brownian噪声实现;SDE仍有无穷多随机轨迹
VE转移噪声是相邻方差相加的根号必须是差:σᵢ²−σᵢ₋₁²,见原式8/20
Bayes/Taylor推导中梯度写成∇p,均值括号和协方差混杂目标是∇log p;原反向定理与本页负dt约定给出一致式,不沿用错误配方
反向离散式省略时间步与根号时间步一般Euler更新需要漂移乘h、噪声乘√h;单位步公式只在已吸收离散日程时才可用
VE和VP只差一个根号(1−累计αT)二者漂移、数据收缩、完整噪声日程和先验不同;score与噪声参数化的换算也含负号和随时间变化的标准差
只分VE与VP本文还提出sub-VP,且2.99bits/dim主要结果依赖它
未区分概率流ODE和反向SDEscore系数为1/2与1,随机性不同;近似网络时分布等价需重新限定

作者信息也需谨慎:Yang Song名字上的星号脚注表示部分工作在Google Brain实习期间完成,并非通讯作者标记。没有找到明确通讯标识,依既定规则保留末位Ben Poole为未核实候选。旧笔记BibTeX的2020是arXiv首发年份;正式引用可另附ICLR2021,不必删除用户原文。

24 · 严格评审视角

最有价值的证据。统一框架不是纯比喻:DDPM/SMLD的极限、反向漂移、概率流和密度积分都有推导;同一模型换sampler的Table1/4提供可分离采样贡献的实验;架构与连续训练又通过Table2/3展示与SDE选择的相互作用。附录给出足够实现细节,使“模型”和“数值求解器”真正成为可替换部件。

归因上的限制。最佳结果叠加架构、容量、损失、embedding、训练长度、EMA、采样器、r搜索与checkpoint选择,不能把2.20全部归给SDE数学表达。比较中NFE相同不代表壁钟和显存相同,深模型单次score成本也不同;Table4出现P2000胜PC的例外应被保留。所有视觉最佳权重选自训练中最低FID,可能存在选模乐观性。

理论上的限制。逆时定理要求真实边缘score与适当正则性;边缘等价不是路径等价;“可辨识”需固定前向过程;一般inverse-problem公式含近似条件独立和单样本积分。把这些前提省掉,会把一个强而精确的理论框架过度扩张为“任何神经场、任何观测都成立”。

实践上的限制。采样仍慢于GAN,这是作者结论明确承认的;高分辨率展示并未给完整基准;FP数值、ε、r、末端去噪与预处理明显影响结果;官方当前代码也有历史依赖、符号约定与可选分支风险。原始CelebA高分辨率checkpoint不可公开增加了逐项复现难度。

若补实验。用相同架构、同一checkpoint评估SDE与ODE的FID/NLL/成本,逐项控制训练策略;对ε与r做完整敏感性图;报告含末端去噪的真实NFE与显存;重复独立训练seed;逆问题增加观测一致性、后验覆盖与病态案例;给出原图分布、先验近似、score误差和离散误差的分离测试。以上均为本页评审建议,不冒充作者已做。

25 · 与程序化材质研究的具体联系

本文直接生成的是像素图像,未输出Substance节点、图拓扑、着色器程序或物理BRDF参数。因而它不能凭图像质量保证材质图可执行、可编辑、tileable或重光照一致。对用户的程序化材质方向,其价值首先是连续参数/纹理先验与条件推断的数学工具。

一个可研究的方向是在固定材质图的连续参数空间定义SDE,再用渲染观测约束生成。需先处理参数边界、尺度差异和多个参数组合的不可辨识性,学习该参数分布的score;渲染loss对干净参数的梯度不等于所有噪声时刻的真实条件likelihood梯度。把它插入反向过程是一种待验证近似,应测试在多光照图像、不同视角及观测噪声下的后验覆盖。

若扩散对象是SVBRDF贴图,需设计跨通道物理范围、法线约束与平铺边界;普通图像FID不足以评价反射率的物理真实性。对于离散节点类型和连接,本文的欧氏连续SDE不直接保证图合法,可以考虑“离散结构先验+连续参数score”分解,但图语法、渲染器和约束采样是新增研究,不是本论文已经提供的部件。

概率流编码可用于材质插值或候选检索,但固定图的latent平滑性不保证跨拓扑语义一致。更可检验的实验是:固定训练集与渲染协议,比较VE/VP/sub-VP在连续材质参数上的覆盖与似然,再比较P/C/ODE的观测误差、可编辑性、执行成功率和真实成本。这样继承本文“解耦噪声过程与sampler”的长处,而不借用不相关的图像纪录作材质效果证明。

26 · 来源、完整性与交付边界

本页的原表重建以固定PDF为准;正文中的推导、评审与研究延伸都单独标明性质。17张编号图全部保留:有可靠官方图片地址的优先使用外链,并保存下载副本用于Markdown;其余曲线/组合面板从原PDF裁切内嵌。链接已做HTTP与图像解码检查,不能替代浏览器实际显示验收。Figure13另保留分类准确率曲线,避免只留下样本图。

HTML与新增Markdown仅作为下载候选;merged-note-candidate 保留原笔记的精确字节前缀。原PDF、现有YAML、用户推导与全部旧链接不被修改;People、索引与vault归档仅有计划,未执行。8个通用公式验收样例放在单独fixture中,不混入论文论证。