TL;DR: 本文推导了扩散模型中Score Function与噪声预测之间的精确数学关系,并解析了Classifier-Free Guidance的工作原理及其在采样过程中的应用。
Score Function与噪声预测的关系推导
我们将推导扩散模型中的score function $\nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t)$与噪声预测 $\epsilon_\theta(\mathbf{x}_t)$ 之间的数学关系。这是一个经典的结论,笔者在阅读 Classifier-Free Guidance 的相关资料时,大多都是跳步处理,应是默认了读者有相关的背景知识。但对于想要刨根究底的读者来说,这样有些不方便,所以笔者决定写一篇笔记,详细推导一下。本文假设读者对 Diffusion 有基本的背景知识,知道前向加噪过程、逆向去噪过程、以及扩散模型的训练目标。
1. 基本前向过程
在扩散模型中,前向加噪过程定义为:
$$ \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon}, \quad \boldsymbol{\epsilon} \sim \mathcal{N}(0, I) $$可以改写噪声项为:
$$ \boldsymbol{\epsilon} = \frac{\mathbf{x}_t - \sqrt{\bar{\alpha}_t}\mathbf{x}_0}{\sqrt{1-\bar{\alpha}_t}} $$2. 条件概率分布
从加噪过程可知,给定$\mathbf{x}_0$的条件下,$\mathbf{x}_t$的条件概率分布为:
$$ p(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t}\mathbf{x}_0, (1-\bar{\alpha}_t)I) $$3. Score Function的推导
我们的目标是计算 $\nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t)$。首先使用全概率公式:
$$ p(\mathbf{x}_t) = \int p(\mathbf{x}_t|\mathbf{x}_0)p(\mathbf{x}_0)d\mathbf{x}_0 $$对上式取对数并求关于$\mathbf{x}_t$的梯度:
$$ \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) = \frac{\nabla_{\mathbf{x}_t}p(\mathbf{x}_t)}{p(\mathbf{x}_t)} $$将边缘概率的梯度展开:
$$ \begin{align} \nabla_{\mathbf{x}_t}p(\mathbf{x}_t) &= \nabla_{\mathbf{x}_t}\int p(\mathbf{x}_t|\mathbf{x}_0)p(\mathbf{x}_0)d\mathbf{x}_0 \\ &= \int \nabla_{\mathbf{x}_t}p(\mathbf{x}_t|\mathbf{x}_0)p(\mathbf{x}_0)d\mathbf{x}_0 \end{align} $$因此:
$$ \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) = \frac{\int \nabla_{\mathbf{x}_t}p(\mathbf{x}_t|\mathbf{x}_0)p(\mathbf{x}_0)d\mathbf{x}_0}{p(\mathbf{x}_t)} $$将上式重写为:
$$ \begin{align} \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) &= \int \frac{p(\mathbf{x}_t|\mathbf{x}_0)p(\mathbf{x}_0)}{p(\mathbf{x}_t)}\cdot\frac{\nabla_{\mathbf{x}_t}p(\mathbf{x}_t|\mathbf{x}_0)}{p(\mathbf{x}_t|\mathbf{x}_0)}d\mathbf{x}_0 \end{align} $$根据贝叶斯定理,$\frac{p(\mathbf{x}_t|\mathbf{x}_0)p(\mathbf{x}_0)}{p(\mathbf{x}_t)} = p(\mathbf{x}_0|\mathbf{x}_t)$, 并且 $\frac{\nabla_{\mathbf{x}_t}p(\mathbf{x}_t|\mathbf{x}_0)}{p(\mathbf{x}_t|\mathbf{x}_0)} = \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|\mathbf{x}_0)$,
因此:
$$ \begin{align} \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) &= \int p(\mathbf{x}_0|\mathbf{x}_t)\nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|\mathbf{x}_0)d\mathbf{x}_0 \\ &= \mathbb{E}_{p(\mathbf{x}_0|\mathbf{x}_t)}[\nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|\mathbf{x}_0)] \end{align} $$4. 计算条件概率的梯度
对于正态分布 $p(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t}\mathbf{x}_0, (1-\bar{\alpha}_t)I)$, 其对数概率的梯度为:
$$ \begin{align} \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|\mathbf{x}_0) &= -\frac{1}{1-\bar{\alpha}_t}(\mathbf{x}_t - \sqrt{\bar{\alpha}_t}\mathbf{x}_0) \end{align} $$根据前向过程中的噪声表达式 $\mathbf{x}_t - \sqrt{\bar{\alpha}_t}\mathbf{x}_0 = \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon}$,代入上式:
$$ \begin{align} \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|\mathbf{x}_0) &= -\frac{1}{1-\bar{\alpha}_t}\sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon} \\ &= -\frac{1}{\sqrt{1-\bar{\alpha}_t}}\boldsymbol{\epsilon} \end{align} $$5. 最终结果
将上式代入期望,得到:
$$ \begin{align} \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) &= \mathbb{E}_{p(\mathbf{x}_0|\mathbf{x}_t)}\left[-\frac{1}{\sqrt{1-\bar{\alpha}_t}}\boldsymbol{\epsilon}\right] \\ &= -\frac{1}{\sqrt{1-\bar{\alpha}_t}}\mathbb{E}_{p(\mathbf{x}_0|\mathbf{x}_t)}[\boldsymbol{\epsilon}] \end{align} $$在扩散模型中,我们训练神经网络 $\epsilon_\theta(\mathbf{x}_t)$ 来预测噪声 $\boldsymbol{\epsilon}$,当模型收敛时,它近似等价于 条件期望 $\mathbb{E}_{p(\mathbf{x}_0|\mathbf{x}_t)}[\boldsymbol{\epsilon}]$ (详见附录),因此我们得到:
$$ \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) = -\frac{1}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(\mathbf{x}_t) $$这就是扩散模型中score function与噪声预测网络之间的精确关系。
Classifier-Free Guidance (CFG) 及采样算法
1. CFG 原理推导
在生成有条件图像时,我们希望利用条件信息 $c$ 来引导扩散模型的生成过程。Classifier-Free Guidance (CFG) 是一种不需要额外分类器的条件引导方法。
基于前面的推导,我们已知无条件扩散模型的 score function 为:
$$ \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) = -\frac{1}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(\mathbf{x}_t) $$同理,条件扩散模型的 score function 为:
$$ \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|c) = -\frac{1}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(\mathbf{x}_t, c) $$根据贝叶斯定理,我们有:
$$ p(\mathbf{x}_t|c) \propto p(c|\mathbf{x}_t)p(\mathbf{x}_t) $$取对数并求梯度:
$$ \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|c) = \nabla_{\mathbf{x}_t}\log p(c|\mathbf{x}_t) + \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) $$CFG 的核心是引入一个缩放因子 $w$,对条件梯度进行强化:
$$ \begin{align} \nabla_{\mathbf{x}_t}\log p_\text{CFG}(\mathbf{x}_t|c) &= \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) + w \cdot (\nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|c) - \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t)) \\ &= (1-w)\nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t) + w \cdot \nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t|c) \end{align} $$将 score function 与噪声预测的关系代入:
$$ \begin{align} -\frac{1}{\sqrt{1-\bar{\alpha}_t}}\hat{\epsilon}_\theta(\mathbf{x}_t, c) &= -\frac{1-w}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(\mathbf{x}_t) - \frac{w}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(\mathbf{x}_t, c) \\ \end{align} $$化简得到 CFG 的噪声预测公式:
$$ \hat{\epsilon}_\theta(\mathbf{x}_t, c) = (1-w)\epsilon_\theta(\mathbf{x}_t) + w \cdot \epsilon_\theta(\mathbf{x}_t, c) $$更常见的形式是使用 $w' = w - 1$,得到:
$$ \hat{\epsilon}_\theta(\mathbf{x}_t, c) = \epsilon_\theta(\mathbf{x}_t, c) + w' \cdot (\epsilon_\theta(\mathbf{x}_t, c) - \epsilon_\theta(\mathbf{x}_t)) $$当 $w' > 0$ 时,条件信息的影响被放大,生成结果更加符合条件要求。
2. 使用 CFG 的采样算法
下面给出基于 DDIM (Denoising Diffusion Implicit Models) 的 CFG 采样算法. DDIM 采样的一般公式为(推导略,感兴趣的读者可以参考 DDIM 的相关资料):
$$ \mathbf{x}_{t-1} = \sqrt{\alpha_{t-1}}\left(\frac{\mathbf{x}_t - \sqrt{1-\alpha_t}\epsilon_\theta(\mathbf{x}_t)}{\sqrt{\alpha_t}}\right) + \sqrt{1-\alpha_{t-1}-\sigma_t^2} \cdot \epsilon_\theta(\mathbf{x}_t) + \sigma_t \boldsymbol{z} $$其中 $\boldsymbol{z} \sim \mathcal{N}(0, I)$,$\sigma_t$ 控制采样的随机性,当 $\sigma_t = 0$ 时为确定性采样。
将 CFG 公式引入 DDIM 采样中,得到完整的 CFG-DDIM 采样算法:
$$ \begin{array}{ll} 1 & \textbf{Input. } \text{条件信息 } c, \text{ 引导权重 } w, \text{ 采样步数 } N \\ 2 & \textbf{Output. } \text{生成样本 } \mathbf{x}_0\\ 3 & \textbf{Method. } \\ 4 & \mathbf{x}_N \sim \mathcal{N}(0, I) \text{ // 从标准正态分布采样初始噪声} \\ 5 & \textbf{for } t = N, N-1, \ldots, 1 \text{ do} \\ 6 & \qquad \epsilon_\text{unc} \gets \epsilon_\theta(\mathbf{x}_t) \text{ // 计算无条件噪声预测} \\ 7 & \qquad \epsilon_\text{con} \gets \epsilon_\theta(\mathbf{x}_t, c) \text{ // 计算条件噪声预测} \\ 8 & \qquad \epsilon_\text{cfg} \gets \epsilon_\text{unc} + w \cdot (\epsilon_\text{con} - \epsilon_\text{unc}) \text{ // 合并噪声预测} \\ 9 & \qquad \hat{\mathbf{x}}_0 \gets \frac{\mathbf{x}_t - \sqrt{1-\bar{\alpha}_t} \cdot \epsilon_\text{cfg}}{\sqrt{\bar{\alpha}_t}} \text{ // 预测原始图像} \\ 10 & \qquad \mathbf{x}_{t-1} \gets \sqrt{\alpha_{t-1}} \cdot \hat{\mathbf{x}}_0 + \sqrt{1-\alpha_{t-1}} \cdot \epsilon_\text{cfg} \text{ // 计算上一时间步} \\ 11 & \textbf{return } \mathbf{x}_0 \end{array} $$CFG-DDIM 采样过程中,我们首先计算有条件和无条件的噪声预测,然后根据权重 $w$ 合并它们。较大的 $w$ 会使生成结果更加符合条件要求,但可能降低多样性;较小的 $w$ 则相反。
在实际实现中,通常使用一个模型同时预测条件和无条件的噪声,方法是在训练时随机将一部分条件信息替换为空条件(如空字符串或特殊的空嵌入)。在推理时,将同一批次的 $\mathbf{x}_t$ 分别与条件和空条件一起送入模型,得到两种噪声预测并合并它们。
- CFG 权重 $w$ 是一个重要的超参数,通常在 1.0~20.0 之间选择,不同的任务有不同的最佳值。采样步数 $N$ 也是一个重要参数,较大的步数通常会产生更高质量的结果,但计算成本更高。
附录:均方误差最优解的性质与扩散模型中的应用
当我们训练一个模型 $g(X)$ 来预测变量 $Y$,使用均方误差 (MSE) 作为损失函数时,我们希望最小化:
$$\mathcal{L} = \mathbb{E}[(Y - g(X))^2]$$我们证明,当模型收敛时,最优预测函数是条件期望 $\mathbb{E}[Y|X]$。
这里的数学证明如下:
- 假设我们有任意预测函数 $g(X)$,我们可以把均方误差写成:
- 展开平方项:
- 中间项的期望为零,因为:
具体而言:
$$\mathbb{E}[(Y - \mathbb{E}[Y|X])(\mathbb{E}[Y|X] - g(X))]$$这里使用了叠期望定律 (law of iterated expectations),也称为全期望公式:
$$\mathbb{E}[Z] = \mathbb{E}[\mathbb{E}[Z|X]]$$应用到我们的表达式:
$$\mathbb{E}[(Y - \mathbb{E}[Y|X])(\mathbb{E}[Y|X] - g(X))] = \mathbb{E}[\mathbb{E}[(Y - \mathbb{E}[Y|X])(\mathbb{E}[Y|X] - g(X))|X]]$$关键点在于条件期望 $\mathbb{E}[Y|X]$ 和函数 $g(X)$ 都只依赖于 $X$,所以在给定 $X$ 的条件下,它们是常数。因此:
$$\mathbb{E}[(Y - \mathbb{E}[Y|X])(\mathbb{E}[Y|X] - g(X))|X] = (\mathbb{E}[Y|X] - g(X)) \cdot \mathbb{E}[(Y - \mathbb{E}[Y|X])|X]$$现在,注意到 $\mathbb{E}[(Y - \mathbb{E}[Y|X])|X] = 0$,这是因为:
$$\mathbb{E}[(Y - \mathbb{E}[Y|X])|X] = \mathbb{E}[Y|X] - \mathbb{E}[Y|X] = 0$$这是条件期望的一个基本性质:给定 $X$ 之后,$Y$ 的条件期望 $\mathbb{E}[Y|X]$ 与其实际值 $Y$ 的差的条件期望为 0。$\mathbb{E}(Y|X)$ 和 $\mathbb{E}(\mathbb{E}(Y|X)|X)$ 是相等的, $\mathbb{E}(Y|X)$ 是一个关于 $X$ 的函数。
因此整个表达式等于零。
- 因此简化为:
第一项与 $g(X)$ 无关,第二项是非负的,且当且仅当 $g(X) = \mathbb{E}[Y|X]$ 时取最小值0。
所以,最小化均方误差的最优预测函数就是条件期望 $\mathbb{E}[Y|X]$。
应用到扩散模型中:
- $Y$ 是噪声 $\boldsymbol{\epsilon}$
- $X$ 是有噪声的图像 $\mathbf{x}_t$
- 我们训练 $\epsilon_\theta$ 最小化 $\mathbb{E}[(\boldsymbol{\epsilon} - \epsilon_\theta(\mathbf{x}_t))^2]$
而 $p(x_0|x_t)=p(\frac{x_t - \sqrt{1-\bar{\alpha_t}}\cdot \epsilon}{\sqrt{\bar{\alpha_t}}}|x_t)=p(\epsilon|x_t)=p(Y=\epsilon|X=x_t)$
从而 $E_{p(x_0|x_t)}[\boldsymbol{\epsilon}]$ 就是条件期望 $\mathbb{E}[Y|X]$,它是一个关于 $x_t$ 的函数。所以当模型收敛时,$\epsilon_\theta(x_t)$ 会近似等于 $E_{p(x_0|x_t)}[\boldsymbol{\epsilon}]$。
总结
本文深入探讨了扩散模型的两个核心理论问题。首先,通过严格的数学推导,我们证明了扩散模型中的score function $\nabla_{\mathbf{x}_t}\log p(\mathbf{x}_t)$ 与噪声预测网络$\epsilon_\theta(\mathbf{x}_t)$之间存在精确的数学关系:$\nabla{\mathbf{x}_t}\log p(\mathbf{x}_t) = -\frac{1}{\sqrt{1-\bar{\alpha}_t}}\epsilon_\theta(\mathbf{x}t)$。其次,我们详细解析了Classifier-Free Guidance (CFG)的工作原理。附录中,我们补充证明了为什么训练收敛的噪声预测网络等价于条件噪声期望。
Cited as:
Benhao Huang. (3月 2025). 扩散模型原理:Score Function、噪声预测与CFG引导采样. Husky's Log. https://husky-blog-huskydoges-projects.vercel.app/zh/posts/diffusion/score_fn_cfg/notes/
@article{ benhao2025扩散模型原理:score,
title = "扩散模型原理:Score Function、噪声预测与CFG引导采样",
author = "Benhao Huang",
journal = "Husky's Log",
year = "2025",
month = "3月",
url = "https://husky-blog-huskydoges-projects.vercel.app/zh/posts/diffusion/score_fn_cfg/notes/"
}