Part V · 第 19 章 生成模型 · 19.6

扩散与 Score-based 模型

扩散模型的想法朴素得出奇:先把数据一点一点加噪,直到变成纯高斯噪声;再训练一个网络,在每个噪声水平上猜出“加进去的是哪份噪声”;生成时从纯噪声出发,一小步一小步把噪声去掉。训练只是许多噪声水平上的回归,稳定得像监督学习;采出的样本却能覆盖数据的每一个模式。本节先看清前向加噪的闭式解,以及去噪器、后验均值和 score 三者是同一个东西(Tweedie 公式);然后在浏览器里现场训练一个 DDPM,看它的损失下限和 EMA;比较 DDPM 与 DDIM、采样步数和噪声日程;看 classifier-free guidance 怎样用多样性换取对指令的服从;最后对整段动作轨迹去噪,这正是 Diffusion Policy 的引擎。

约 55 分钟 前置:19.1 VAE · 19.5 Energy-based 模型 · 4.4 高斯分布 · 18.2 自编码器(去噪与 score) 6 个交互

    1为什么机器人需要它

    让人示教一个机械臂去抓桌上的杯子。同一个画面下,示教者有时抓左边那只,有时抓右边那只;绕开障碍物时,有时从上面绕,有时从下面绕。示教数据里的动作分布是多模态的。用均方误差去回归动作(16.2 节),学到的是条件均值:两只杯子的中点,或者正好穿过障碍物的那条“平均路线”。机器人需要的不是平均,而是一个能从整个动作分布里采样的模型:每次给出一个具体、可行、属于某个模式的动作。

    前面几节的生成模型各有短板。VAE(19.1 节)的样本偏模糊;GAN(19.2 节)训练不稳,还会丢模式;normalizing flow(19.3 节)要求网络可逆,结构受限;自回归模型(19.4 节)要把连续动作切成 token;Energy-based 模型(19.5 节)训练和采样都要跑 MCMC。扩散模型把训练变成一个普通的回归问题,把生成变成很多步“去一点噪声”,既稳定又能覆盖所有模式,还能直接扩展到高维:几百万像素的图像,或者 16 步 × 7 维的一整段机械臂动作。

    今天的图像、视频生成模型大多是扩散模型或它的近亲;在机器人里,Diffusion Policy(Chi 等,2023)用它生成动作序列,Diffuser(Janner 等,2022)用它生成整条轨迹。本节讲这台“引擎”本身:前向过程、score、训练目标、采样器、噪声日程和引导;22.2 节再讲怎样把它装进策略里。

    2直觉:把数据磨成噪声,再学着走回来

    本节的数据是示教者让夹爪去的位置 \((x,y)\),已经归一化到大约单位尺度(第 7 节会说为什么必须归一化)。默认的数据集是“4 个杯子”:四个位置被选中的频率分别是 40%、30%、20%、10%,每个位置周围有一点散布 \(\sigma_{\mathrm d}=0.16\)。另外两个数据集是“圆形盖沿”(沿一圈的 8 个抓取点)和“两条弧形把手”。它们都是高斯混合,所以下面每一个 score、每一个后验都能精确算出来,网络学得好不好也能和真值比。

    前向过程每一步都把点往原点缩一点,再加一点高斯噪声:\(\mathbf x_t=\sqrt{1-\beta_t}\,\mathbf x_{t-1}+\sqrt{\beta_t}\,\boldsymbol\varepsilon\)。缩一点是为了让总方差保持在 1 附近,不让噪声越加越大。高斯加高斯还是高斯(4.4 节),所以走了 \(t\) 步之后有一个闭式:\(\mathbf x_t=\sqrt{\bar\alpha_t}\,\mathbf x_0+\sqrt{1-\bar\alpha_t}\,\boldsymbol\varepsilon\),其中 \(\bar\alpha_t\) 从 1 单调降到几乎 0。不需要真的一步步模拟,任何 \(t\) 都能一步跳到。拖动下面的 \(t\),看四个杯子怎样被“磨”成一团标准高斯。

    时间方向的约定:本节沿用 DDPM 的写法,\(t\) 数的是加噪的步数:\(t=0\) 是数据 \(\mathbf x_0\),\(t=T=100\) 几乎是纯噪声,生成时 \(t\) 从 \(T\) 倒着走回 0。19.7 节的 flow matching 用的是相反的约定(flow matching 文献和 π0 都这样写):\(t\in[0,1]\),\(t=0\) 是噪声,\(t=1\) 是数据,那里的 \(\mathbf x_0\) 是噪声(本节的 \(\boldsymbol\varepsilon\),约等于 \(\mathbf x_T\)),\(\mathbf x_1\) 才是数据(本节的 \(\mathbf x_0\));两边的时间大致对应为 \(t_{19.7}\approx1-t/T\)。

    FIG 1前向过程:信号缩小,噪声长大,模式合并
    左:700 个数据点在第 \(t\) 步的样子(琥珀点,每个点的噪声 \(\boldsymbol\varepsilon\) 固定,所以拖动 \(t\) 时它们连续地移动),背后的青色是精确的密度 \(p_t\)(越青越密),绿圈是 \(p_t\) 的峰(从每个分量的中心出发做 mean-shift 找到)。虚线圆是 \(\mathcal N(0,I)\) 的 1σ 和 2σ。右:信号系数 \(\sqrt{\bar\alpha_t}\)(蓝)和噪声系数 \(\sqrt{1-\bar\alpha_t}\)(红)随 \(t\) 的变化;实线是当前选中的日程,虚线是另一种,琥珀竖线是当前的 \(t\)。两者的平方和永远是 1。
    试一试
    • 用“4 个杯子”和余弦日程,把 \(t\) 往大拖,直到 \(p_t\) 只剩一个峰(\(t=46\) 起)。四个峰不是一下子合并的:\(t=32\) 时剩 3 个,\(t=36\) 时剩 2 个。从这里开始,单看 \(\mathbf x_t\) 已经很难说它来自哪个杯子。
    • 换成线性日程,找到 \(\bar\alpha_t\) 第一次低于 1% 的那一步(\(t=67\);任意数据集,\(t\le75\) 即可)。余弦日程要到 \(t=94\) 才低于 1%:线性日程把最后三分之一的步数都花在了几乎纯噪声上,峰也早在 \(t=24\) 就合并了。

    走回来:去噪器就是后验均值,它指向 score

    要倒着走,就得回答:看到一个带噪声的点 \(\mathbf x_t\),它原来最可能在哪?按平方误差算,最好的猜测是后验均值 \(\hat{\mathbf x}_0=\mathbb E[\mathbf x_0\mid\mathbf x_t]\)(最小均方误差估计,即 MMSE;后验见 4.6 节)。18.2 节已经给出了 Tweedie 公式:对高斯破坏,后验均值等于“输入加上噪声方差乘 score”。换成这里的缩放记号是 \(\sqrt{\bar\alpha_t}\,\hat{\mathbf x}_0=\mathbf x_t+(1-\bar\alpha_t)\nabla\log p_t(\mathbf x_t)\)。所以“学会去噪”和“学会 score \(\nabla\log p_t\)”是同一件事,score 就是从 \(\mathbf x_t\) 指向(缩放后的)最佳去噪猜测的方向。

    下图把这件事画出来。注意后验 \(p(\mathbf x_0\mid\mathbf x_t)\) 本身是多模态的:噪声大时,一个点可能来自好几个杯子,后验均值就落在杯子之间的空地上,那里根本没有数据。这就是为什么扩散模型不能一步生成:一步去噪只能给出平均,必须走很多小步,每一步只需要局部的方向,后验在这一路上逐渐“下决心”。

    FIG 2去噪器 = 后验均值:噪声大时它落在模式之间
    拖动琥珀色的 \(\mathbf x_t\)。虚线圆是四个杯子(半径 \(2\sigma_{\mathrm d}\),旁边是被选中的频率)。紫点是从精确后验 \(p(\mathbf x_0\mid\mathbf x_t)\) 抽的 90 个样本,绿圈 \(\hat{\mathbf x}_0\) 是它们的均值,也就是最优去噪器的输出。琥珀箭头是 \((1-\bar\alpha_t)\nabla\log p_t(\mathbf x_t)\):它恰好从 \(\mathbf x_t\) 指到 \(\sqrt{\bar\alpha_t}\,\hat{\mathbf x}_0\),绿色虚线再把这一点放大 \(1/\sqrt{\bar\alpha_t}\) 倍到 \(\hat{\mathbf x}_0\)。青色小箭头是整个平面上 \(p_t\) 的 score 方向(只画方向)。读数里的距离以 \(\sigma_{\mathrm d}=0.16\) 为单位。
    • 把 \(t\) 调到 60 或以上,把 \(\mathbf x_t\) 拖到杯子 1 和杯子 2 中间偏下的位置(比如 (0, 0.47)):至少两个杯子各占 20% 以上的后验,紫点分成几团,而 \(\hat{\mathbf x}_0\) 离每个杯子都超过 \(3\sigma_{\mathrm d}\)(在 (0, 0.47)、\(t=60\) 时约为 6σ)。最优去噪器给出的是一个“不存在的位置”。
    • 把 \(t\) 降到 20 或以下,再把 \(\mathbf x_t\) 拖到某个杯子附近:这个杯子拿到 95% 以上的后验,\(\hat{\mathbf x}_0\) 落在它的 \(3\sigma_{\mathrm d}\) 之内。噪声小时,后验已经“下了决心”。
    核心洞见

    扩散模型把“生成一个多模态分布的样本”这件难事,拆成了很多件容易的事:在每个噪声水平上做一次回归(预测噪声,等价于预测后验均值,等价于 score)。每一次回归的答案都是平均,平均本身会落在模式之间;但从高噪声走到低噪声,每一步只往平均的方向挪一小步,再加一点新的随机性,后验就越来越尖,最后落在某一个模式上。均方误差回归之所以“取平均”,扩散模型之所以“不取平均”,区别只在于是一步走完还是很多步走完。

    3动手:现场训练一个 DDPM

    现在不再用精确的 score,而是让网络去学。DDPM(Ho 等,2020)的训练循环只有四行:从数据里取一个 \(\mathbf x_0\),均匀地抽一个噪声步 \(t\in\{1,\dots,T\}\),抽一份噪声 \(\boldsymbol\varepsilon\sim\mathcal N(0,I)\),按闭式算出 \(\mathbf x_t\),然后让网络 \(\boldsymbol\varepsilon_\theta(\mathbf x_t,t)\) 回归 \(\boldsymbol\varepsilon\),损失是均方误差。这里 \(T=100\),网络是一个 9 → 64 → 64 → 2 的 ReLU MLP(4930 个参数):输入是 \(\mathbf x_t\) 的两个坐标加上 7 个时间特征(\(\pi t/T\)、\(2\pi t/T\)、\(4\pi t/T\) 的正弦和余弦,以及一个线性斜坡),输出是预测的噪声。优化器是 Adam,学习率 \(2\times10^{-3}\),批量 64(6.3 节)。

    生成时用第 4 节要讲的 DDPM 采样器,在 100 个训练噪声水平里等间隔取 50 个,从 300 个纯噪声点出发往回走。为了让你看到训练过程,每一批样本都从当时权重的一份快照开始采样,采完立刻开始下一批。还有两处细节:EMA(指数滑动平均)权重 \(\bar\theta\leftarrow\bar\theta+0.01(\theta-\bar\theta)\),几乎所有扩散模型都用它来采样;损失下限:即使用精确的最优去噪器,损失也不会是 0(第 5 节解释),图里绿色虚线就是精确 \(\boldsymbol\varepsilon^\star\) 在同一个测试集上的损失。

    FIG 3现场训练 DDPM:样本、测试损失与各模式的份额
    左:灰点是训练数据,琥珀点是最近一批 300 个模型样本(训练开始前那一批来自随机初始化的网络,是一团乱麻)。右上:EMA 网络在 512 个固定的 \((\mathbf x_0,t,\boldsymbol\varepsilon)\) 测试三元组上的损失(每个坐标的均方误差,所以永远预测 0 的得分是 1;对数轴,每 50 步测一次),绿色虚线是精确 \(\boldsymbol\varepsilon^\star\) 的下限。右下:每个模式(杯子、盖沿上的点、把手)的份额,灰框是数据里的真实份额,琥珀柱是样本里的份额(只算落在数据上的样本,即离某个分量中心不到 \(3\sigma_{\mathrm d}\) 的样本;完美的采样器约有 99% 落在数据上)。TV 是两组份额之差的总变差距离。每帧最多训练 6 步,训练占用每帧不超过约 5 ms;图离开屏幕时自动暂停。
    • 用“4 个杯子”、EMA 权重,按“训练”:大约 1200 到 1800 步后(取决于种子),一批样本里 90% 以上落在数据上,四个杯子的份额与 40/30/20/10 的 TV 小于 0.08。连只占 10% 的杯子 4 也分到了它的一份:没有丢模式。
    • 训练到 2000 步以上后切到“原始权重”并继续训练:每批样本的份额明显地上下跳动,几批之内 TV 就会超过 0.1(第 2000 步之后约有 10% 到 45% 的批次如此,取决于种子);用 EMA 权重时,同一阶段几乎没有一批超过 0.1。
    有意思的细节

    (1) 测试损失从约 1.35(种子 1)很快降到 0.35(500 步),再慢慢爬向下限 0.295:1500 步时约 0.31。它永远到不了 0,因为同一个 \(\mathbf x_t\) 可能来自许多不同的 \((\mathbf x_0,\boldsymbol\varepsilon)\),噪声猜不准是本性。 (2) 损失接近下限不等于样本好。换成“两条弧形把手”训练 4000 步:测试损失只比下限高约 6%(0.374 对 0.354),却还有约五分之一的样本落在把手之外。细长的结构要求网络在噪声很小的那些步上非常精确,而这些步在平均损失里只占很小的权重。 (3) 原始权重在每一步都被一小批数据推来推去,各个模式之间的“分账”会随之抖动;EMA 把最近约 100 步的权重平均起来,样本的份额就稳了。

    4另外两个视角:采样器与引导

    采样器、步数与噪声日程

    有了 \(\boldsymbol\varepsilon_\theta\),怎样从 \(\mathbf x_T\sim\mathcal N(0,I)\) 走回 \(\mathbf x_0\)?每一步都先用网络猜出 \(\hat{\mathbf x}_0=(\mathbf x_t-\sqrt{1-\bar\alpha_t}\,\boldsymbol\varepsilon_\theta)/\sqrt{\bar\alpha_t}\),然后决定下一个点 \(\mathbf x_s\)(\(s<t\))放在哪里。DDPM(祖先采样)把 \(\mathbf x_s\) 从“已知 \(\mathbf x_t\) 和 \(\hat{\mathbf x}_0\) 时 \(\mathbf x_s\) 的高斯后验”里抽出来,每步都加新的噪声;DDIM(Song 等,2021)取同一族里噪声为零的那个成员:\(\mathbf x_s=\sqrt{\bar\alpha_s}\,\hat{\mathbf x}_0+\sqrt{1-\bar\alpha_s}\,\boldsymbol\varepsilon_\theta\),是确定性的。两者用同一个训练好的网络,都可以跳着走:只访问 \(T\) 个训练噪声水平中的 \(N\) 个。网络调用次数就是 \(N\),这是推理耗时的主要来源。

    为了把“采样器”和“网络学得好不好”分开,下图用精确的 \(\boldsymbol\varepsilon^\star\) 代替网络:所有误差都来自采样器本身的离散化。

    FIG 4DDPM 与 DDIM:步数越少,样本越往“平均”里缩
    左:600 个粒子从 \(\mathcal N(0,I)\) 出发的反向过程(按“采样”播放),琥珀点是当前位置,紫线是其中 8 个粒子走过的路,灰点是数据。右:所选日程的 \(\bar\alpha_t\)(蓝),琥珀刻度是采样器实际访问的时刻 \(\tau_N=T>\dots>\tau_1>\tau_0=0\)(步数不超过 20 时还在曲线上标出圆点)。“同一个 \(\mathbf x_T\) 再采一次”保留起点、只换每一步新加的噪声,并报告与上一次结果相比单个粒子的最大位移。“样本散布”是样本到它们自己均值的均方根距离(真实数据约 1.31)。
    • 用 DDPM、“4 个杯子”、余弦日程,把步数从 100 逐步减到 5(落在数据上的比例从 99% 降到约 92%,丢掉的样本卡在杯子之间),再减到 1:所有 600 个样本落在同一个点上,即数据的均值 (−0.19, 0.29),一个都不在杯子里。一步去噪就是 FIG 2 的后验均值。
    • 分别在 DDPM 和 DDIM 下各按一次“同一个 x_T 再采一次”:DDPM 的粒子会跳到别处(最大位移约 3,常常换了杯子),DDIM 的结果一模一样(位移 0)。DDIM 把每个起点 \(\mathbf x_T\) 确定地映射到一个样本。

    几个数字(600 个粒子,默认噪声):“4 个杯子”上,余弦日程的 DDPM 在 10 步时还有 98% 的样本落在数据上,5 步 92%,2 步只剩 34%;DDIM 在 5 步时是 93%,10 步 99%。在这个二维的小例子里两者差别不大;在图像上,DDIM 的少步数优势更明显。日程的影响在“圆形盖沿”上最清楚:DDPM 5 步,余弦日程 78%,线性日程只有 32%;10 步时是 94% 对 80%。线性日程把大量步数花在 \(\bar\alpha_t\approx0\) 的纯噪声区(FIG 1),步数一少,真正决定形状的中低噪声段就分不到几步了。

    条件生成与 classifier-free guidance

    机器人要的通常是条件分布:给定指令 \(c\)(“拿马克杯”还是“拿碗”)或者给定观测,生成动作。最直接的做法是把 \(c\) 也输进去,训练 \(\boldsymbol\varepsilon_\theta(\mathbf x_t,t,c)\)。实际中这样学到的条件模型常常“不够听话”:一部分样本无视条件。Classifier-free guidance(Ho 与 Salimans,2021)的办法是:训练时以一定概率(常见 10% 到 20%)把 \(c\) 换成“空条件”\(\varnothing\),于是同一个网络既是条件模型也是无条件模型;采样时把两者外推:

    $$ \tilde{\boldsymbol\varepsilon}=\boldsymbol\varepsilon_\theta(\mathbf x_t,t,\varnothing)+w\,\big(\boldsymbol\varepsilon_\theta(\mathbf x_t,t,\hl{cond}{c})-\boldsymbol\varepsilon_\theta(\mathbf x_t,t,\varnothing)\big) $$

    \(w=0\) 是无条件模型,\(w=1\) 是条件模型本身,\(w>1\) 是“比条件模型更条件”。下图沿用“4 个杯子”的数据,但把四个物体分成两类:1 号和 4 号是马克杯(紫),2 号和 3 号是碗(绿)。条件模型是精确的,但故意做成“漏标”的:它以权重 \(\lambda\) 忽略指令,即 \(p_\theta(\mathbf x\mid c)=(1-\lambda)\,p(\mathbf x\mid c)+\lambda\,p(\mathbf x)\),模拟一个没学好条件的网络。

    FIG 5Classifier-free guidance:更听话,但更单一
    600 个样本(琥珀),DDPM 50 步,余弦日程,每次改动都用同一组噪声重新采样。实线圆是当前指令要的那一类物体,虚线圆是另一类;圆的半径是 \(3\sigma_{\mathrm d}\),紫色是马克杯,绿色是碗。读数给出符合指令的样本比例,以及这一类里较少被选的那个物体(马克杯:4 号,在数据里占这一类的 20%;碗:3 号,占 40%)分到的份额。
    • 保持漏标 \(\lambda\) 不低于 0.4(默认 0.4)。\(w=1\) 时只有约 78%(马克杯)或 82%(碗)的样本听话;把 \(w\) 加大到 4 以内,让 97% 以上的样本落在指令要的物体上(\(w=2.5\) 时约 98%)。
    • 指令选“拿马克杯”,把 \(w\) 一路加到 6 以上(比如 8):所有样本都听话了,但较少的 4 号马克杯的份额从数据里的 20% 掉到 8% 以下(\(w=8\) 时约 6%)。引导把样本推向“最不像碗”的地方,代价是多样性。
    一个想法,几种看法

    层级 VAE:前向过程是一个固定的、没有参数的“编码器”,把 \(\mathbf x_0\) 编码成 \(T\) 层隐变量 \(\mathbf x_1,\dots,\mathbf x_T\),解码器就是反向过程;训练目标是 ELBO,展开后正是加权的噪声回归(第 5 节;这就是 19.1 节说的“层数很多、编码器固定的 VAE”)。 Score 与能量:网络学的是 \(\nabla\log p_t\),也就是能量 \(-E\) 的梯度;配分函数在求梯度时消失了,所以不需要像 19.5 节那样对付它,采样就是一串带退火的 Langevin 式更新。 随机微分方程:\(T\to\infty\) 时前向过程是一个 SDE,反向过程是另一个 SDE,DDIM 是与它们同边缘分布的常微分方程(概率流 ODE)的离散化,这条路通向 19.7 节的 flow matching。 去噪:每一步就是一次 18.2 节的去噪自编码器,只是噪声水平由 \(t\) 告诉网络。

    5再看数学

    提示:把鼠标悬停在公式中带底色的符号上,图中对应的元素会被加粗:\(\bar\alpha_t\) 加粗 FIG 1 的信号曲线,score 加粗 FIG 2 的箭头,\(\hat{\mathbf x}_0\) 放大 FIG 2 的绿圈,后验放大 FIG 2 的紫点,损失下限加粗 FIG 3 的绿色虚线,条件 \(c\) 加粗 FIG 5 里被要求的那一类物体的圆,平均动作加粗 FIG 6 的琥珀虚线。

    前向过程与它的闭式

    给定方差日程 \(\beta_1,\dots,\beta_T\in(0,1)\),令 \(\alpha_t=1-\beta_t\)、\(\bar\alpha_t=\prod_{s=1}^t\alpha_s\)。前向过程是一条马尔可夫链:

    $$ q(\mathbf x_t\mid\mathbf x_{t-1})=\mathcal N\big(\sqrt{\alpha_t}\,\mathbf x_{t-1},\ \beta_tI\big)\qquad\Longrightarrow\qquad q(\mathbf x_t\mid\mathbf x_0)=\mathcal N\big(\sqrt{\hl{ab}{\bar\alpha_t}}\,\mathbf x_0,\ (1-\hl{ab}{\bar\alpha_t})I\big) $$

    用归纳法:若 \(\mathbf x_{t-1}=\sqrt{\bar\alpha_{t-1}}\mathbf x_0+\sqrt{1-\bar\alpha_{t-1}}\,\boldsymbol\varepsilon'\),则 \(\mathbf x_t=\sqrt{\alpha_t\bar\alpha_{t-1}}\,\mathbf x_0+\sqrt{\alpha_t(1-\bar\alpha_{t-1})}\,\boldsymbol\varepsilon'+\sqrt{\beta_t}\,\boldsymbol\varepsilon''\)。两份独立高斯噪声之和仍是高斯(4.4 节),方差相加:\(\alpha_t-\alpha_t\bar\alpha_{t-1}+1-\alpha_t=1-\bar\alpha_t\)。所以 \(\mathbf x_t=\sqrt{\bar\alpha_t}\,\mathbf x_0+\sqrt{1-\bar\alpha_t}\,\boldsymbol\varepsilon\),\(\boldsymbol\varepsilon\sim\mathcal N(0,I)\)。如果 \(\mathbf x_0\) 的协方差是 \(I\),那么每个 \(\mathbf x_t\) 的协方差也是 \(I\),这就是“方差保持”(variance preserving)的含义。\(\bar\alpha_T\approx0\) 时 \(q(\mathbf x_T\mid\mathbf x_0)\approx\mathcal N(0,I)\),与 \(\mathbf x_0\) 无关,所以生成可以从标准高斯开始。本页的余弦日程有 \(\bar\alpha_T\approx2.4\times10^{-7}\),线性日程 \(\approx2.0\times10^{-5}\)。

    反向过程与 ELBO:为什么是预测噪声

    真正的反向条件 \(q(\mathbf x_{t-1}\mid\mathbf x_t)\) 依赖整个数据分布,算不出来;但多给一个 \(\mathbf x_0\),用贝叶斯公式和高斯的乘积(4.4 节)就得到闭式:

    $$ q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)=\mathcal N\big(\tilde{\boldsymbol\mu}_t,\tilde\beta_tI\big),\qquad \tilde\beta_t=\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\,\beta_t $$ $$ \tilde{\boldsymbol\mu}_t=\frac{\sqrt{\bar\alpha_{t-1}}\,\beta_t}{1-\bar\alpha_t}\,\mathbf x_0+\frac{\sqrt{\alpha_t}\,(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}\,\mathbf x_t $$

    模型取同样的形式 \(p_\theta(\mathbf x_{t-1}\mid\mathbf x_t)=\mathcal N(\boldsymbol\mu_\theta(\mathbf x_t,t),\sigma_t^2I)\)。把 \(\mathbf x_0=(\mathbf x_t-\sqrt{1-\bar\alpha_t}\,\boldsymbol\varepsilon)/\sqrt{\bar\alpha_t}\) 代进去,\(\tilde{\boldsymbol\mu}_t=\frac{1}{\sqrt{\alpha_t}}\big(\mathbf x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\boldsymbol\varepsilon\big)\);于是让网络预测 \(\boldsymbol\varepsilon\),再用同一个式子算 \(\boldsymbol\mu_\theta\)。和 19.1 节一样写出负对数似然的变分上界(ELBO 取负),它分解成每一步的 KL 散度(第一行)。两个高斯之间的 KL 只与均值差的平方有关(方差固定时),代入上面的参数化就是第二行(\(C_t\) 与 \(\theta\) 无关):

    $$ -\log p_\theta(\mathbf x_0)\le\mathbb E_q\Big[\sum_{t\ge2}\mathrm{KL}\big(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\,\|\,p_\theta(\mathbf x_{t-1}\mid\mathbf x_t)\big)\Big]+C $$ $$ \mathrm{KL}\big(q(\mathbf x_{t-1}\mid\mathbf x_t,\mathbf x_0)\,\|\,p_\theta(\mathbf x_{t-1}\mid\mathbf x_t)\big)=\frac{\beta_t^2}{2\sigma_t^2\alpha_t(1-\bar\alpha_t)}\,\big\|\boldsymbol\varepsilon-\boldsymbol\varepsilon_\theta(\mathbf x_t,t)\big\|^2+C_t $$ $$ L_{\boldsymbol\varepsilon}=\mathbb E_{\mathbf x_0,t,\boldsymbol\varepsilon}\big\|\boldsymbol\varepsilon-\boldsymbol\varepsilon_\theta\big(\sqrt{\bar\alpha_t}\mathbf x_0+\sqrt{1-\bar\alpha_t}\,\boldsymbol\varepsilon,\ t\big)\big\|^2 $$

    (\(C\) 里包括与 \(\theta\) 无关的 \(\mathbf x_T\) 项;\(t=1\) 的重建项另算。)Ho 等发现把每一步的权重全扔掉、只用第三行的 \(L_{\boldsymbol\varepsilon}\)(他们称为 “simple” 损失),样本反而更好:它相对地加重了噪声大的那些步。FIG 3 训练的就是 \(L_{\boldsymbol\varepsilon}\)(除以维数 2)。

    Score 视角:去噪 score matching 与损失下限

    \(q(\mathbf x_t\mid\mathbf x_0)\) 是高斯,它的 score 是 \(\nabla_{\mathbf x_t}\log q(\mathbf x_t\mid\mathbf x_0)=-(\mathbf x_t-\sqrt{\bar\alpha_t}\mathbf x_0)/(1-\bar\alpha_t)=-\boldsymbol\varepsilon/\sqrt{1-\bar\alpha_t}\)。Vincent(2011)证明:对 \(\mathbf x_0\) 和噪声取期望,回归这个“条件 score”与回归边缘密度的 score \(\nabla\log p_t\) 只差一个与网络无关的常数(去噪 score matching;直接的 score matching 是 Hyvärinen 2005 的想法)。所以预测噪声就是预测 score,只差一个尺度:

    $$ \boldsymbol\varepsilon^\star(\mathbf x_t,t)=\mathbb E[\boldsymbol\varepsilon\mid\mathbf x_t]=-\sqrt{1-\bar\alpha_t}\;\hl{score}{\nabla\log p_t(\mathbf x_t)} $$ $$ \hl{x0hat}{\hat{\mathbf x}_0}=\mathbb E[\mathbf x_0\mid\mathbf x_t]=\frac{\mathbf x_t+(1-\bar\alpha_t)\,\hl{score}{\nabla\log p_t(\mathbf x_t)}}{\sqrt{\bar\alpha_t}} $$

    第一式:平方误差的最优解是条件均值;第二式是 Tweedie 公式,取 \(\mathbf x_t=\sqrt{\bar\alpha_t}\mathbf x_0+\sqrt{1-\bar\alpha_t}\boldsymbol\varepsilon\) 的条件期望即可从第一式得到。对高斯混合,后验 \(\hl{post}{p(\mathbf x_0\mid\mathbf x_t)}\) 是另一个高斯混合,每个分量的权重 \(r_k(\mathbf x_t)\) 就是 FIG 2 读数里的“后验 p(杯子 k | x_t)”,所以页面里的一切都是精确算出来的。

    最优网络的损失是 \(\hl{floor}{L^\star=\mathbb E_t\,\mathbb E_{\mathbf x_t}\operatorname{tr}\operatorname{Cov}[\boldsymbol\varepsilon\mid\mathbf x_t]}\):只要从 \(\mathbf x_t\) 推不出唯一的 \(\boldsymbol\varepsilon\),它就大于 0。\(t\) 很小时,\(\mathbf x_t\approx\mathbf x_0\),噪声几乎完全不可辨识,那一步的损失接近 1(每个坐标);\(t\) 很大时,\(\mathbf x_t\approx\boldsymbol\varepsilon\),损失接近 0。FIG 3 的“4 个杯子”上平均起来约 0.295。所以:损失曲线能告诉你网络离最优还有多远,却不能直接和别的数据集、别的日程比较;它也不衡量样本质量。

    采样:DDPM 与 DDIM

    采样器访问时刻 \(T=\tau_N>\dots>\tau_0=0\)。从 \(t=\tau_i\) 到 \(s=\tau_{i-1}\):先算 \(\hat{\mathbf x}_0=(\mathbf x_t-\sqrt{1-\bar\alpha_t}\,\boldsymbol\varepsilon_\theta)/\sqrt{\bar\alpha_t}\),再

    $$ \mathbf x_s^{\mathrm{DDPM}}=\frac{\sqrt{\bar\alpha_s}\,\beta_{t|s}}{1-\bar\alpha_t}\,\hat{\mathbf x}_0+\frac{\sqrt{\alpha_{t|s}}\,(1-\bar\alpha_s)}{1-\bar\alpha_t}\,\mathbf x_t+\sqrt{\frac{1-\bar\alpha_s}{1-\bar\alpha_t}\,\beta_{t|s}}\;\mathbf z $$ $$ \alpha_{t|s}=\frac{\bar\alpha_t}{\bar\alpha_s},\qquad \beta_{t|s}=1-\alpha_{t|s},\qquad \mathbf z\sim\mathcal N(0,I) $$ $$ \mathbf x_s^{\mathrm{DDIM}}=\sqrt{\bar\alpha_s}\,\hat{\mathbf x}_0+\sqrt{1-\bar\alpha_s}\;\boldsymbol\varepsilon_\theta(\mathbf x_t,t) $$

    DDPM 一行就是上面的后验 \(q(\mathbf x_s\mid\mathbf x_t,\hat{\mathbf x}_0)\),相邻一步(\(s=t-1\))时它退化为 Ho 等的原始更新 \(\mathbf x_{t-1}=\frac{1}{\sqrt{\alpha_t}}\big(\mathbf x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\boldsymbol\varepsilon_\theta\big)+\sigma_t\mathbf z\),\(\sigma_t^2=\tilde\beta_t\)。DDIM 那一行把“当前猜的数据”和“当前猜的噪声”按 \(s\) 时刻的比例重新组合,不加新噪声。Song 等证明,DDIM 和 DDPM 对应的是同一个训练目标(所以可以共用一个网络),区别只在反向过程里注入多少新噪声。注意 \(N=1\) 时两者都输出 \(\hat{\mathbf x}_0(\mathbf x_T)\approx\mathbb E[\mathbf x_0]\):这就是 FIG 4 里“所有样本落在数据均值上”。

    连续时间:SDE、概率流 ODE 与 Langevin

    让步数趋于无穷、每步的 \(\beta\) 趋于 0(\(\beta_t\approx\beta(t)\,\mathrm dt\)),前向过程变成一个随机微分方程(Song 等,ICLR 2021,“方差保持” SDE)。Anderson(1982)给出了它的时间反演,Song 等还指出存在一个与它每个时刻边缘分布都相同的确定性 ODE。下面三行依次是前向 SDE、反向 SDE 和这个“概率流 ODE”:

    $$ \mathrm d\mathbf x=-\tfrac12\beta(t)\,\mathbf x\,\mathrm dt+\sqrt{\beta(t)}\,\mathrm d\mathbf w $$ $$ \mathrm d\mathbf x=\big[-\tfrac12\beta(t)\,\mathbf x-\beta(t)\,\hl{score}{\nabla\log p_t(\mathbf x)}\big]\mathrm dt+\sqrt{\beta(t)}\,\mathrm d\bar{\mathbf w} $$ $$ \frac{\mathrm d\mathbf x}{\mathrm dt}=-\tfrac12\beta(t)\big[\mathbf x+\hl{score}{\nabla\log p_t(\mathbf x)}\big] $$

    反向 SDE 里时间倒着走(从 \(t=T\) 到 0),\(\bar{\mathbf w}\) 是反向的布朗运动。DDPM 是反向 SDE 的一种离散化,DDIM 是概率流 ODE 的一种离散化(所以它是确定性的,也是可逆的:从数据可以积分回到对应的 \(\mathbf x_T\))。把 ODE 看成一个随时间变化的向量场(3.6 节),用更好的积分器(2.5 节)就能用更少的步数采样;直接去学这个向量场,就是 19.7 节的 flow matching(它把时间反过来,从噪声 \(t=0\) 积分到数据 \(t=1\),见第 2 节的约定)。另一条历史线索来自 Langevin 动力学:\(\mathbf x\leftarrow\mathbf x+\eta\nabla\log p(\mathbf x)+\sqrt{2\eta}\,\mathbf z\) 在步长足够小、步数足够多时从 \(p\) 采样(19.5 节)。但在数据稀疏的地方 score 学不准,Langevin 也走不动;Song 与 Ermon(2019)的 NCSN 用一串从大到小的噪声水平做“退火”Langevin:大噪声下的 score 在全空间都有定义,把样本先带到数据附近,小噪声再雕出细节。DDPM 和 NCSN 后来被统一为同一个 SDE 框架的两个特例。

    噪声日程与信噪比

    日程最好用信噪比 \(\mathrm{SNR}(t)=\bar\alpha_t/(1-\bar\alpha_t)\) 来理解:它从无穷大单调降到几乎 0,日程决定的是在每个 SNR 区间里花多少步。Ho 等的线性日程是 \(T=1000\) 时 \(\beta\) 从 \(10^{-4}\) 线性增到 0.02;本页 \(T=100\),按 Nichol 与 Dhariwal 的做法把端点乘以 \(1000/T\),即从 0.001 到 0.2。他们提出的余弦日程是 \(\bar\alpha_t=f(t)/f(0)\),\(f(t)=\cos^2\!\big(\frac{t/T+s}{1+s}\cdot\frac\pi2\big)\),\(s=0.008\),\(\beta_t\) 截断在 0.999。FIG 1 显示了区别:线性日程在 \(t=27\) 时 \(\bar\alpha_t\) 已低于 0.5,余弦日程要到 \(t=50\)。数据的尺度也是日程的一部分:数据的标准差如果是 10 而不是 1,同一个 \(\bar\alpha_t\) 下的有效信噪比就大了 100 倍,整条日程都偏了。

    引导:贝叶斯公式里的一项

    由贝叶斯公式 \(p_t(\mathbf x\mid c)\propto p_t(\mathbf x)\,p_t(c\mid\mathbf x)\),对 \(\mathbf x\) 求梯度,归一化常数消失:

    $$ \nabla\log p_t(\mathbf x\mid \hl{cond}{c})=\nabla\log p_t(\mathbf x)+\nabla\log p_t(\hl{cond}{c}\mid\mathbf x) $$ $$ \tilde{\mathbf s}=\nabla\log p_t(\mathbf x)+w\big(\nabla\log p_t(\mathbf x\mid c)-\nabla\log p_t(\mathbf x)\big) $$ $$ \tilde{\mathbf s}=\nabla\log p_t(\mathbf x\mid c)+(w-1)\,\nabla\log p_t(c\mid\mathbf x) $$

    Classifier guidance(Dhariwal 与 Nichol,2021)单独训练一个在带噪输入上工作的分类器 \(p_\phi(c\mid\mathbf x_t)\),把它的梯度乘一个系数加进 score。Classifier-free guidance 不要分类器:按上式,两个 score 之差就是一个“隐式分类器”的梯度,\(w>1\) 等于给它额外的权重 \(w-1\),样本被推向这个分类器最有把握的地方。直观上它像是在 \(p(\mathbf x)\,p(c\mid\mathbf x)^w\) 里采样,但这只是启发式的说法:引导后的 \(\tilde{\mathbf s}\) 一般并不是任何一族加噪分布的精确 score。(Ho 与 Salimans 的原文把系数写成 \((1+w')\varepsilon_c-w'\varepsilon_\varnothing\),即 \(w'=w-1\);本页沿用多数代码库里“\(w=1\) 即不引导”的写法。)FIG 5 里较少的 4 号马克杯被“挤掉”,是因为它本身少见,旁边又是更常见的碗 2,带噪时它附近的 \(p(c\mid\mathbf x)\)(\(c\) 为“马克杯”)就小。

    6机器人中的它:对整段动作去噪

    前面的“数据”是二维的点。对机器人,被生成的对象换成一整段动作:比如未来 10 个路点的位置,这是一个 20 维的向量。扩散模型并不在乎维数,前向过程、训练目标和采样器一个字都不用改;它对整段动作一起去噪,所以生成的每一段都是一个连贯的选择,而不是每个路点各自取平均。这正是 Diffusion Policy 生成动作块(action chunk)的方式,只是它的去噪网络还要以相机图像和本体感觉为条件(22.2 节)。

    下图的示教从左边的起点出发,绕过中间的障碍物到右边:一部分从上方绕,其余从下方绕,每条路线都带一点平滑的随机扰动(\(\sigma=0.1\) 的平滑高斯过程,所以这个 20 维的分布仍然是两个高斯的混合,score 可以精确算出)。把均方误差回归会给出的条件均值 \(\hl{mean}{\mathbb E[\mathbf a]}\) 也画出来作比较。这张图只有一个固定的场景,用的是精确的 score,要看的是:对整段动作一起去噪时,每一段都完整地选定一边,而且两边的频率与示教一致。19.7 节的 FIG 5 会在一个类似的避障场景里补上这里没有的三样东西:一个现场训练的网络、以障碍物位置为条件的动作头,以及积分步数减到 1 时会发生什么。

    FIG 6对动作块去噪:每一段都选定一边,平均路线却穿过障碍物
    灰线是 24 条示教,红色圆盘是障碍物,起点在左。按“去噪生成”:16 条动作块从纯噪声(20 维,\(\mathcal N(0,I)\))出发,经 DDPM 反向过程变成路线;过程中画成青色,结束后从上方绕的画成蓝色,从下方绕的画成紫色,撞上障碍物的画成红色。琥珀虚线是两类示教按比例取的平均路线。读数统计同一次运行里的 200 条动作块(含画出的 16 条)。这里的 score 是精确的,相当于一个训练完美的网络。
    • 保持“从上方绕的比例”在 0.4 到 0.6 之间,按“去噪生成”:200 条动作块里撞上障碍物的不超过 1 条(通常是 0,和示教本身一样罕见),上下大致各一半;而平均路线正好从障碍物中间穿过。
    • 把比例调到 0.75 以上(或 0.25 以下)再生成:样本里从上方绕的比例与示教的比例相差不到 0.1,撞上的不超过 1 条。扩散模型连各模式的频率也一起学了。(这时平均路线也恰好擦过障碍物;比例在 0.7 时它还会撞上。)
    真实系统里

    Diffusion Policy(Chi 等,RSS 2023)以最近几帧观测(图像和本体感觉)为条件,对未来一段动作序列去噪,执行其中前一部分后重新规划(滚动时域);去噪网络有一维时间卷积 U-Net 和 Transformer 两种。论文报告:训练用 100 个噪声水平、推理用 10 步 DDIM,在一块 RTX 3080 上的推理延迟约 0.1 s,这是它能在真机上闭环运行的关键。 Diffuser(Janner 等,ICML 2022)对整条状态-动作轨迹去噪,用回报的梯度做引导,用“补全”(固定起点、终点再去噪其余部分)做目标条件规划。 抓取与位姿生成:SE(3)-DiffusionFields(Urain 等,ICRA 2023)在 \(\SE\) 上用扩散学抓取位姿的分布,并把学到的能量当作运动优化的代价。 通用策略:Octo(Octo Model Team,RSS 2024)在 Transformer 主干上接了一个扩散动作头;3D Diffusion Policy(Ze 等,RSS 2024)把条件换成点云。 速度:机器人的控制回路常常要 10 到 50 Hz,所以推理步数很关键:DDIM 这类少步采样器、蒸馏,以及 19.7 节的 flow matching(π0 的动作头就是它)都在压缩这一步。 图像与视频生成:Stable Diffusion 一类的潜在扩散模型(Rombach 等,CVPR 2022)先用自编码器把图像压到隐空间再扩散,也被用来给机器人数据做增广、合成目标图像或充当视频世界模型。

    7常见误区

    误区 1:数据没归一化

    整套日程默认数据的尺度在 1 附近:\(\mathbf x_T\) 要像 \(\mathcal N(0,I)\),中间各步的信噪比要落在网络学得动的区间。如果关节角用度、位置用毫米,数据标准差是几十上百,\(\bar\alpha_t\) 已经很小时信号仍然盖过噪声,大部分训练步都浪费在“几乎没加噪”的区间,采样的起点也和训练时见过的 \(\mathbf x_T\) 对不上。机器人代码里的标准做法是把每个动作维度线性缩放到 \([-1,1]\),或按训练集减均值除标准差,推理后再变换回去。

    误区 2:步数砍得太狠

    每少一步,每一步就要跨过更大的一段噪声,而每一步只会朝后验均值走。FIG 4:“4 个杯子”上 DDPM 从 10 步减到 2 步,落在数据上的比例从 98% 降到 34%;1 步时所有样本都是数据均值。对机器人这意味着“平均动作”又回来了,偏偏是它最该避免的东西。少步数要靠专门的方法(DDIM、更高阶的 ODE 积分器、蒸馏、consistency 类模型、flow matching),而且每次改了步数都要重新评估成功率,不能只看速度。

    误区 3:把训练损失当作样本质量

    扩散损失有一个大于 0 的下限,而且不同噪声步的贡献差别很大:损失主要由中高噪声步决定,细节却由低噪声步决定。FIG 3 的“两条弧形把手”上,测试损失只比下限高约 6%,仍有约五分之一的样本不在把手上。要看样本:覆盖率、各模式的频率、离数据的距离(图像领域用 FID 等指标),对机器人最终要看任务成功率。

    误区 4:引导越强越好

    FIG 5:\(w\) 从 1 加到 2.5,符合指令的样本从约 80% 升到约 98%;再加到 8,较少的 4 号马克杯只剩约 6%(数据里是 20%)。在图像上,过大的 \(w\) 会让颜色过饱和、细节失真,样本也会被推离数据流形。对机器人,多样性本身就是价值:一个只会从一个方向抓杯子的策略,遇到那一侧被挡住就没办法了。\(w\) 应该按任务指标来调,而不是越大越好。

    误区 5:用原始权重评估,或训练与采样的约定不一致

    FIG 3 已经演示:原始权重采出的各模式份额随训练步抖动,EMA 权重稳得多,几乎所有扩散代码库都默认用 EMA 采样(衰减率通常在 0.999 以上,本页的小例子用 0.99)。另一类常见 bug 是训练和采样“对不上”:网络预测的是 \(\boldsymbol\varepsilon\) 还是 \(\hat{\mathbf x}_0\) 还是速度 \(\mathbf v\);时间输入是整数步还是 \([0,1]\) 里的连续时间;采样器跳步时用的 \(\bar\alpha\) 是否与训练日程一致。这些错误不会报错,只会让样本悄悄变差,所以值得像本页这样,先用一个有精确 score 的玩具分布把整条管线验一遍。

    8小练习

    1. 某一步的 \(\bar\alpha_t=0.64\)。给定 \(\mathbf x_0\),\(\mathbf x_t\) 服从什么分布?
    \(q(\mathbf x_t\mid\mathbf x_0)=\mathcal N(\sqrt{\bar\alpha_t}\,\mathbf x_0,(1-\bar\alpha_t)I)\),\(\sqrt{0.64}=0.8\),\(1-0.64=0.36\)。选项 A 忘了开方;选项 C 漏了缩放(那是“方差爆炸”型的加噪,不保持方差);选项 D 把标准差当成了方差。
    2. 一个 DDPM 的测试损失停在 0.30 附近,怎么训练都不再下降。最可能的原因是?
    最优的 \(\boldsymbol\varepsilon^\star=\mathbb E[\boldsymbol\varepsilon\mid\mathbf x_t]\) 的损失是噪声的后验方差,只有 \(\mathbf x_t\) 唯一决定 \(\boldsymbol\varepsilon\) 时才是 0,而噪声小时 \(\mathbf x_t\approx\mathbf x_0\),噪声几乎完全不可辨识。FIG 3 的下限约 0.295。要判断网络还有多少提升空间,应该比较“损失减去下限”(对真实数据下限未知,只能看样本)。选项 D 正好说反了:损失降到 0 反而说明有 bug,比如测试集和训练集重叠且网络背下了噪声。
    3. 用精确的去噪器,从纯噪声 \(\mathbf x_T\)(\(\bar\alpha_T\approx0\))只走一步 DDIM 直接到 \(t=0\)。得到的样本是?
    一步就是输出 \(\hat{\mathbf x}_0=\mathbb E[\mathbf x_0\mid\mathbf x_T]\)。\(\bar\alpha_T\approx0\) 时 \(\mathbf x_T\) 几乎不含 \(\mathbf x_0\) 的信息,后验就是先验,后验均值就是数据均值。FIG 4 里 1 步时 600 个样本全落在 (−0.19, 0.29) 上。只有当数据均值恰好是 0 时选项 C 才对;选项 D 是很多步之后的大致结果,不是一步的。
    4. 在 \(\bar\alpha_t=0.75\) 的那一步,网络在某点输出 \(\boldsymbol\varepsilon_\theta=(0.3,\,-0.4)\)。它对应的 score 估计 \(\nabla\log p_t\) 是?
    \(\nabla\log p_t=-\boldsymbol\varepsilon/\sqrt{1-\bar\alpha_t}=-(0.3,-0.4)/0.5=(-0.6,0.8)\)。负号的意思是:网络认为这个点被往 \(\boldsymbol\varepsilon\) 的方向推开了,更可能的数据在反方向。选项 A 丢了负号,选项 B 乘了 \(\sqrt{1-\bar\alpha_t}\) 而不是除以它,选项 C 忘了尺度。
    5. 在 classifier-free guidance \(\tilde{\boldsymbol\varepsilon}=\boldsymbol\varepsilon_\varnothing+w(\boldsymbol\varepsilon_c-\boldsymbol\varepsilon_\varnothing)\) 里取 \(w=3\)。下面哪个说法对?
    由 \(\nabla\log p(\mathbf x\mid c)=\nabla\log p(\mathbf x)+\nabla\log p(c\mid\mathbf x)\),引导后的 score 是 \(\nabla\log p_t(\mathbf x\mid c)+(w-1)\nabla\log p_t(c\mid\mathbf x)\)。\(w=1\) 才是条件模型本身(选项 B 错:\(w>1\) 采的是一个被“锐化”的分布,不是 \(p(\mathbf x\mid c)\));分类器是隐式的,由同一个网络的条件与无条件输出之差给出(选项 C 说的是 classifier guidance);FIG 5 显示 \(w\) 越大多样性越低(选项 D 错)。

    9延伸阅读

    • J. Sohl-Dickstein, E. Weiss, N. Maheswaranathan & S. Ganguli, Deep Unsupervised Learning using Nonequilibrium Thermodynamics, ICML 2015 — 扩散模型的起点:用一条逐步加噪的马尔可夫链定义生成模型
    • J. Ho, A. Jain & P. Abbeel, Denoising Diffusion Probabilistic Models, NeurIPS 2020 — DDPM:预测噪声、简化损失,样本质量第一次比肩 GAN
    • Y. Song & S. Ermon, Generative Modeling by Estimating Gradients of the Data Distribution, NeurIPS 2019 — NCSN:多噪声水平的 score matching 与退火 Langevin
    • Y. Song, J. Sohl-Dickstein, D. P. Kingma, A. Kumar, S. Ermon & B. Poole, Score-Based Generative Modeling through Stochastic Differential Equations, ICLR 2021 — SDE 统一框架、反向 SDE 与概率流 ODE
    • J. Song, C. Meng & S. Ermon, Denoising Diffusion Implicit Models, ICLR 2021 — DDIM:同一个网络、确定性的少步采样
    • A. Nichol & P. Dhariwal, Improved Denoising Diffusion Probabilistic Models, ICML 2021 — 余弦日程、学习方差
    • P. Dhariwal & A. Nichol, Diffusion Models Beat GANs on Image Synthesis, NeurIPS 2021;J. Ho & T. Salimans, Classifier-Free Diffusion Guidance, NeurIPS 2021 Workshop on Deep Generative Models and Downstream Applications — classifier guidance 与 classifier-free guidance
    • P. Vincent, A Connection Between Score Matching and Denoising Autoencoders, Neural Computation, 2011;A. Hyvärinen, Estimation of Non-Normalized Statistical Models by Score Matching, JMLR, 2005 — score matching 与去噪的联系
    • T. Karras, M. Aittala, T. Aila & S. Laine, Elucidating the Design Space of Diffusion-Based Generative Models, NeurIPS 2022 — 把日程、参数化、采样器拆开逐一分析的工程指南
    • C. Chi, S. Feng, Y. Du, Z. Xu, E. Cousineau, B. Burchfiel & S. Song, Diffusion Policy: Visuomotor Policy Learning via Action Diffusion, RSS 2023;M. Janner, Y. Du, J. B. Tenenbaum & S. Levine, Planning with Diffusion for Flexible Behavior Synthesis, ICML 2022 — 扩散用于机器人动作与轨迹