HWC
← Note

No date

DFT | On the Generalization of SFT: A Reinforcement Learning Perspective with Reward Rectification

PaperRL

快速解釋

這篇論文要解決的核心問題是:為什麼標準 Supervised Fine-Tuning(SFT)通常比 RL 更容易過擬合、泛化也更差?作者的答案不是從經驗現象出發,而是直接把 SFT 的梯度重寫成 policy gradient 的形式,然後指出標準 SFT 其實隱含了一個很糟糕的 reward 結構。這個隱式 reward 既非常稀疏,又帶有對 expert token 機率的反比權重,因此當模型對正確 token 的機率很低時,梯度會變得非常大,導致高變異與病態優化。

基於這個觀察,作者提出 Dynamic Fine-Tuning(DFT)。它的改動非常小,本質上只是把標準 SFT loss 乘上一個 token probability,並用 stop-gradient 阻止梯度穿過這個權重。這樣做的效果是把原本隱含的反比加權抵消掉,讓每條 expert trajectory 對應到比較穩定、均勻的 reward。作者把這件事稱為 reward rectification。實驗上,這個一行程式碼級別的改動,卻在多個數學推理 benchmark 上明顯超過標準 SFT,也在探索性的 offline RL 設定裡優於多種 offline 與 online RL baseline。

問題設定

作者考慮的是大型語言模型的標準 SFT 設定。給定一個只包含正樣本 expert demonstrations 的資料集:

D={(x,y)}\mathcal{D} = \{(x, y^{\star})\}

其中 xx 是 prompt,ystary^{star} 是對應的 expert response。標準 SFT 直接最小化句子層級的 cross-entropy:

LSFT(θ)=E(x,y)D[logπθ(yx)]L_{\mathrm{SFT}}(\theta) = \mathbb{E}_{(x, y^{\star}) \sim \mathcal{D}} \left[ - \log \pi_{\theta}(y^{\star} \mid x) \right]

其梯度為:

θLSFT(θ)=E(x,y)D[θlogπθ(yx)]\nabla_{\theta} L_{\mathrm{SFT}}(\theta) = \mathbb{E}_{(x, y^{\star}) \sim \mathcal{D}} \left[ - \nabla_{\theta} \log \pi_{\theta}(y^{\star} \mid x) \right]

相對地,標準 RL 的 policy objective 寫成:

J(θ)=ExD,yπθ(x)[r(x,y)]J(\theta) = \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi_{\theta}(\cdot \mid x)} \left[ r(x,y) \right]

其 policy gradient 是:

θJ(θ)=ExD,yπθ(x)[θlogπθ(yx)r(x,y)]\nabla_{\theta} J(\theta) = \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi_{\theta}(\cdot \mid x)} \left[ \nabla_{\theta} \log \pi_{\theta}(y \mid x)\, r(x,y) \right]

這篇論文的問題意識是:雖然 SFT 和 RL 看起來是兩種不同訓練範式,但如果把 SFT 的梯度改寫成 RL 形式,也許就能更精確地理解 SFT 為什麼泛化較差。特別是,在只有正樣本、沒有負樣本、也沒有 reward model 的情況下,SFT 仍然是最常見的 post-training 方法,因此如果能從原理上改善 SFT,本身就具有很高價值。

核心想法

這篇方法最重要的貢獻,是把標準 SFT 精確地重寫成一個帶有隱式 reward 的 on-policy gradient,並指出真正的問題不在 supervised learning 本身,而在於這個隱式 reward 形式有明顯缺陷。

  1. SFT 可以被重寫成一種特殊的 policy gradient

作者對 SFT 梯度做 importance sampling 重寫,把原本在 expert data distribution 上的期望,轉成在當前 policy 分佈上的期望。做完這一步後,SFT 梯度可以寫成一個和 policy gradient 幾乎一樣的形式,只是 reward 被乘上了額外的 importance weight。

這件事的重要性在於:SFT 並不只是單純的 imitation learning loss,而是可以被看成一種特殊的 RL update。既然如此,就可以從 reward 結構與梯度變異的角度來分析它。

  1. 標準 SFT 的隱式 reward 非常稀疏,且帶有反機率加權

重寫後,作者得到 SFT 對應的 reward 結構本質上是:只有當模型 sample 出 expert response 時才有 reward,而且 reward 會再乘上一個 1/πθ(yx)1 / \pi_{\theta}(y \mid x) 的反機率權重。這代表兩件事:

  1. reward 極度稀疏,因為只有 exact match 才會非零。
  2. 當 expert token 在當前模型下機率很低時,反機率權重會非常大。

