← 上一章 | 第4章 / 共14章 | 下一章 → |
基于分数的生成模型(Score-based Generative Models)提供了理解扩散模型的另一个重要视角。通过直接学习数据分布的分数函数(score function,即对数概率密度的梯度),我们可以构建强大的生成模型。本章将深入探讨分数匹配、Langevin动力学以及它们与扩散模型的深层联系。从NCSN到Score SDE,我们将看到分数模型如何与DDPM统一在同一框架下。
分数函数(score function)是概率论和统计学中的一个基本概念,它定义为对数概率密度函数关于数据的梯度:
\[\nabla_x \log p(x) = \frac{\nabla_x p(x)}{p(x)}\]这个看似简单的定义蕴含着深刻的意义。为了真正理解分数函数的本质,让我们从多个角度来剖析它。
直观理解:概率景观的”指南针”
想象概率分布 $p(x)$ 是一个山地地形,其中高度代表概率密度。分数函数就像是站在任意一点时的”最陡上升方向”——它指向概率密度增长最快的方向。这个比喻虽然简单,却揭示了分数函数的核心作用:它告诉我们如何在概率空间中”导航”。
更具体地说,分数函数回答了一个关键问题:从当前位置出发,应该向哪个方向移动才能最快地到达高概率区域?这种局部信息看似有限,但当我们知道整个空间中每一点的分数函数时,就能完整地重构出整个概率分布。
数学视角:从概率到对数概率的转换
为什么我们要考虑对数概率的梯度,而不是概率本身的梯度?这里有几个深层原因:
数值稳定性:概率值通常很小(尤其在高维空间),直接计算梯度容易产生数值下溢。对数变换将乘法转为加法,大大提高了数值稳定性。
归一化的优雅处理:对数变换将归一化常数变成了加法常数,在求梯度时自然消失。这是分数函数最优美的性质之一。
与信息论的联系:对数概率与信息量直接相关,分数函数因此与Fisher信息矩阵等信息论概念有着自然的联系。
让我们通过几个例子来深入理解这些概念。
例1:一维高斯分布的深入分析
对于标准正态分布 $p(x) = \frac{1}{\sqrt{2\pi}} e^{-\frac{x^2}{2}}$ :
\[\log p(x) = -\frac{x^2}{2} - \frac{1}{2}\log(2\pi)\]分数函数为:
\[\nabla_x \log p(x) = -x\]这个简单的结果蕴含着丰富的信息:
线性性质:分数函数是 $x$ 的线性函数,这意味着”拉力”与偏离中心的距离成正比。这就像弹簧的胡克定律——偏离越远,恢复力越大。
例2:多峰分布的复杂性
考虑一个双峰高斯混合分布:
\[p(x) = \frac{1}{2}\mathcal{N}(x; -2, 0.5) + \frac{1}{2}\mathcal{N}(x; 2, 0.5)\]其分数函数为:
\[\nabla_x \log p(x) = \frac{\frac{1}{2}e^{-\frac{(x+2)^2}{1}} \cdot \frac{-(x+2)}{0.5} + \frac{1}{2}e^{-\frac{(x-2)^2}{1}} \cdot \frac{-(x-2)}{0.5}}{\frac{1}{2}e^{-\frac{(x+2)^2}{1}} + \frac{1}{2}e^{-\frac{(x-2)^2}{1}}}\]这个复杂的表达式展现了多峰分布的几个关键特征:
非线性动力学:不同于单峰高斯的线性分数函数,多峰分布的分数函数是高度非线性的。
吸引域:存在一个分界点(鞍点),将空间分为两个吸引域。每个域内的点都会被”拉向”相应的峰。
临界行为:在两峰之间的鞍点处,分数函数为零,但这是一个不稳定平衡点。微小的扰动会导致系统流向某一个峰。
🔬 研究线索: 分数函数的这种”指向高概率区域”的性质是否总是成立?考虑多峰分布的情况,分数函数在鞍点附近的行为如何?这涉及到动力系统理论中的稳定性分析。
分数函数在机器学习和统计学中扮演着核心角色,其重要性远超其简单的数学定义。让我们深入探讨为什么分数函数如此关键。
在实际应用中,我们经常遇到只知道未归一化密度的情况。许多复杂的概率模型(如马尔可夫随机场、能量模型)可以写成:
\[p(x) = \frac{1}{Z} \exp(-E(x)), \quad Z = \int \exp(-E(x)) dx\]这里的配分函数 $Z$ 通常是计算瓶颈——在高维空间中,这个积分往往是不可解的。但神奇的是,分数函数完全绕过了这个问题:
\[\nabla_x \log p(x) = \nabla_x \log \frac{1}{Z} + \nabla_x \log \exp(-E(x)) = 0 - \nabla_x E(x) = -\nabla_x E(x)\]这意味着:
实例:Ising模型的深入分析
在统计物理中的Ising模型中,系统能量为:
\[E(x) = -J \sum_{\langle i,j \rangle} x_i x_j - h \sum_i x_i\]其中 $x_i \in {-1, +1}$ 表示自旋状态,$J$ 是耦合强度,$h$ 是外场。
配分函数 $Z = \sum_{{x}} \exp(-\beta E(x))$ 的计算是 #P-hard 问题——对于 $n$ 个自旋,需要求和 $2^n$ 项。但在连续松弛下,能量的梯度却很容易计算:
\[\nabla_{x_i} E(x) = -J \sum_{j \in \mathcal{N}(i)} x_j - h\]这个例子完美展示了分数函数方法的威力:即使在配分函数不可计算的情况下,我们仍然可以进行有意义的推断和采样。
💡 开放问题: 如何设计高效的分数函数估计器,使其在高维空间中仍然准确?当前的神经网络架构是否最优?考虑引入物理约束或对称性。
分数函数不仅描述了概率分布的静态性质,更重要的是它定义了一个动态系统。通过分数函数,我们可以构造各种采样算法。
Langevin动力学:最基本的分数驱动采样
\[x_{t+1} = x_t + \epsilon \nabla_x \log p(x_t) + \sqrt{2\epsilon} \xi_t\]其中 $\xi_t \sim \mathcal{N}(0, I)$ 。这个更新规则有着深刻的物理意义:
这三项的平衡确保了算法最终收敛到目标分布 $p(x)$。更深入地说,这个过程满足细致平衡条件(detailed balance),这是MCMC方法正确性的关键。
从离散到连续:随机微分方程视角
当步长 $\epsilon \to 0$ 时,我们得到连续时间的Langevin SDE:
\[dX_t = \nabla \log p(X_t)dt + \sqrt{2}dW_t\]这个方程揭示了分数函数与扩散过程的深层联系——这正是后续章节将要探讨的核心内容。
⚡ 实现挑战: Langevin采样在高维空间收敛极慢。关键挑战包括:
可能的解决方案包括预条件器(借鉴 torch.optim.LBFGS
的思想)、自适应步长、和并行tempering等技术。
从几何角度看,分数函数定义了数据流形上的一个向量场。这个视角不仅优美,而且为理解和设计算法提供了强大的工具。
向量场的直观理解
想象在概率密度定义的”地形”上,每一点都有一个箭头,指示着”上山”的方向。这些箭头的集合就是分数函数定义的向量场。这个向量场告诉我们:
性质1:梯度流的不动点与临界点分析
\[\nabla_x \log p(x^*) = 0 \Leftrightarrow x^* \text{ 是 } p(x) \text{ 的局部极值点}\]但这只是故事的开始。通过分析Hessian矩阵 $\nabla^2 \log p(x^*)$,我们可以进一步分类这些临界点:
鞍点在高维空间中尤其重要——它们形成了连接不同模式的”山脊”和”山谷”。理解这些结构对于设计高效的采样算法至关重要。
性质2:体积收缩与概率流
分数函数的散度具有深刻的几何意义:
\[\nabla \cdot (\nabla \log p(x)) = \nabla^2 \log p(x) + \|\nabla \log p(x)\|^2\]让我们拆解这个公式:
这个散度告诉我们向量场的”源”和”汇”:
性质3:与信息几何的联系
分数函数与Fisher信息矩阵有着自然的联系:
\[I(\theta) = \mathbb{E}_{p(x|\theta)}[\nabla_\theta \log p(x|\theta) \nabla_\theta \log p(x|\theta)^T]\]这建立了概率模型的参数空间与数据空间之间的桥梁。Fisher信息定义了参数空间的自然度量,而分数函数则描述了数据空间的几何结构。
流形上的推广
当数据位于低维流形上时,欧几里德空间的分数函数需要推广。设数据位于 $d$ 维流形 $\mathcal{M} \subset \mathbb{R}^n$ 上,则需要考虑:
这些考虑导致了流形分数函数的定义:
\[\nabla_\mathcal{M} \log p(x) = \text{Proj}_{T_x\mathcal{M}}(\nabla \log p(x))\]其中 $\text{Proj}_{T_x\mathcal{M}}$ 是到切空间的投影算子。
🌟 理论缺口: 分数函数的全局几何性质还未被完全理解。特别是:
学习分数函数是基于分数的生成模型的核心。但我们面临一个根本性挑战:如何从有限的数据样本中学习连续的分数函数?本节将探讨这个问题的优雅解决方案。
给定数据分布 $p_{data}(x)$ 的样本,如何学习其分数函数?这个问题看似循环:要学习分数函数,似乎需要知道真实的概率密度,但这正是我们想要避免的。Hyvärinen (2005) 的分数匹配(Score Matching)方法提供了一个巧妙的解决方案。
朴素想法与其问题
最直接的想法是最小化模型分数与真实分数的差异:
\[\mathcal{L}_{naive} = \mathbb{E}_{p_{data}}\left[\frac{1}{2}\|\nabla_x \log p_{model}(x) - \nabla_x \log p_{data}(x)\|^2\right]\]但这里有个致命问题:我们不知道 $\nabla_x \log p_{data}(x)$ !如果知道真实分数,我们就已经解决了问题。这似乎是个死胡同。
Hyvärinen的天才洞察:分部积分的魔法
Hyvärinen的关键洞察是:通过巧妙的数学变换,可以将不可计算的目标函数转换为可计算的形式。让我们详细推导这个过程。
首先,展开平方项: \(\mathcal{L}_{naive} = \mathbb{E}_{p_{data}}\left[\frac{1}{2}\|\nabla_x \log p_{model}(x)\|^2 - \nabla_x \log p_{model}(x)^T \nabla_x \log p_{data}(x) + \frac{1}{2}\|\nabla_x \log p_{data}(x)\|^2\right]\)
最后一项与模型无关,可以忽略。关键是如何处理中间的交叉项。这里就是分部积分发挥作用的地方:
\[\mathbb{E}_{p_{data}}[\nabla_x \log p_{model}(x)^T \nabla_x \log p_{data}(x)]\]利用 $\nabla_x \log p_{data}(x) = \frac{\nabla_x p_{data}(x)}{p_{data}(x)}$,我们有:
\[= \int p_{data}(x) \nabla_x \log p_{model}(x)^T \frac{\nabla_x p_{data}(x)}{p_{data}(x)} dx = \int \nabla_x \log p_{model}(x)^T \nabla_x p_{data}(x) dx\]现在应用分部积分(假设边界条件合适):
\[= -\int p_{data}(x) \cdot \text{tr}(\nabla_x^2 \log p_{model}(x)) dx = -\mathbb{E}_{p_{data}}[\text{tr}(\nabla_x^2 \log p_{model}(x))]\]因此,我们得到了可计算的目标函数:
\[\mathcal{L}_{SM} = \mathbb{E}_{p_{data}}\left[\text{tr}(\nabla_x^2 \log p_{model}(x)) + \frac{1}{2}\|\nabla_x \log p_{model}(x)\|^2\right] + \text{const}\]这个结果的美妙之处在于:
深入理解:几何解释
从几何角度看,分数匹配在做什么?它实际上在最小化两个向量场之间的”能量”:
但巧妙的是,我们不需要显式地知道第二个向量场,而是通过数据分布的”形状”(通过Hessian的迹体现)来间接地约束模型。
🔬 研究线索: 分数匹配的这种”隐式”特性是否可以推广到其他问题?考虑:
经典分数匹配虽然理论优雅,但在实践中面临严重的计算挑战。计算Hessian矩阵的迹需要 $O(d)$ 次反向传播(其中 $d$ 是数据维度),在高维情况下代价高昂。Vincent (2011) 提出的去噪分数匹配(Denoising Score Matching, DSM)提供了一个巧妙且高效的替代方案。
核心思想:从去噪中学习分数
DSM的核心洞察是:如果我们知道如何去噪,就知道了分数函数。这个联系初看并不明显,让我们深入探讨其中的原理。
考虑向干净数据添加已知噪声的过程:
\[\tilde{x} = x + \sigma \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)\]加噪后的数据分布为:
\[p_\sigma(\tilde{x}) = \int p_{data}(x) \mathcal{N}(\tilde{x}; x, \sigma^2 I) dx\]这是原始分布与高斯核的卷积。关键的数学结果是,加噪数据的分数函数可以表示为:
\[\nabla_{\tilde{x}} \log p_\sigma(\tilde{x}) = \frac{\mathbb{E}_{p(x|\tilde{x})}[x] - \tilde{x}}{\sigma^2} = -\frac{\mathbb{E}_{p(\epsilon|\tilde{x})}[\epsilon]}{\sigma}\]这个公式揭示了深刻的联系:
去噪分数匹配目标函数
基于上述洞察,DSM的目标函数为:
\[\mathcal{L}_{DSM} = \mathbb{E}_{p_{data}(x)}\mathbb{E}_{\epsilon}\left[\frac{1}{2}\|s_\theta(\tilde{x}, \sigma) + \frac{\epsilon}{\sigma}\|^2\right]\]其中 $s_\theta(\tilde{x}, \sigma)$ 是我们要学习的分数函数模型。这个目标函数的优美之处在于:
理论保证:DSM的一致性
一个自然的问题是:学习加噪数据的分数函数如何帮助我们学习原始数据的分数?关键在于噪声水平 $\sigma$ 的选择。
当 $\sigma \to 0$ 时,有: \(\nabla_{\tilde{x}} \log p_\sigma(\tilde{x}) \to \nabla_x \log p_{data}(x)\)
这意味着,在小噪声极限下,加噪数据的分数收敛到原始数据的分数。但这里有个权衡:
这种权衡直接导致了多尺度方法的发展(见下一节的NCSN)。
DSM的变体与扩展
加权去噪分数匹配:不同噪声水平使用不同权重 \(\mathcal{L}_{weighted} = \mathbb{E}_{\sigma \sim p(\sigma)} \lambda(\sigma) \mathcal{L}_{DSM}(\sigma)\)
条件去噪分数匹配:学习条件分布的分数 \(s_\theta(\tilde{x}, y, \sigma) \approx \nabla_{\tilde{x}} \log p(\tilde{x}|y)\)
流形去噪分数匹配:当数据位于低维流形时的适配
💡 开放问题:
除了去噪方法,还有另一种巧妙的方式来避免计算完整的Hessian矩阵:使用随机投影。Song et al. (2020) 提出的切片分数匹配(Sliced Score Matching, SSM)提供了一种在计算效率和估计精度之间的优雅平衡。
核心思想:从高维到一维
计算 $d \times d$ Hessian矩阵的迹需要 $O(d)$ 次反向传播。SSM的关键洞察是:我们可以通过随机投影将这个高维问题转化为一系列一维问题。
对于随机方向 $v \sim \mathcal{N}(0, I)$,考虑分数函数在该方向上的投影: \(s_v(x) = v^T \nabla_x \log p(x)\)
这个一维函数的导数是: \(\frac{\partial s_v}{\partial v^T x} = v^T \nabla_x^2 \log p(x) v\)
神奇的是,Hessian矩阵的迹可以表示为这些方向导数的期望: \(\text{tr}(\nabla_x^2 \log p(x)) = \mathbb{E}_{v \sim \mathcal{N}(0,I)}[v^T \nabla_x^2 \log p(x) v]\)
切片分数匹配目标函数
基于这个洞察,SSM的目标函数为:
\[\mathcal{L}_{SSM} = \mathbb{E}_{p_{data}}\mathbb{E}_{v \sim \mathcal{N}(0,I)}\left[v^T\nabla_x^2 \log p_{model}(x)v + \frac{1}{2}(v^T\nabla_x \log p_{model}(x))^2\right]\]这个目标函数的计算只需要:
使用 torch.autograd.grad
可以高效地计算这些量,避免了构造完整的Hessian矩阵。
理论分析:方差与偏差的权衡
SSM通过蒙特卡洛估计Hessian的迹,这引入了额外的方差。关键问题是:需要多少个随机投影才能得到准确的估计?
理论结果表明,估计误差的方差为: \(\text{Var}[\hat{\mathcal{L}}_{SSM}] \propto \frac{1}{K} \|\nabla_x^2 \log p(x)\|_F^2\)
其中 $K$ 是使用的随机投影数量,$|\cdot|_F$ 是Frobenius范数。这意味着:
实现技巧与优化
# 使用 torch.autograd.grad 计算 v^T ∇s(x)
vjp = torch.autograd.grad(s, x, v, retain_graph=True)[0]
批量投影:同时处理多个随机方向可以提高GPU利用率
SSM vs DSM:如何选择?
两种方法各有优劣:
⚡ 实现挑战与开放问题:
Song & Ermon (2019) 的关键创新是引入多个噪声尺度:
\[\{\sigma_i\}_{i=1}^L, \quad \sigma_1 > \sigma_2 > \cdots > \sigma_L\]动机:
🌟 理论缺口: 噪声尺度的选择缺乏严格的理论指导。当前主要依赖经验和网格搜索。能否从信息论或最优控制角度推导最优调度?
NCSN使用退火策略进行采样:
对于每个噪声级别 σ_i:
运行 T 步 Langevin 动力学
逐渐减小步长
💡 开放问题:
NCSN使用带条件的U-Net架构:
⚡ 实现挑战:
torch.nn.Embedding
还是连续编码?Langevin方程描述了布朗粒子在势场中的运动:
\[dX_t = \nabla \log p(X_t)dt + \sqrt{2}dW_t\]这个SDE的平稳分布正是 $p(x)$ 。
🔬 研究线索: Langevin动力学与物理学中的涨落-耗散定理有深刻联系。能否利用这种联系设计更高效的采样算法?考虑引入”记忆”效应或非马尔可夫动力学。
Euler-Maruyama离散化:
\[x_{k+1} = x_k + \epsilon s_\theta(x_k) + \sqrt{2\epsilon}\xi_k\]关键问题:
🌟 理论缺口: 非凸情况下的收敛性分析仍不完整。特别是:
标准Langevin采样很慢,几种加速技术:
其中 $G(x)$ 是预条件矩阵。
动量方法(Hamiltonian Monte Carlo) 引入动量变量,利用哈密顿动力学。
并行链 运行多个温度的Markov链,交换状态。
💡 开放问题:
关键发现:DDPM的去噪目标等价于分数匹配!
DDPM学习:
\[\mathbb{E}[\|\epsilon - \epsilon_\theta(x_t, t)\|^2]\]而加噪数据的分数函数:
\[\nabla_{x_t} \log p_t(x_t) = -\frac{\epsilon}{\sqrt{1-\bar{\alpha}_t}}\]因此DDPM实际上在学习(重新缩放的)分数函数。
🔬 研究线索: 这种等价性是巧合还是有更深层的原因?考虑从信息几何或最优传输角度理解这种联系。
Song et al. (2021) 提出了统一的SDE框架:
前向SDE:
\[dx = f(x,t)dt + g(t)dW_t\]对应的反向SDE:
\[dx = [f(x,t) - g(t)^2\nabla_x \log p_t(x)]dt + g(t)d\bar{W}_t\]不同选择的 $f$ 和 $g$ 对应不同的模型:
💡 开放问题:
每个SDE都有对应的概率流ODE:
\[dx = [f(x,t) - \frac{1}{2}g(t)^2\nabla_x \log p_t(x)]dt\]这个ODE:
⚡ 实现挑战:
torchdiffeq.odeint
的不同方法)给定条件 $y$ ,如何建模 $p(x | y)$ 的分数? |
方法1:直接建模
\[s_\theta(x, y, t) \approx \nabla_x \log p_t(x|y)\]方法2:分类器引导
\[\nabla_x \log p(x|y) = \nabla_x \log p(x) + \nabla_x \log p(y|x)\]🌟 理论缺口:
现实数据常位于低维流形上,如何在流形上定义分数函数?
挑战:
💡 开放问题:
未解决的理论问题:
🔬 研究线索: 这些问题与统计学习理论、逼近理论和优化理论都有联系。特别是与神经切线核(NTK)理论的联系值得探索。
在本章中,我们深入探讨了基于分数的生成模型:
核心概念:
关键洞察:
开放问题与研究方向:
分数模型不仅是强大的生成模型,更提供了理解概率分布的新视角。随着理论的发展和计算能力的提升,我们期待看到更多突破性的进展。
下一章,我们将进入连续时间的世界,探讨PDE/SDE视角下的扩散模型,看看微分方程如何为生成建模提供新的工具。