当前位置: 首页 > news >正文

Score Matching

本文由 gpt-5 生成

Score Matching(评分匹配)是一种直接学习数据分布的“分数函数”的方法,其中分数定义为对输入的对数密度梯度:\(s(x) = \nabla_x \log p(x)\)。它的核心思想是:不去拟合归一化的概率密度本身,而是拟合分数函数,这样可以绕过配分函数/归一化常数难以计算的问题(典型于能量模型)。

核心定义与目标

  • 设模型的分数为 \(s_\theta(x)=\nabla_x \log p_\theta(x)\),数据分布为 \(q(x)\)。分数匹配最小化 Fisher 散度:

    \[\min_\theta \; \frac{1}{2}\,\mathbb{E}_{x\sim q}\big[\|s_\theta(x)-\nabla_x \log q(x)\|^2\big]. \]

  • 因为 \(\nabla_x \log q(x)\) 不可得,Hyvärinen 通过分部积分给出与之等价(差常数)的可计算目标:

    \[J_{\text{SM}}(\theta)=\mathbb{E}_{x\sim q}\!\left[\frac{1}{2}\|s_\theta(x)\|^2 + \operatorname{div}_x\, s_\theta(x)\right], \]

    其中 \(\operatorname{div}_x\, s_\theta(x)=\sum_i \partial s_{\theta,i}(x)/\partial x_i\)。该形式不依赖 \(q\) 的显式密度,也不依赖 \(p_\theta\) 的归一化常数。

与能量模型的关系

  • \(p_\theta(x)\propto \exp(-E_\theta(x))\),则 \(s_\theta(x)=-\nabla_x E_\theta(x)\)。分数匹配直接训练输入梯度,而无需计算配分函数 \(Z(\theta)\) 或其梯度。

常见变体与实践

  • 原始分数匹配(SM):用上式 \(J_{\text{SM}}\)。缺点是需要计算散度(涉及二阶导)。

  • 切片/随机投影分数匹配(SSM/Hutchinson trick):

    \[J_{\text{SSM}}(\theta)=\mathbb{E}_{x\sim q,\;v\sim\mathcal{N}(0,I)}\!\left[\frac{1}{2}\|s_\theta(x)\|^2 + v^\top \nabla_x s_\theta(x)\, v\right], \]

    用随机向量近似散度的迹,避免显式求和二阶导。

  • 去噪分数匹配(DSM,Vincent 2011):对带噪数据的分数进行回归。令 \(y=x+\sigma\epsilon\)\(\epsilon\sim\mathcal{N}(0,I)\)

    \[\min_\theta \;\mathbb{E}_{x,\epsilon}\big[\|s_\theta(y,\sigma) + \epsilon/\sigma\|^2\big], \]

    等价于拟合噪声扰动后分布的分数。实践中常对多尺度 \(\sigma\) 训练。

  • 噪声条件分数网络与扩散/打分生成模型(Score-based Generative Modeling):令 \(s_\theta(x,t)\) 估计不同噪声水平 \(t\) 下的分数,训练目标形如

    \[\mathbb{E}_{t,x,\epsilon}\big[\lambda(t)\,\|s_\theta(x_t,t)+\epsilon/\sigma_t\|^2\big], \]

    其中 \(x_t\) 是对 \(x\) 加噪后的样本(例如 VE/VP SDE/DDPM 轨迹)。采样时用朗之万动力学或反向 SDE/ODE 生成高质量样本。

直观理解

  • 分数函数给出“往高密度方向”的最陡上升方向。学到准确的分数场后,可以沿该方向进行随机梯度上升并加噪(朗之万动力学)在数据流形附近采样。
  • 相比最大似然,分数匹配避免了密度归一化;相比对比散度,目标是有明确统计意义的 Fisher 散度最小化。

优缺点

  • 优点:不需归一化常数;与扩散/打分生成天然契合;采样可用朗之万或反向 SDE。
  • 缺点:原始 SM 需要二阶导(可用 SSM/DSM缓解);要求连续变量与一定边界条件;数值上需噪声尺度/权重精心设计。

PyTorch 中的两个常用训练损失示例

  • DSM(单尺度示例):

    • 公式:\(L=\mathbb{E}_{x,\epsilon}\|s_\theta(x+\sigma\epsilon,\sigma)+\epsilon/\sigma\|^2\)
    • 代码片段:
      • 假设 net(y, sigma) 输出与 y 同形的分数
      • x: 数据张量,sigma: 标量或张量噪声水平
      • 使用半平方误差时可加 1/2 系数,及可选权重 λ(σ)
  • SSM(Hutchinson):

    • 公式:\(L=\mathbb{E}_{x,v}\left[\frac{1}{2}\|s_\theta(x)\|^2 + v^\top \nabla_x s_\theta(x)\, v\right]\)
    • 代码思路:用 v~N(0,I),先计算 g=(s·v).sum(),然后 hvp=∇_x g,最后项为 (hvp*v).sum()

采样(以朗之万为例)

  • 单尺度:
    • 迭代:\(x_{k+1}=x_k+\frac{\eta}{2}s_\theta(x_k)+\sqrt{\eta}\,z_k,\; z_k\sim\mathcal{N}(0,I)\)
  • 多尺度(退火朗之万/NCSN):从大噪声到小噪声逐级迭代,使用对应 \(s_\theta(\cdot,\sigma_i)\)
  • 扩散/打分模型:求解反向 SDE/ODE,通常比纯朗之万噪声更稳定高效。

易混概念澄清

  • 这里的“score”指对输入 x 的对数密度梯度,不是对参数或损失的梯度。
  • 分数匹配学习到的是向量场 \(s_\theta(x)\),并不直接给出可积的正常数密度,但足以用于采样与生成。
http://www.aitangshan.cn/news/15.html

相关文章:

  • 对象转原始值
  • 通达信配色
  • I2C通信接口 VK2C22B 高抗干扰LED驱动段码液晶驱动芯片
  • 【自学嵌入式:stm32单片机】EXTI外部中断
  • Dify入门系列(1)| Dify 是什么?真能开启低代码 AI 应用开发?
  • 题解:P4368 [Code+#4] 喵呜
  • vue3 vue3-form-element表单生成工具
  • Codeforces 1042G Wafu! 题解 [ 绿 ] [ 数学 ] [ 线性 DP ] [ 前缀和 ] [ 暴力枚举 ]
  • 第二章:Linux基础命令
  • 题解:P4779 【模板】单源最短路径(标准版)
  • 事倍功半是蠢蛋39 cursor 报错user is unauthorized
  • 一个不错的AI写作工具
  • 2025CSP-S模拟赛33 比赛总结