因此,標準 SFT 的梯度雖然形式上穩定,但從 RL 角度看,其實對應到一個高變異、病態的 reward estimator。作者認為,這就是 SFT 容易過擬合、泛化較差的根本原因。

  1. DFT 用動態重加權把這個隱式 reward 修正掉

既然問題來自反機率權重,那最自然的修正就是把它抵消掉。作者的做法很簡單:將標準 SFT 梯度乘上 expert token 的模型機率,也就是乘上 pitheta(ystarmidx)pi_{theta}(y^{star} mid x),並透過 stop-gradient 確保這個縮放只改變權重,不額外引入新的梯度路徑。

這樣做之後,原本的反機率項就被抵消,對應的 reward 變成對所有 expert trajectory 都是均勻的 1。從 RL 角度看,這等於把原本偏置且高變異的 reward estimator,修正成更穩定的 uniform reward estimator。

  1. token-level 版本是最終實作形式

實際上,若直接在整條 sequence 上做 importance weighting,數值上可能不穩,因此作者採用 token-level 的版本,類似 PPO 中常見的 token-level 處理方式。最終 DFT loss 是對每個 token 做動態加權,而不是對整條序列一次加權。

  1. DFT 的效果不是更用力擬合全部 token,而是更有選擇地更新 token 分佈

作者進一步分析 token probability distribution,發現標準 SFT 傾向把整體 token probability 一起往高處推,也就是對所有 token 做更緊的擬合;相反地,DFT 會產生更明顯的兩極化效果:一部分 token 被更強地提升,另一部分 token 反而被壓低。從結果看,DFT 不再一視同仁地把所有 token 當作同等重要,這也可能是它泛化較好的原因。

  1. 這個方法本質上是一個 loss-level 修正,而不是新模型架構

DFT 沒有引入 reward model、沒有 reference model、也不需要負樣本或偏好資料。它只改變標準 CE loss 的權重形式,因此在工程上非常輕量,但從理論上又是直接對準 SFT 的隱式 reward 問題。

關鍵公式

標準 SFT 目標為:

LSFT(θ)=E(x,y)D[logπθ(yx)]L_{\mathrm{SFT}}(\theta) = \mathbb{E}_{(x, y^{\star}) \sim \mathcal{D}} \left[ - \log \pi_{\theta}(y^{\star} \mid x) \right]

其梯度為:

θLSFT(θ)=E(x,y)D[θlogπθ(yx)]\nabla_{\theta} L_{\mathrm{SFT}}(\theta) = \mathbb{E}_{(x, y^{\star}) \sim \mathcal{D}} \left[ - \nabla_{\theta} \log \pi_{\theta}(y^{\star} \mid x) \right]

論文接著把它改寫為 on-policy expectation。透過 importance sampling,可得:

E(x,y)D[θlogπθ(yx)]=ExD,yπθ(x)[1[y=y]πθ(yx)(θlogπθ(yx))]\mathbb{E}_{(x, y^{\star}) \sim \mathcal{D}} \left[ - \nabla_{\theta} \log \pi_{\theta}(y^{\star} \mid x) \right] = \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi_{\theta}(\cdot \mid x)} \left[ \frac{\mathbf{1}[y = y^{\star}]}{\pi_{\theta}(y \mid x)} \left( - \nabla_{\theta} \log \pi_{\theta}(y \mid x) \right) \right]

若定義

w(yx)=1πθ(yx),r(x,y)=1[y=y],w(y \mid x) = \frac{1}{\pi_{\theta}(y \mid x)}, \qquad r(x,y) = \mathbf{1}[y = y^{\star}],

則可把 SFT 梯度寫成:

θLSFT(θ)=ExD,yπθ(x)[w(yx)θlogπθ(yx)r(x,y)]\nabla_{\theta} L_{\mathrm{SFT}}(\theta) = - \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi_{\theta}(\cdot \mid x)} \left[ w(y \mid x) \nabla_{\theta} \log \pi_{\theta}(y \mid x) r(x,y) \right]

這個式子直接揭露了問題所在:SFT 等價於一個 reward 非常稀疏、而且還被 1/πθ1 / \pi_{\theta} 放大的 policy gradient。

為了修正這個問題,DFT 對 SFT 梯度乘上一個 stop-gradient 的校正項:

θLDFT(θ)=θLSFT(θ)sg ⁣(1w)=θLSFT(θ)sg ⁣(πθ(yx))\nabla_{\theta} L_{\mathrm{DFT}}(\theta) = \nabla_{\theta} L_{\mathrm{SFT}}(\theta) \cdot \operatorname{sg}\!\left(\frac{1}{w}\right) = \nabla_{\theta} L_{\mathrm{SFT}}(\theta) \cdot \operatorname{sg}\!\left(\pi_{\theta}(y^{\star} \mid x)\right)

