一句话定义:得分匹配(Score Matching)是一类训练目标,让模型直接学会数据分布对数概率的梯度 ∇ₓ log p(x),这个梯度叫得分函数(score function),从而绕开对概率密度本身的估计。
为什么梯度比密度好对付
用概率模型描述数据,绕不开归一化常数(normalizing constant):模型通常只能给出未归一化的 p̃(x),真正的概率是 p(x)=p̃(x)/Z,而 Z=∫p̃(x)dx 要对整个空间积分。在高维图像空间里,这个积分基本算不动——能量模型(Energy-Based Model)和贝叶斯推断长期卡在这一步。
但只看梯度,麻烦就没了:
∇ₓ log p(x) = ∇ₓ log p̃(x) − ∇ₓ log Z = ∇ₓ log p̃(x)
因为 Z 与 x 无关,求梯度后归零。也就是说,“往哪走数据密度变大、变得多快”这个信息里,根本不含 Z。
打个比方:想画出整座山的等高线地图(密度)很难,得测出每处的绝对海拔;但如果只需要知道“站在任意位置,哪个方向是上坡、坡有多陡”(梯度),就不需要任何海拔基准。
怎么训
最朴素的想法是让模型 s_θ(x) 去逼近 ∇ₓ log p(x),可右边我们并不知道。早期做法用分部积分把目标改写成只含 s_θ 及其散度的形式,不需要真实梯度,代价是要计算雅可比矩阵的迹,高维下非常昂贵。
工程上真正跑通的是去噪得分匹配(Denoising Score Matching):先给数据加上已知强度的高斯噪声,再去拟合加噪分布的得分。因为噪声形式已知,目标函数可以写成解析形式,训练就退化成普通的回归任务——预测“从噪声样本指回干净数据的方向”。
和相邻概念的区别
| 概念 | 学什么 | 是否需要归一化常数 |
|---|---|---|
| 最大似然 / 标准化流 | 概率密度 p(x) | 需要 |
| 得分匹配 | 对数密度的梯度 | 不需要 |
| GAN | 隐式的生成映射 | 不涉及 |
对从业者和普通人的意义
有了得分函数,采样就有了办法:用朗之万动力学(Langevin dynamics),沿梯度方向小步走、再注入少量噪声,反复迭代,就能从随机噪声走到数据密集的区域。扩散模型(AI 词典:Diffusion Model">Diffusion Model)本质就是“多个噪声强度上分别做去噪得分匹配,再反向采样走回来”,把难走的分布一层层铺平。这也是扩散模型不需要显式计算归一化常数的原因,训练稳定、样本多样,代价是采样步数偏多。
对从业者:读扩散模型的论文和代码时,常见的那句“预测噪声 ε”,做的其实就是去噪得分匹配,两者只差一个与噪声强度有关的系数;噪声调度怎么设计,直接决定了得分场在各个尺度上估得准不准。
对普通人:生成式模型画出一张图,底层是在学“往哪个方向走更像真实数据”,而不是先写出一条完整的概率公式。具体实现细节以官方论文和代码为准。
