数学原理提供了对扩散模型透彻的理解,并将其与其他生成模型技术联系起来。这些原理涵盖了DDPM和DDIM的离散时间公式。这种关联,特别是通过分数匹配和微分方程,说明了这些模型运作的原因,并使得更先进的技术成为可能,包括定制噪声调度和精密采样器。分数匹配:引导逆向过程扩散模型的核心在于逆转一个逐渐向数据添加噪声的过程。这种逆转所需的主要元素是,在任何噪声水平$t$下,知道向哪个方向迈步才能使数据$\mathbf{x}_t$的噪声略微减少,使其更接近原始数据分布。这个方向在数学上由带噪数据的对数概率密度的梯度捕捉,这被称为分数函数:$$ \nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t) $$分数函数指向时间$t$时带噪数据分布$q(\mathbf{x}_t)$中数据密度更高的区域。如果我们可以获得所有$t$的分数函数,就可以用它来引导一个逆向过程,从纯噪声开始并逐渐去除它,以生成逼真数据。分数匹配是训练一个模型(我们称之为$s_\theta(\mathbf{x}_t, t)$)以逼近这个真实分数函数的一个原理。目标是最小化模型输出与真实分数之间的差异:$$ \mathbb{E}{t}\mathbb{E}{\mathbf{x}_t \sim q(\mathbf{x}t)} \left[ || s\theta(\mathbf{x}t, t) - \nabla{\mathbf{x}_t} \log q(\mathbf{x}_t) ||^2_2 \right] $$尽管直接计算真实分数$\nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t)$通常难以处理,但像去噪分数匹配这样的技术表明,这个目标等价于训练一个模型来对样本进行去噪。具体而言,对于扩散模型中常用的高斯噪声扰动,可以表明,DDPM中使用的去噪目标(其中模型$\epsilon_\theta(\mathbf{x}_t, t)$被训练来预测从$\mathbf{x}_0$得到$\mathbf{x}_t$所添加的噪声$\epsilon$)正在隐式地学习分数函数。这种关系非常简单:$$ s_\theta(\mathbf{x}t, t) \approx \nabla{\mathbf{x}_t} \log q(\mathbf{x}t) \approx -\frac{\epsilon\theta(\mathbf{x}_t, t)}{\sigma_t} $$此处,$\sigma_t$表示时间$t$时噪声的标准差。这种根本关联表明,DDPM中的神经网络,尽管被描述为预测噪声,实际上是在学习噪声扰动数据分布的分数。这种视角为模型的架构和目标函数提供了坚实的理论支撑。连续时间视角:随机微分方程 (SDEs)DDPM前向过程$q(\mathbf{x}t | \mathbf{x}{t-1})$的离散步骤可以看作是由随机微分方程(SDE)描述的连续时间过程的近似。SDE描述了一个变量在确定性力(漂移)和随机波动(扩散)的双重影响下,如何在连续时间内演化。对应许多DDPM变体的一种常见SDE公式是方差保持(VP)SDE:$$ d\mathbf{x} = f(\mathbf{x}, t) dt + g(t) d\mathbf{w} $$如下:$d\mathbf{x}$ 是数据$\mathbf{x}$在无穷小时间步$dt$内的无穷小变化。$f(\mathbf{x}, t)$ 是漂移系数,决定变化的确定性部分。对于通常与DDPM关联的VP-SDE,这通常是$f(\mathbf{x}, t) = -\frac{1}{2}\beta(t)\mathbf{x}$,将数据推向原点。$g(t)$ 是扩散系数,缩放所添加随机噪声的幅度。对于VP-SDE, $g(t) = \sqrt{\beta(t)}$,其中$\beta(t)$是连续时间噪声调度。$d\mathbf{w}$ 表示标准维纳过程(布朗运动)的无穷小步骤,提供随机性。这个SDE描述了一个连续的加噪过程,其中数据逐渐漂移向零均值,同时累积高斯噪声,其速率由$\beta(t)$控制。DDPM的离散前向过程$q(\mathbf{x}_t | \mathbf{x}_0)$可以通过从$t=0$到$t=T$求解此SDE来获得。使用ODE逆转时间:概率流SDE视角的真正价值在于考虑逆向过程时显现。SDE理论中有一个已知的结果(归因于Anderson,1982),即前向SDE有一个对应的逆时间SDE,它将噪声映射回数据。这个逆向SDE也有漂移项和扩散项,并且其漂移项直接依赖于前向SDE生成的边缘分布$q_t(\mathbf{x})$的分数函数$\nabla_{\mathbf{x}_t} \log q_t(\mathbf{x}_t)$。VP-SDE的逆向SDE示例如下:$$ d\mathbf{x} = \left[ f(\mathbf{x}, t) - g(t)^2 \nabla_{\mathbf{x}_t} \log q_t(\mathbf{x}_t) \right] dt + g(t) d\overline{\mathbf{w}} $$此处,$d\overline{\mathbf{w}}$是一个逆时间维纳过程,我们将时间从$T$反向积分到$0$。这个SDE告诉我们如何使用分数随机去除噪声。此外,Song et al. (NeurIPS 2020) 表明,与任何由SDE定义的扩散过程相关联,都存在一个由常微分方程(ODE)描述的确定性过程,其轨迹在时间上共享相同的边缘密度$q_t(\mathbf{x})$。这通常被称为概率流ODE。对于VP-SDE,这个ODE是:$$ d\mathbf{x} = \left[ f(\mathbf{x}, t) - \frac{1}{2} g(t)^2 \nabla_{\mathbf{x}_t} \log q_t(\mathbf{x}_t) \right] dt $$注意缺少随机项$d\mathbf{w}$。这个ODE提供了一条从噪声到数据的确定性路径。连接ODE、分数模型和采样这个ODE极为重要:确定性生成: 如果我们从噪声分布$q_T(\mathbf{x})$(通常是标准高斯分布)中选择一个样本$\mathbf{x}_T$,并从$t=T$到$t=0$反向求解这个ODE,则得到的$\mathbf{x}_0$是数据分布中的一个样本。需要分数: 这个ODE需要分数函数$\nabla_{\mathbf{x}_t} \log q_t(\mathbf{x}_t)$。实际实施: 我们不知道真实分数,但我们已经训练了一个模型$s_\theta(\mathbf{x}t, t)$(或等价地,$\epsilon\theta(\mathbf{x}t, t)$)来逼近它!通过将我们学习到的分数模型$s\theta$代入ODE,我们获得了一种生成样本的实用方法:$$ d\mathbf{x} \approx \left[ f(\mathbf{x}, t) - \frac{1}{2} g(t)^2 s_\theta(\mathbf{x}_t, t) \right] dt $$代入$f(\mathbf{x}, t) = -\frac{1}{2}\beta(t)\mathbf{x}$、$g(t)^2 = \beta(t)$以及$s_\theta(\mathbf{x}t, t) \approx -\epsilon\theta(\mathbf{x}_t, t)/\sigma_t$(其中$\sigma_t^2$是时间$t$的方差),就将其直接关联回扩散模型采样中执行的操作。高级采样器的支撑: DDIM采样可以被解释为求解此概率流ODE的一种特定数值方法(具体来说,是一阶离散化)。这说明了其确定性以及比DDPM使用更大步长的能力。此外,这种ODE公式使我们能够应用更精密的数值ODE求解器(如Runge-Kutta方法、DPM-Solver、UniPC等),从而可能以更少的函数评估(即更少的模型推理步骤)获得更高的精度,从而实现更快的采样,我们将在第6章中讨论。digraph G { rankdir=LR; node [shape=box, style=filled, fontname="sans-serif", color="#dee2e6", fillcolor="#e9ecef"]; edge [fontname="sans-serif", color="#495057"]; subgraph cluster_forward { label = "前向过程 (数据到噪声)"; bgcolor="#f8f9fa"; style="dashed"; node [color="#74c0fc", fillcolor="#a5d8ff"]; Data [label="数据 x_0"]; SDE_F [label="前向SDE\ndx = f(x,t)dt + g(t)dw"]; Noise [label="噪声 x_T ~ N(0,I)"]; Data -> SDE_F [label=" 连续时间 t=0..T"]; SDE_F -> Noise; } subgraph cluster_learning { label = "模型训练"; bgcolor="#fff9db"; style="dashed"; node [color="#ffd43b", fillcolor="#ffec99"]; ScoreModel [label="分数模型 s_θ(x_t, t)\n(通过去噪目标)"]; TrueScore [label="真实分数\n∇log q(x_t)", style=dotted, color="#adb5bd"]; ScoreModel -> TrueScore [label="逼近", style=dashed, arrowhead=none, color="#868e96"]; } subgraph cluster_reverse { label = "逆向过程 (噪声到数据)"; bgcolor="#d3f9d8"; style="dashed"; node [color="#69db7c", fillcolor="#b2f2bb"]; ODE [label="概率流ODE\ndx = [f - 0.5*g^2*∇log q]dt"]; SDE_R [label="逆向SDE\ndx = [f - g^2*∇log q]dt + g d(w_bar)"]; Sampling [label="生成样本 x_0"]; } SDE_F -> TrueScore [label=" 定义 q(x_t)", style=dashed, color="#868e96"]; TrueScore -> ODE [label="漂移所需", style=dashed, color="#868e96"]; TrueScore -> SDE_R [label="漂移所需", style=dashed, color="#868e96"]; ScoreModel -> ODE [label=" 求解器使用"]; ScoreModel -> SDE_R [label=" 采样器使用"]; Noise -> ODE [label=" 初始条件 (t=T)"]; Noise -> SDE_R [label=" 初始条件 (t=T)"]; ODE -> Sampling [label=" ODE求解器 (例如,DDIM, DPM-Solver)"]; SDE_R -> Sampling [label=" SDE求解器 (例如,DDPM)"]; }图示了前向SDE、分数函数、学习到的分数模型、逆向SDE和用于采样的概率流ODE之间的关系。这种视角,通过分数匹配将离散扩散步骤与底层的连续时间SDE和ODE关联起来,是理解许多高级技术的根基。它阐明了噪声调度的作用(与$\beta(t)$或$g(t)$相关),并激励人们寻找更好的ODE求解器以实现更快、更准确的采样。当我们继续讨论定制噪声调度和学习到的方差时,请牢记这个SDE/ODE框架,将其视为离散实现旨在有效逼近的连续时间理想模型。