其中 sg()\operatorname{sg}(\cdot) 是 stop-gradient operator。這代表校正項只負責重加權,不參與反向傳播。

對應的 DFT loss 可以寫成:

LDFT(θ)=E(x,y)D[sg ⁣(πθ(yx))logπθ(yx)]L_{\mathrm{DFT}}(\theta) = \mathbb{E}_{(x, y^{\star}) \sim \mathcal{D}} \left[ - \operatorname{sg}\!\left(\pi_{\theta}(y^{\star} \mid x)\right) \log \pi_{\theta}(y^{\star} \mid x) \right]

但實作時作者採用 token-level 版本,得到最終 loss:

LDFT(θ)=E(x,y)D[t=1ysg ⁣(πθ(yty<t,x))logπθ(yty<t,x)]L_{\mathrm{DFT}}(\theta) = \mathbb{E}_{(x, y^{\star}) \sim \mathcal{D}} \left[ - \sum_{t=1}^{|y^{\star}|} \operatorname{sg}\!\left( \pi_{\theta}(y_t^{\star} \mid y_{<t}^{\star}, x) \right) \log \pi_{\theta}(y_t^{\star} \mid y_{<t}^{\star}, x) \right]

這個式子可以直接和標準 token-level cross-entropy 對照。標準 CE 是:

logp- \log p

而 DFT 對應的是:

sg(p)logp- \operatorname{sg}(p) \log p

其中 p=pitheta(ytstarmidy<tstar,x)p = pi_{theta}(y_t^{star} mid y_{<t}^{star}, x)。這也就是作者所說的「只改一行程式碼」的本質。

從 RL 角度來看,這個修正的意義是:原本 DFT 對應的 reward 會變成對所有 expert trajectory 一致的常數 1,不再帶有反機率放大,因此梯度更新更穩定,且不會過度聚焦在那些當前機率極低的 expert token 上。

模型結構

這篇方法沒有引入新的 backbone,模型本體仍然是標準的 autoregressive LLM。真正被改掉的是訓練目標與梯度加權方式。因此「模型結構」更精確地說,其實是訓練流程結構。

  1. 輸入與輸出形式不變

模型仍然接收 prompt xx,自回歸地預測 response yy 的每個 token 機率:

πθ(yty<t,x)\pi_{\theta}(y_t \mid y_{<t}, x)

因此 DFT 不需要改 tokenizer、不需要改 decoder、也不需要多一個 reward model 或 value model。

  1. loss 層替換標準 cross-entropy

在訓練時,對每個 expert token,先計算其當前模型機率,然後用這個機率作為 stop-gradient 權重,去重加權 token-level CE loss。也就是說,整個 pipeline 可以概括為:

  1. 前向計算 token probabilities。
  2. 取出 expert token 的 probability。
  3. 對每個 token 的 logp-\log p 乘上 operatornamesg(p)operatorname{sg}(p)
  4. 對 sequence 做 sum,再對 batch 取平均。
  5. 不需要額外 supervision

和 RLHF、DPO、PPO、GRPO 這些方法不同,DFT 不需要:

  1. reward model。
  2. 偏好資料或正負樣本對。
  3. 線上採樣與 rollout。
  4. reference model。

因此它特別適合只有正樣本 demonstrations 的純 SFT 場景。

  1. offline RL 的延伸版本仍然沿用同一個 loss 觀念

論文也做了探索性的 offline RL 實驗。那裡的做法是先用 rejection sampling 構造出正樣本資料,再把 DFT 套到這些帶 reward supervision 的樣本上。雖然這部分不是論文的主體,但結果顯示:同樣的 reward rectification 思想,並不只對純 SFT 有效,對離線 reward-supervised 設定也有幫助。

  1. 實作複雜度非常低

從工程角度看,DFT 的優勢非常明確:它是一個 loss-level patch,不是一個完整 RL pipeline。作者強調,它相較於 iw-SFT、DPO、PPO、GRPO 等方法更省資源、更少組件,卻仍然能在數學推理任務上得到競爭甚至更強的結果。

總結來說,DFT 的「模型結構」並不是新架構,而是把標準 autoregressive LLM 的 token-level cross-entropy,替換成一個帶 stop-gradient token probability 的動態重加權版本。它的關鍵不是增加模型複雜度,而是修正 SFT 從 RL 視角看所對應的隱式 reward。