為什麼梯度比密度好對付
對一個能量模型密度取對數:log p(x) = −E(x) − log Z。現在對 x 微分。log Z 這一項對 x 而言是常數,所以消失了。分數(score)——定義為 *s(x) = ∇ₓ log p(x) = −∇ₓ E(x)*——承載了分布全部的形狀資訊,卻完全不沾那個難解的正規化常數。這一行字,就是整個子領域存在的理由。
分数是对数密度的梯度;归一化常数 log Z 对 x 而言是常数,会完全消失。
分數匹配目標
我們希望模型分數 *sθ(x)* 匹配真實的資料分數。最直接的損失是期望平方距離 *½ 𝔼ₓ ‖sθ(x) − ∇ log p_data(x)‖²,但我們從來沒有 ∇ log p_data。分數匹配(score matching)優雅的技巧(Hyvärinen, 2005)用分部積分,把這個損失改寫成只依賴模型*的形式:模型自己分數的平方範數,加上其 Jacobian 的跡(trace)。資料分數完全消失了。
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 跡的項,每一個輸入維度都要一次反向傳播,對影像而言根本沒救。所以純粹的分數匹配雖美卻無法大規模實作,而這領域真正的進展來自兩個更便宜的估計式。
兩個能規模化的估計式
- 切片分數匹配(sliced score matching):把兩邊的分數都投影到隨機方向 v,匹配純量 vᵀs。跡項變成便宜的 Hutchinson 估計 vᵀ∇(vᵀs),只需一次額外的反向傳播,而非每個維度一次。
- 去雜訊分數匹配(denoising score matching, DSM):對 x 加上標準差 σ 的高斯雜訊,再學習預測加噪後密度的分數。其目標有封閉形式——就是 −(x̃ − x)/σ²,指回乾淨點的方向——所以損失只是一個普通的去雜訊回歸,完全沒有 Jacobian。
DSM 是樞紐性的概念。它說:學習加噪分布的分數,等同於學習去雜訊。記住這句話——下一篇指南裡,它會成為擴散模型完整的訓練目標,而雜訊大小 σ 也從一個固定的麻煩,升格為被掃過的時間軸。
從分數取樣:朗之萬動力學
知道分數,就算沒有密度也能取樣。朗之萬動力學(Langevin dynamics)沿著 *sθ(x)* 往上走,同時注入經過校準的高斯雜訊;其穩態分布恰好是 p。這是經典馬可夫鏈蒙地卡羅(Markov chain Monte Carlo)取樣器(如吉布斯取樣(Gibbs sampling))的分數版表親;在參數層級,隨機梯度朗之萬動力學也用同一個配方來對後驗取樣。
交互式梯度下降,让一个点沿损失曲面滚向最小值。