DDPM
参考- Understanding Diffusion Models: A Unified Perspective
这里省略了大量的数学推导,仅保留必要的数学表达式,以提高可读性
书接上回,我们可以认为variable diffusion model就是具有如下三条假设的HVAE:
潜在维度恰好等于数据维度
每个时间步的潜在编码器结构不是学成的;它是作为线性高斯模型预先定义的。换句话说,它是一个
以前一时间步输出为中心的高斯分布。
潜在编码器的高斯参数随时间变化,使得最终时间步T 的潜在分布为标准正态分布
编码器
编码器 显式地建模为:
q ( x t ∣ x t − 1 ) = N ( x t ; α t x t − 1 , ( 1 − α t ) I ) q\left(\boldsymbol{x}_{t} \mid \boldsymbol{x}_{t-1}\right)=\mathcal{N}\left(\boldsymbol{x}_{t} ; \sqrt{\alpha_{t}} \boldsymbol{x}_{t-1},\left(1-\alpha_{t}\right) \mathbf{I}\right) q ( x t ∣ x t − 1 ) = N ( x t ; α t x t − 1 , ( 1 − α t ) I )
这称为线性高斯模型。
编码器这样规定的目的是:当我们任意给定一个干净图像x 0 x_0 x 0 ,我们总可以通过设置噪声调度并且在足够长的时间步T(这也是其推理很慢的原因)后使得x T x_T x T 服从标准正态,进而方便我们进行采样。
并且,它有一些十分良好的性质,当我们给定了α 1 , α 2 , … , α T \alpha_1,\alpha_2,\dots,\alpha_T α 1 , α 2 , … , α T 之后,q ( x t ∣ x 0 ) q(\boldsymbol{x}_t \mid \boldsymbol{x}_0) q ( x t ∣ x 0 ) 和q ( x t − 1 ∣ x t , x 0 ) q(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_t, \boldsymbol{x}_0) q ( x t − 1 ∣ x t , x 0 ) 可以直接解析得到,且都是正态分布。
其中,q ( x t ∣ x 0 ) ∼ N ( α t ˉ x 0 , ( 1 − α t ˉ ) I ) , α t ˉ = ∏ i = 1 t α i q(\boldsymbol{x}_t\mid\boldsymbol{x}_0)\sim \mathcal{N}(\sqrt{\bar{\alpha_t}}\boldsymbol{x_0},(1-\bar{\alpha_t})\mathbf{I}),\bar{\alpha_t}=\prod_{i=1}^t\alpha_i q ( x t ∣ x 0 ) ∼ N ( α t ˉ x 0 , ( 1 − α t ˉ ) I ) , α t ˉ = ∏ i = 1 t α i
另一个在下文给出。
ELBO
我们通过最大似然估计来优化模型参数,具体来说是通过优化似然函数的下界(ELBO)来间接优化似然函数。
表达式为:
log p ( x 0 ) = ∫ log p ( x 0 : T ) d x 1 : T \log{p(x_0)}=\int \log{p(x_{0:T})} dx_{1:T} log p ( x 0 ) = ∫ log p ( x 0 : T ) d x 1 : T
这表示了任意干净图像x 0 x_0 x 0 的似然,对所有从正态分布到x 0 x_0 x 0 的轨迹积分。
ELBO为:
E q ( x 1 ∣ x 0 ) [ log p θ ( x 0 ∣ x 1 ) ] ⏟ reconstruction term − D K L ( q ( x T ∣ x 0 ) ∥ p ( x T ) ) ⏟ prior matching term − ∑ t = 2 T E q ( x t ∣ x 0 ) [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ] ⏟ denoising matching term \underbrace{\mathbb{E}_{q\left(\boldsymbol{x}_{1} \mid \boldsymbol{x}_{0}\right)}\left[\log p_{\theta}\left(\boldsymbol{x}_{0} \mid \boldsymbol{x}_{1}\right)\right]}_{\text {reconstruction term }}-\underbrace{D_{\mathrm{KL}}\left(q\left(\boldsymbol{x}_{T} \mid \boldsymbol{x}_{0}\right) \| p\left(\boldsymbol{x}_{T}\right)\right)}_{\text {prior matching term }}-\sum_{t=2}^{T} \underbrace{\mathbb{E}_{q\left(\boldsymbol{x}_{t} \mid \boldsymbol{x}_{0}\right)}\left[D_{\mathrm{KL}}\left(q\left(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_{t}, \boldsymbol{x}_{0}\right) \| p_{\theta}\left(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_{t}\right)\right)\right]}_{\text {denoising matching term }} reconstruction term E q ( x 1 ∣ x 0 ) [ log p θ ( x 0 ∣ x 1 ) ] − prior matching term D KL ( q ( x T ∣ x 0 ) ∥ p ( x T ) ) − t = 2 ∑ T denoising matching term E q ( x t ∣ x 0 ) [ D KL ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ]
E q ( x 1 ∣ x 0 ) [ log p θ ( x 0 ∣ x 1 ) ] \mathbb{E}_{q(\boldsymbol{x}_{1}|\boldsymbol{x}_{0})}\left[\log p_{\theta}(\boldsymbol{x}_{0}|\boldsymbol{x}_{1})\right] E q ( x 1 ∣ x 0 ) [ log p θ ( x 0 ∣ x 1 ) ] 可以解释为一个重构项;类似于普通VAE的ELBO中的对应项,这一项可以使用蒙特卡罗估计进行近似和优化。
D K L ( q ( x T ∣ x 0 ) ∥ p ( x T ) ) D_{\mathrm{KL}}(q(\boldsymbol{x}_{T}|\boldsymbol{x}_{0})\parallel p(\boldsymbol{x}_{T})) D KL ( q ( x T ∣ x 0 ) ∥ p ( x T )) 表示最终加噪输入的分布与标准高斯先验的接近程度。它没有可训练参数,并且在我们的假设下也等于零。
E q ( x t ∣ x 0 ) [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ] \mathbb{E}_{q(\boldsymbol{x}_{t}|\boldsymbol{x}_{0})}\left[D_{\mathrm{KL}}(q(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t},\boldsymbol{x}_{0})\parallel p_{\theta}(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t}))\right] E q ( x t ∣ x 0 ) [ D KL ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t )) ] 是一个降噪匹配项。我们学习期望的降噪转移步骤 p θ ( x t − 1 ∣ x t ) p_{\theta}(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t}) p θ ( x t − 1 ∣ x t ) 作为对易处理的、真实降噪转移步骤 q ( x t − 1 ∣ x t , x 0 ) q(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t},\boldsymbol{x}_{0}) q ( x t − 1 ∣ x t , x 0 ) 的近似。q ( x t − 1 ∣ x t , x 0 ) q(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t},\boldsymbol{x}_{0}) q ( x t − 1 ∣ x t , x 0 ) 转移步骤可以作为真实信号,因为它定义了如何在知道最终完全降噪图像 x 0 \boldsymbol{x}_{0} x 0 应该是什么
其中,第一项的计算和VAE中的差不多,第二项是没有训练参数且T足够大时为0,计算量主要是第三项。根据线性高斯模型的性质可知,q ( x t − 1 ∣ x t , x 0 ) q(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_t,\boldsymbol{x}_0) q ( x t − 1 ∣ x t , x 0 ) 有解析式,且解析式为:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 ( 1 − α t ) x 0 1 − α ˉ t ⏟ μ q ( x t , x 0 ) , ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t I ) q\left(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_t, \boldsymbol{x}_0\right) = \mathcal{N}\left(\boldsymbol{x}_{t-1}; \underbrace{\frac{\sqrt{\alpha_t}\left(1-\bar{\alpha}_{t-1}\right)\boldsymbol{x}_t + \sqrt{\bar{\alpha}_{t-1}}\left(1-\alpha_t\right)\boldsymbol{x}_0}{1-\bar{\alpha}_t}}_{\mu_q(\boldsymbol{x}_t, \boldsymbol{x}_0)}, \frac{\left(1-\alpha_t\right)\left(1-\bar{\alpha}_{t-1}\right)}{1-\bar{\alpha}_t}\mathbf{I}\right) q ( x t − 1 ∣ x t , x 0 ) = N x t − 1 ; μ q ( x t , x 0 ) 1 − α ˉ t α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 ( 1 − α t ) x 0 , 1 − α ˉ t ( 1 − α t ) ( 1 − α ˉ t − 1 ) I
由于协方差矩阵是常数且我们想要p θ ( x t − 1 ∣ x t ) p_\theta (\boldsymbol{x}_{t-1}\mid \boldsymbol{x}_t) p θ ( x t − 1 ∣ x t ) 与其尽可能接近,于是我们也把p θ ( x t − 1 ∣ x t ) p_\theta(\boldsymbol{x}_{t-1}\mid \boldsymbol{x}_t) p θ ( x t − 1 ∣ x t ) 建模为正态分布,且协方差矩阵与其相同。
再代入正态分布KL散度的公式,最后的优化目标为:
∣ ∣ μ θ − μ q ∣ ∣ 2 2 ||\mu_\theta-\mu_q||_2^2 ∣∣ μ θ − μ q ∣ ∣ 2 2
即两者均值的L2距离的平方。
由于μ θ \mu_\theta μ θ 为x t \boldsymbol{x}_t x t 和t t t 的函数,而并不是x 0 x_0 x 0 的函数(这也就是为什么我们不可能直接解析地得到p θ p_\theta p θ 的原因),为了与μ q \mu_q μ q 尽量接近,我们将其建模为
μ θ ( x t , t ) = α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 ( 1 − α t ) x ^ θ ( x t , t ) 1 − α ˉ t \mu_{\theta}\left(\boldsymbol{x}_{t}, t\right)=\frac{\sqrt{\alpha_{t}}\left(1-\bar{\alpha}_{t-1}\right)\boldsymbol{x}_{t}+\sqrt{\bar{\alpha}_{t-1}}\left(1-\alpha_{t}\right)\hat{\boldsymbol{x}}_{\theta}\left(\boldsymbol{x}_{t}, t\right)}{1-\bar{\alpha}_{t}} μ θ ( x t , t ) = 1 − α ˉ t α t ( 1 − α ˉ t − 1 ) x t + α ˉ t − 1 ( 1 − α t ) x ^ θ ( x t , t )
于是最后的的优化目标变成了
∥ x ^ θ ( x t , t ) − x 0 ∥ 2 2 \left\|\hat{\boldsymbol{x}}_{\theta}\left(\boldsymbol{x}_{t}, t\right)-\boldsymbol{x}_{0}\right\|_{2}^{2} ∥ x ^ θ ( x t , t ) − x 0 ∥ 2 2
因此,优化一个VDM归结为学习一个神经网络,从任意噪声化的版本中预测原始真实值图像。(为什么这个结论看起来是如此平凡🤣)此外,通过在所有噪声级别上最小化我们推导出的ELBO目标的第三项可以近似为在所有时间步上最小化期望(这是蒙特卡洛采样积分法,不得不说要不是有这种采样法,推导的这么一长串东西都完全没法算啊):
arg min θ E t ∼ U { 2 , T } [ E q ( x t ∣ x 0 ) [ D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ] ] \underset{\boldsymbol{\theta}}{\arg\min}\,\mathbb{E}_{t \sim U\{2,T\}}\left[\mathbb{E}_{q\left(\boldsymbol{x}_t \mid \boldsymbol{x}_0\right)}\left[D_{\mathrm{KL}}\left(q\left(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_t, \boldsymbol{x}_0\right) \parallel p_{\boldsymbol{\theta}}\left(\boldsymbol{x}_{t-1} \mid \boldsymbol{x}_t\right)\right)\right]\right] θ arg min E t ∼ U { 2 , T } [ E q ( x t ∣ x 0 ) [ D KL ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ] ]
然后可以使用随机样本在时间步上进行优化。
另外两种视角
而事实上这个目标函数还有另外两种等效的形式
第二种
首先,我们可以利用重参数化技巧。在推导 q ( x t ∣ x 0 ) q(\boldsymbol{x}_{t}|\boldsymbol{x}_{0}) q ( x t ∣ x 0 ) 的形式时,我们可以重新排列方程来证明:
x 0 = x t − 1 − α ˉ t ϵ 0 α ˉ t \boldsymbol{x}_{0} = \frac{\boldsymbol{x}_{t} - \sqrt{1-\bar{\alpha}_{t}}\boldsymbol{\epsilon}_{0}}{\sqrt{\bar{\alpha}_{t}}} x 0 = α ˉ t x t − 1 − α ˉ t ϵ 0
于是μ q ( x t , x 0 ) \mu_q(\boldsymbol{x}_t,\boldsymbol{x}_0) μ q ( x t , x 0 ) 可重新推导为:
μ q ( x t , x 0 ) = 1 α t x t − 1 − α t 1 − α ˉ t α t ϵ 0 \mu_q(\boldsymbol{x}_t,\boldsymbol{x}_0)=\frac{1}{\sqrt{\alpha_{t}}}\boldsymbol{x}_{t} - \frac{1-\alpha_{t}}{\sqrt{1-\bar{\alpha}_{t}}\sqrt{\alpha_{t}}}\boldsymbol{\epsilon}_{0} μ q ( x t , x 0 ) = α t 1 x t − 1 − α ˉ t α t 1 − α t ϵ 0
因此,我们可以将我们的近似降噪转移均值 μ θ ( x t , t ) \mu_{\theta}(\boldsymbol{x}_{t},t) μ θ ( x t , t ) 设置为:
μ θ ( x t , t ) = 1 α t x t − 1 − α t 1 − α ˉ t α t ϵ ^ θ ( x t , t ) \mu_{\theta}(\boldsymbol{x}_{t},t) = \frac{1}{\sqrt{\alpha_{t}}}\boldsymbol{x}_{t} - \frac{1-\alpha_{t}}{\sqrt{1-\bar{\alpha}_{t}}\sqrt{\alpha_{t}}}\hat{\boldsymbol{\epsilon}}_{\theta}(\boldsymbol{x}_{t},t) μ θ ( x t , t ) = α t 1 x t − 1 − α ˉ t α t 1 − α t ϵ ^ θ ( x t , t )
并且相应的最优化问题变为:
arg min θ 1 2 σ q 2 ( t ) ( 1 − α t ) 2 ( 1 − α ˉ t ) α t [ ∥ ϵ 0 − ϵ ^ θ ( x t , t ) ∥ 2 2 ] \underset{\boldsymbol{\theta}}{\arg\min}\,\frac{1}{2\sigma_{q}^{2}(t)}\frac{\left(1-\alpha_{t}\right)^{2}}{\left(1-\bar{\alpha}_{t}\right)\alpha_{t}}\left[\left\|\boldsymbol{\epsilon}_{0}-\hat{\boldsymbol{\epsilon}}_{\theta}\left(\boldsymbol{x}_{t}, t\right)\right\|_{2}^{2}\right] θ arg min 2 σ q 2 ( t ) 1 ( 1 − α ˉ t ) α t ( 1 − α t ) 2 [ ∥ ϵ 0 − ϵ ^ θ ( x t , t ) ∥ 2 2 ]
在这里,ϵ ^ θ ( x t , t ) \hat{\bm{\epsilon}}_{\theta}(\bm{x}_{t}, t) ϵ ^ θ ( x t , t ) 是一个神经网络,它学习预测决定x t \bm{x}_{t} x t 的源噪声ϵ 0 ∼ N ( ϵ ; 0 , I ) \bm{\epsilon}_{0} \sim \mathcal{N}(\bm{\epsilon}; \mathbf{0}, \mathbf{I}) ϵ 0 ∼ N ( ϵ ; 0 , I ) ,从x 0 \bm{x}_{0} x 0 。因此,我们已经证明,通过预测原始图像x 0 \bm{x}_{0} x 0 来学习VDM等同于学习预测噪声;然而,实证研究表明,预测噪声取得了更好的性能。
这里也可以这样理解,任意时间步的图像都可以由原始图像一步加噪得到,我们只要用网络去预测加的那个噪声也可以达到同样的效果。并且也许预测噪声相当于resnet预测残差的想法,可能更容易拟合(?)故而效果更好。
而这实际上就是DDPM的做法。
第三种
一个基于score-function的理解,可以看这个视频 理解一下大概的思想。
接着可以看Yang Song的blog ,没有什么比这个写得更直观且完整了。
条件生成
参考这个视频 ,现在主流的方法是classifier-free guidance,大概的想法就是:
在推理(生成)时,我们不需要任何外部分类器。对于同一个输入噪声,我们让这个统一的模型同时进行两次预测:
无条件预测:ε u n c o n d = m o d e l ( x t , ∅ ) ε_{uncond} = model(x_t, ∅) ε u n co n d = m o d e l ( x t , ∅ )
条件预测:ε c o n d = m o d e l ( x t , y ) ε_{cond} = model(x_t, y) ε co n d = m o d e l ( x t , y )
然后,我们计算两者的方向差,并将这个差值放大:
ε f i n a l = ε u n c o n d + s ∗ ( ε c o n d − ε u n c o n d ) ε_{final} = ε_{uncond} + s * (ε_{cond} - ε_{uncond}) ε f ina l = ε u n co n d + s ∗ ( ε co n d − ε u n co n d )
DDIM
参考苏神博客
DDIM是DDPM在的推广,DDPM通过定义p ( x t ∣ x t − 1 ) p(x_t|x_{t-1}) p ( x t ∣ x t − 1 ) 和引入马尔科夫性完整定义了前向过程的联合分布。但是我们观察到其实并不一定需要这样。因为如果我们承认拟合p(x_{t-1}|x_t,x_0)的训练目标是正确的(直接承认它是正确的,而不要从最大似然估计中推导ELBO),那么根据贝叶斯公式p ( x t − 1 ∣ x t , x 0 ) = p ( x t ∣ x t − 1 , x 0 ) p ( x t − 1 ∣ x 0 ) p ( x t ∣ x 0 ) p(x_{t-1}|x_t,x_0)=\frac{p(x_{t}|x_{t-1},x_0)p(x_{t-1}|x_0)}{p(x_t|x_0)} p ( x t − 1 ∣ x t , x 0 ) = p ( x t ∣ x 0 ) p ( x t ∣ x t − 1 , x 0 ) p ( x t − 1 ∣ x 0 ) 其实我们只需要知道p ( x t ∣ x 0 ) , t = 1 , 2 , … , T p(x_t|x_0),t=1,2,\dots,T p ( x t ∣ x 0 ) , t = 1 , 2 , … , T 以及p ( x t − 1 ∣ x t , x 0 ) = p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t,x_0)=p(x_{t-1}|x_t) p ( x t − 1 ∣ x t , x 0 ) = p ( x t − 1 ∣ x t ) 即可,那么我们依然保持DDPM对边缘分布的定义,对于状态转移,我们改变因果顺序,通过先定义满足边缘分布的p ( x t − 1 ∣ x t , x 0 ) p(x_{t-1}|x_t,x_0) p ( x t − 1 ∣ x t , x 0 ) 再把它定义出来,这样就实现了前向过程的推广。
当我们做出上述改动之后,q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q ( x t − 1 ∣ x t , x 0 ) 不再是原来的表达式,我们可以通过推导得到其可以 具备以下形式:
q ( x t − 1 ∣ x t , x 0 ) ∼ N ( x t − 1 ; β t − 1 2 − σ t 2 β ˉ t x t + ( α ˉ t − 1 − α ˉ t ⋅ β t − 1 2 − σ t 2 β ˉ t ) x 0 , σ t 2 I ) q(x_{t-1} \mid x_t, x_0) \sim \mathcal{N} \left(
x_{t-1};\
\frac{\sqrt{\beta_{t-1}^2 - \sigma_t^2}}{\bar{\beta}_t} x_t +
\left( \bar{\alpha}_{t-1} - \bar{\alpha}_t \cdot \frac{\sqrt{\beta_{t-1}^2 - \sigma_t^2}}{\bar{\beta}_t} \right) x_0,\
\sigma_t^2 \mathbf{I}
\right) q ( x t − 1 ∣ x t , x 0 ) ∼ N x t − 1 ; β ˉ t β t − 1 2 − σ t 2 x t + α ˉ t − 1 − α ˉ t ⋅ β ˉ t β t − 1 2 − σ t 2 x 0 , σ t 2 I
其中σ t \sigma_t σ t 可以自己设置,取某个值的时候会退化为DDPM,取0时,会变成确定性采样
进行上述改动后,事实上DDIM的训练算法和DDPM完全相同,区别只在采样。
而DDIM对于采样的加速取决于另一个观察:DDPM的训练结果实质上包含了它的任意子序列参数的训练结果。 因为DDPM训练的就是从任意时间步的噪声向量中预测原图,任意子序列的训练目标显然包含其中。
所以实际上DDPM也可以进行跳步采样,而DDIM在此基础上更进一步,通过改变σ t \sigma_t σ t 能得到更好的采样效果。
根据实验结果,应该是σ t \sigma_t σ t 越小。效果越好。
下面给出σ t \sigma_t σ t 取某一个值的时候的采样算法。
1. 选择时间步
从集合 {1, …, T} 中选择一个包含 N 个时间步的子序列
S = { s 1 , s 2 , . . . , s N } , s 1 = 1 , s N = T , s i < s i + 1 S = \{s_1, s_2, ..., s_N\}, \quad s_1 = 1, \; s_N = T, \; s_i < s_{i+1} S = { s 1 , s 2 , ... , s N } , s 1 = 1 , s N = T , s i < s i + 1
S = { t 0 , t 1 , . . . , t N } , t N = T , t 0 = 0 S = \{t_0, t_1, ..., t_N\}, \quad t_N = T, \; t_0 = 0 S = { t 0 , t 1 , ... , t N } , t N = T , t 0 = 0
2. 获取噪声预测模型
训练一个模型 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵ θ ( x t , t ) 来预测噪声 ϵ \epsilon ϵ ,满足:
x t = α t x 0 + 1 − α t ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\alpha_t} \, x_0 + \sqrt{1 - \alpha_t} \, \epsilon, \quad \epsilon \sim \mathcal{N}(0, I) x t = α t x 0 + 1 − α t ϵ , ϵ ∼ N ( 0 , I )
3. 采样过程
x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) x T ∼ N ( 0 , I )
对于 i = N , . . . , 1 i = N, ..., 1 i = N , ... , 1 :
预测噪声
ϵ = ϵ θ ( x t i , t i ) \epsilon = \epsilon_\theta(x_{t_i}, t_i) ϵ = ϵ θ ( x t i , t i )
估计 x 0 x_0 x 0
x ^ 0 = x t i − 1 − α t i ϵ θ ( x t i , t i ) α t i \hat{x}_0 = \frac{x_{t_i} - \sqrt{1 - \alpha_{t_i}} \, \epsilon_\theta(x_{t_i}, t_i)}{\sqrt{\alpha_{t_i}}} x ^ 0 = α t i x t i − 1 − α t i ϵ θ ( x t i , t i )
计算 σ t \sigma_t σ t 和均值 μ t \mu_t μ t
(注意这里的α t \alpha_t α t 并不是训练时所指定的那些)
σ t = η ⋅ 1 − α t i − 1 1 − α t i ⋅ 1 − α t i α t i − 1 \sigma_t = \eta \cdot \sqrt{\frac{1 - \alpha_{t_{i-1}}}{1 - \alpha_{t_i}}} \cdot \sqrt{1 - \frac{\alpha_{t_i}}{\alpha_{t_{i-1}}}} σ t = η ⋅ 1 − α t i 1 − α t i − 1 ⋅ 1 − α t i − 1 α t i
μ t = α t i − 1 x ^ 0 + 1 − α t i − 1 − σ t 2 ϵ θ ( x t i , t i ) \mu_t = \sqrt{\alpha_{t_{i-1}}} \, \hat{x}_0 + \sqrt{1 - \alpha_{t_{i-1}} - \sigma_t^2} \, \epsilon_\theta(x_{t_i}, t_i) μ t = α t i − 1 x ^ 0 + 1 − α t i − 1 − σ t 2 ϵ θ ( x t i , t i )
更新采样
x t i − 1 ∼ N ( μ t , σ t 2 ) x_{t_{i-1}} \sim \mathcal{N}(\mu_t, \sigma_t^2) x t i − 1 ∼ N ( μ t , σ t 2 )
(当设定 η = 0 \eta = 0 η = 0 时,σ t \sigma_t σ t = 0)
4. 输出
最终输出 x 0 x_0 x 0 ,即为生成的样本。
说明
α t \alpha_t α t :根据预定义的时间步 t t t 计算的超参数,通常是线性或余弦调度函数。
ϵ θ \epsilon_\theta ϵ θ :训练好的噪声预测模型。
x ^ 0 \hat{x}_0 x ^ 0 :对原始样本的估计值。
σ t \sigma_t σ t :控制采样过程中的随机性。
μ t \mu_t μ t :生成下一个时间步的均值。
DiT
用transformer架构替代了Unet,作为diffusion使用的架构。
这张图已然说明一切.
Distribution Matching Distillation
在单步扩散模型蒸馏(One-step Diffusion Distribution Matching Distillation, DMD)等论文中,损失函数的核心思想是让 Student 模型生成的分布 p fake p_{\text{fake}} p fake 匹配 Teacher 模型的真实分布 p real p_{\text{real}} p real 。
在数学实现时,一个关键的转化是将难以直接计算的边缘分布分数(Marginal Score) ∇ log p ( x t ) \nabla \log p(x_t) ∇ log p ( x t ) 转化为条件分布分数(Conditional Score) ∇ log p ( x t ∣ x 0 ) \nabla \log p(x_t | x_0) ∇ log p ( x t ∣ x 0 ) 。本文将从数学推导出发,详细证明这一转化的合理性及其背后的**去噪分数匹配(Denoising Score Matching, DSM)**理论。
1. 核心问题背景
在扩散模型框架下,分布对齐等价于在各个噪声水平 t t t 下对齐 Score:
∇ x t log p fake ( x t , t ) ⟷ ∇ x t log p real ( x t , t ) \nabla_{x_t} \log p_{\text{fake}}(x_t, t) \longleftrightarrow \nabla_{x_t} \log p_{\text{real}}(x_t, t) ∇ x t log p fake ( x t , t ) ⟷ ∇ x t log p real ( x t , t )
然而,边缘分布 p ( x t ) p(x_t) p ( x t ) 是通过对整个数据集进行积分得到的:
p ( x t ) = ∫ p ( x t ∣ x 0 ) p ( x 0 ) d x 0 p(x_t) = \int p(x_t|x_0)p(x_0) dx_0 p ( x t ) = ∫ p ( x t ∣ x 0 ) p ( x 0 ) d x 0
直接对该积分求对数梯度在数学上是不可解的(Intractable)。为此,DMD 引入了 Denoising Score Matching (DSM) 的等价性结论。
2. 必备数学工具
在推导开始前,我们需要掌握两个核心数学技巧:
2.1 莱布尼茨积分规则 (Leibniz Rule)
在满足平滑性条件(如高斯分布)时,梯度算子可以与积分符号交换:
∇ x t ∫ p ( x t ∣ x 0 ) p ( x 0 ) d x 0 = ∫ ∇ x t p ( x t ∣ x 0 ) p ( x 0 ) d x 0 \nabla_{x_t} \int p(x_t | x_0) p(x_0) dx_0 = \int \nabla_{x_t} p(x_t | x_0) p(x_0) dx_0 ∇ x t ∫ p ( x t ∣ x 0 ) p ( x 0 ) d x 0 = ∫ ∇ x t p ( x t ∣ x 0 ) p ( x 0 ) d x 0
2.2 对数导数技巧 (Log-Derivative Trick)
根据复合函数链式法则,对于任何正值函数 f ( x ) f(x) f ( x ) :
∇ log f ( x ) = ∇ f ( x ) f ( x ) ⟹ ∇ f ( x ) = f ( x ) ∇ log f ( x ) \nabla \log f(x) = \frac{\nabla f(x)}{f(x)} \implies \nabla f(x) = f(x) \nabla \log f(x) ∇ log f ( x ) = f ( x ) ∇ f ( x ) ⟹ ∇ f ( x ) = f ( x ) ∇ log f ( x )
该技巧常用于将梯度的积分转化为期望 的形式。
3. 关键引理:边缘分数是条件分数的期望
首先,我们要证明边缘分数本质上是所有可能原图 x 0 x_0 x 0 对应的条件分数的加权平均。
证明:
根据边缘分布定义,对其求梯度:
∇ x t p ( x t ) = ∫ ∇ x t p ( x t ∣ x 0 ) p ( x 0 ) d x 0 \nabla_{x_t} p(x_t) = \int \nabla_{x_t} p(x_t|x_0) p(x_0) dx_0 ∇ x t p ( x t ) = ∫ ∇ x t p ( x t ∣ x 0 ) p ( x 0 ) d x 0
应用对数导数技巧 :
∇ x t p ( x t ) = ∫ [ p ( x t ∣ x 0 ) ∇ x t log p ( x t ∣ x 0 ) ] p ( x 0 ) d x 0 \nabla_{x_t} p(x_t) = \int [p(x_t|x_0) \nabla_{x_t} \log p(x_t|x_0)] p(x_0) dx_0 ∇ x t p ( x t ) = ∫ [ p ( x t ∣ x 0 ) ∇ x t log p ( x t ∣ x 0 )] p ( x 0 ) d x 0
两边同时除以 p ( x t ) p(x_t) p ( x t ) :
∇ x t p ( x t ) p ( x t ) = ∫ ∇ x t log p ( x t ∣ x 0 ) p ( x t ∣ x 0 ) p ( x 0 ) p ( x t ) d x 0 \frac{\nabla_{x_t} p(x_t)}{p(x_t)} = \int \nabla_{x_t} \log p(x_t|x_0) \frac{p(x_t|x_0) p(x_0)}{p(x_t)} dx_0 p ( x t ) ∇ x t p ( x t ) = ∫ ∇ x t log p ( x t ∣ x 0 ) p ( x t ) p ( x t ∣ x 0 ) p ( x 0 ) d x 0
根据贝叶斯定理 p ( x 0 ∣ x t ) = p ( x t ∣ x 0 ) p ( x 0 ) p ( x t ) p(x_0|x_t) = \frac{p(x_t|x_0)p(x_0)}{p(x_t)} p ( x 0 ∣ x t ) = p ( x t ) p ( x t ∣ x 0 ) p ( x 0 ) ,上式简化为:
∇ x t log p ( x t ) = ∫ ∇ x t log p ( x t ∣ x 0 ) p ( x 0 ∣ x t ) d x 0 = E p ( x 0 ∣ x t ) [ ∇ x t log p ( x t ∣ x 0 ) ] \nabla_{x_t} \log p(x_t) = \int \nabla_{x_t} \log p(x_t|x_0) p(x_0|x_t) dx_0 = \mathbb{E}_{p(x_0|x_t)} [\nabla_{x_t} \log p(x_t|x_0)] ∇ x t log p ( x t ) = ∫ ∇ x t log p ( x t ∣ x 0 ) p ( x 0 ∣ x t ) d x 0 = E p ( x 0 ∣ x t ) [ ∇ x t log p ( x t ∣ x 0 )]
结论:边缘分数等于条件分数的后验期望。
4. Score Matching 目标的等价性证明
我们要对比两个目标函数:
Score Matching (SM): 直接匹配边缘分数。
J S M ( θ ) = E p ( x t ) [ 1 2 ∥ s θ ( x t ) − ∇ x t log p ( x t ) ∥ 2 ] J_{SM}(\theta) = \mathbb{E}_{p(x_t)} \left[ \frac{1}{2} \| s_\theta(x_t) - \nabla_{x_t} \log p(x_t) \|^2 \right] J SM ( θ ) = E p ( x t ) [ 2 1 ∥ s θ ( x t ) − ∇ x t log p ( x t ) ∥ 2 ]
Denoising Score Matching (DSM): 匹配条件分数(DMD 实际采用的)。
J D S M ( θ ) = E p ( x 0 , x t ) [ 1 2 ∥ s θ ( x t ) − ∇ x t log p ( x t ∣ x 0 ) ∥ 2 ] J_{DSM}(\theta) = \mathbb{E}_{p(x_0, x_t)} \left[ \frac{1}{2} \| s_\theta(x_t) - \nabla_{x_t} \log p(x_t|x_0) \|^2 \right] J D SM ( θ ) = E p ( x 0 , x t ) [ 2 1 ∥ s θ ( x t ) − ∇ x t log p ( x t ∣ x 0 ) ∥ 2 ]
推导过程:
利用全期望公式 E p ( x 0 , x t ) [ ⋅ ] = E p ( x t ) [ E p ( x 0 ∣ x t ) [ ⋅ ] ] \mathbb{E}_{p(x_0, x_t)}[\cdot] = \mathbb{E}_{p(x_t)}[\mathbb{E}_{p(x_0|x_t)}[\cdot]] E p ( x 0 , x t ) [ ⋅ ] = E p ( x t ) [ E p ( x 0 ∣ x t ) [ ⋅ ]] ,将 J D S M J_{DSM} J D SM 展开:
J D S M ( θ ) = E p ( x t ) E p ( x 0 ∣ x t ) [ 1 2 ∥ s θ ( x t ) ∥ 2 − s θ ( x t ) ⋅ ∇ x t log p ( x t ∣ x 0 ) + 1 2 ∥ ∇ x t log p ( x t ∣ x 0 ) ∥ 2 ] J_{DSM}(\theta) = \mathbb{E}_{p(x_t)} \mathbb{E}_{p(x_0|x_t)} \left[ \frac{1}{2} \| s_\theta(x_t) \|^2 - s_\theta(x_t) \cdot \nabla_{x_t} \log p(x_t|x_0) + \frac{1}{2} \| \nabla_{x_t} \log p(x_t|x_0) \|^2 \right] J D SM ( θ ) = E p ( x t ) E p ( x 0 ∣ x t ) [ 2 1 ∥ s θ ( x t ) ∥ 2 − s θ ( x t ) ⋅ ∇ x t log p ( x t ∣ x 0 ) + 2 1 ∥ ∇ x t log p ( x t ∣ x 0 ) ∥ 2 ]
将内部期望 E p ( x 0 ∣ x t ) \mathbb{E}_{p(x_0|x_t)} E p ( x 0 ∣ x t ) 逐项作用:
第一项 :1 2 ∥ s θ ( x t ) ∥ 2 \frac{1}{2} \| s_\theta(x_t) \|^2 2 1 ∥ s θ ( x t ) ∥ 2 与 x 0 x_0 x 0 无关,保持不变。
第二项 :− s θ ( x t ) ⋅ E p ( x 0 ∣ x t ) [ ∇ x t log p ( x t ∣ x 0 ) ] - s_\theta(x_t) \cdot \mathbb{E}_{p(x_0|x_t)} [\nabla_{x_t} \log p(x_t|x_0)] − s θ ( x t ) ⋅ E p ( x 0 ∣ x t ) [ ∇ x t log p ( x t ∣ x 0 )] 。根据第 3 节的引理,这等于 − s θ ( x t ) ⋅ ∇ x t log p ( x t ) - s_\theta(x_t) \cdot \nabla_{x_t} \log p(x_t) − s θ ( x t ) ⋅ ∇ x t log p ( x t ) 。
第三项 :与参数 θ \theta θ 无关,在优化时可视为常数 C C C 。
整合后得到:
J D S M ( θ ) = E p ( x t ) [ 1 2 ∥ s θ ( x t ) ∥ 2 − s θ ( x t ) ⋅ ∇ x t log p ( x t ) ] + C J_{DSM}(\theta) = \mathbb{E}_{p(x_t)} \left[ \frac{1}{2} \| s_\theta(x_t) \|^2 - s_\theta(x_t) \cdot \nabla_{x_t} \log p(x_t) \right] + C J D SM ( θ ) = E p ( x t ) [ 2 1 ∥ s θ ( x t ) ∥ 2 − s θ ( x t ) ⋅ ∇ x t log p ( x t ) ] + C
对比 J S M J_{SM} J SM 的展开式:
J S M ( θ ) = E p ( x t ) [ 1 2 ∥ s θ ( x t ) ∥ 2 − s θ ( x t ) ⋅ ∇ x t log p ( x t ) + const ] J_{SM}(\theta) = \mathbb{E}_{p(x_t)} \left[ \frac{1}{2} \| s_\theta(x_t) \|^2 - s_\theta(x_t) \cdot \nabla_{x_t} \log p(x_t) + \text{const} \right] J SM ( θ ) = E p ( x t ) [ 2 1 ∥ s θ ( x t ) ∥ 2 − s θ ( x t ) ⋅ ∇ x t log p ( x t ) + const ]
结论:
J D S M ( θ ) = J S M ( θ ) + Const J_{DSM}(\theta) = J_{SM}(\theta) + \text{Const} J D SM ( θ ) = J SM ( θ ) + Const
这意味着两者的梯度 ∇ θ \nabla_\theta ∇ θ 是完全一致的。优化易于计算的条件分数目标,在统计期望上完全等价于优化复杂的边缘分布目标。
5. 总结与直观理解
蒙特卡洛积分的视角 :直接计算边缘分布需要对全局进行积分。通过转化为条件分数目标,我们实际上是在进行蒙特卡洛采样——每次采样一个样本对 ( x 0 , x t ) (x_0, x_t) ( x 0 , x t ) ,计算其梯度。随着训练 Batch 的累积,这些样本梯度的平均值会精确指向全局分布对齐的方向。
DMD 的工程实现 :在 DMD 中,由于 p ( x t ∣ x 0 ) p(x_t|x_0) p ( x t ∣ x 0 ) 通常是标准的高斯加噪过程,其分数 ∇ x t log p ( x t ∣ x 0 ) \nabla_{x_t} \log p(x_t|x_0) ∇ x t log p ( x t ∣ x 0 ) 有解析解(即 − ϵ σ t -\frac{\epsilon}{\sigma_t} − σ t ϵ ),这使得大规模训练变得简单且高效。
通过这一数学证明,我们不仅确认了 DMD 损失函数的合理性,也深刻理解了扩散模型为何能通过“去噪”这一简单任务,最终学会生成复杂的真实分布。