JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

分數匹配:在不需要正規化常數下學習密度

對數密度的梯度不依賴 Z。這一個觀察,把難解的概似變成可計算的回歸——並悄悄為擴散模型打下地基。

為什麼梯度比密度好對付

對一個能量模型密度取對數:log p(x) = −E(x) − log Z。現在對 x 微分。log Z 這一項對 x 而言是常數,所以消失了。分數(score)——定義為 *s(x) = ∇ₓ log p(x) = −∇ₓ E(x)*——承載了分布全部的形狀資訊,卻完全不沾那個難解的正規化常數。這一行字,就是整個子領域存在的理由。

\mathbf{s}(\mathbf{x}) \;=\; \nabla_{\mathbf{x}} \log p(\mathbf{x}) \;=\; -\,\nabla_{\mathbf{x}} E(\mathbf{x}) \;-\; \underbrace{\nabla_{\mathbf{x}} \log Z}_{=\,0}

分数是对数密度的梯度;归一化常数 log Z 对 x 而言是常数,会完全消失。

分數匹配目標

我們希望模型分數 *sθ(x)* 匹配真實的資料分數。最直接的損失是期望平方距離 *½ 𝔼ₓ ‖sθ(x) − ∇ log p_data(x)‖²,但我們從來沒有 ∇ log p_data。分數匹配(score matching)優雅的技巧(Hyvärinen, 2005)用分部積分,把這個損失改寫成只依賴模型*的形式:模型自己分數的平方範數,加上其 Jacobian 的跡(trace)。資料分數完全消失了。

J(\theta) \;=\; \mathbb{E}_{p_{\text{data}}}\!\left[\, \tfrac{1}{2}\,\lVert \mathbf{s}_\theta(\mathbf{x}) \rVert^2 \;+\; \operatorname{tr}\!\big(\nabla_{\mathbf{x}}\, \mathbf{s}_\theta(\mathbf{x})\big) \,\right]

Hyvärinen 恒等式把不可解的目标改写成此目标函数——只剩下模型自身的分数及其雅可比矩阵的迹。

# Hyvarinen score matching (per sample x)
s  = score_net(x)                 # model score s_theta(x)
term1 = 0.5 * (s ** 2).sum()
term2 = trace(jacobian(score_net, x))  # sum of d s_i / d x_i
loss  = term1 + term2             # no data score needed
這個目標只含模型自己的分數與其 Jacobian 的對角線——從不出現未知的資料分數或 Z。

研究生讀者應該立刻感覺到一個陷阱:那個 Jacobian 跡的項,每一個輸入維度都要一次反向傳播,對影像而言根本沒救。所以純粹的分數匹配雖美卻無法大規模實作,而這領域真正的進展來自兩個更便宜的估計式。

兩個能規模化的估計式

  1. 切片分數匹配(sliced score matching):把兩邊的分數都投影到隨機方向 v,匹配純量 vᵀs。跡項變成便宜的 Hutchinson 估計 vᵀ∇(vᵀs),只需一次額外的反向傳播,而非每個維度一次。
  2. 去雜訊分數匹配(denoising score matching, DSM):對 x 加上標準差 σ 的高斯雜訊,再學習預測加噪後密度的分數。其目標有封閉形式——就是 −(x̃ − x)/σ²,指回乾淨點的方向——所以損失只是一個普通的去雜訊回歸,完全沒有 Jacobian。

DSM 是樞紐性的概念。它說:學習加噪分布的分數,等同於學習去雜訊。記住這句話——下一篇指南裡,它會成為擴散模型完整的訓練目標,而雜訊大小 σ 也從一個固定的麻煩,升格為被掃過的時間軸。

從分數取樣:朗之萬動力學

知道分數,就算沒有密度也能取樣。朗之萬動力學(Langevin dynamics)沿著 *sθ(x)* 往上走,同時注入經過校準的高斯雜訊;其穩態分布恰好是 p。這是經典馬可夫鏈蒙地卡羅(Markov chain Monte Carlo)取樣器(如吉布斯取樣(Gibbs sampling))的分數版表親;在參數層級,隨機梯度朗之萬動力學也用同一個配方來對後驗取樣。

朗之万采样沿着分数(对数密度的梯度场)行走,正如这个控件让点沿曲面滚动,并加入校准噪声,使马尔可夫链最终收敛到 p。

交互式梯度下降,让一个点沿损失曲面滚向最小值。