為什麼需要一個模型
比較資料只涵蓋評分者實際看過的回應。但在強化學習過程中,策略會產生數以百萬計、沒有任何人類評判過的新回應。我們需要一個也能為它們打分的東西——一個從偏好學出的獎勵模型(reward model learned from preferences):給它任何回應,它就輸出一個純量,代表「人類會有多喜歡這個」。
在語言場景中,這就是獎勵模型(reward model):通常是一份基礎模型的副本,把最後一層換成單一輸出數字。它讀過策略讀過的同樣文本,所以理解它必須評分的那些回應。
多层神经网络:输入经隐藏层汇聚到单一输出节点,表示奖励模型的标量打分。
Bradley-Terry 這座橋
你要怎麼用只含贏家的資料,去訓練一個輸出數字的模型?Bradley-Terry 模型是經典答案。它假設每個項目都有一個隱藏的「強度」,而 A 勝 B 的機率,會隨著 A 的強度超過 B 而平滑上升。具體來說,A 獲勝的機率,就是它們兩個獎勵分數之差的 logistic(sigmoid)函數。
Bradley-Terry 桥梁:项目 i 胜过 j 的概率是二者隐藏奖励之差的 sigmoid。
那一個假設就是魔法所在。它讓我們能直接在比較上定義一個損失:讓贏家的預測獎勵高於輸家,剛好高到足以解釋觀察到的選擇。把那個損失最小化,一個獎勵函數就跑出來了——儘管沒有任何一筆樣本被標上絕對分數。
# r = reward model; chosen/rejected = the pair, chosen preferred
import torch.nn.functional as F
def bt_loss(r, chosen, rejected):
# P(chosen wins) = sigmoid(r(chosen) - r(rejected))
margin = r(chosen) - r(rejected)
return -F.logsigmoid(margin).mean() # push the margin positive訓練它並做基本檢查
接著,獎勵模型訓練(reward model training)就是在比較資料集上做普通的監督式學習。你在意的指標是偏好準確率:在保留的成對樣本上,模型給「被選中的回應」較高獎勵的比例有多高?接近隨機就代表訊號還沒出來。
监督学习循环示意图:数据、模型、预测、损失、更新。
別只信一個
單一獎勵模型有盲點,而策略會把它們找出來(接下來幾篇大半在講這件事)。一個便宜又有效的防禦是獎勵模型集成(reward model ensembles):用不同的資料洗牌或隨機種子訓練好幾個獎勵模型再加以結合。它們一致的地方,就信任那個獎勵;它們分歧的地方,分數就是不確定的——這是個有用的旗標,提醒最佳化器在此退讓。
評答案,還是評過程
到目前為止,獎勵評判的是一個完成的回應。但對多步驟任務——解一道數學題、一份長計畫——你往往想獎勵每一步,而不只是最終答案。這就是過程獎勵與結果獎勵(process vs outcome rewards)的差別,而過程獎勵模型(process reward model)會為途中的推理打分。
過程獎勵提供更密集的回饋,也讓功勞分配更容易——策略學得到哪一步有幫助——但它們需要中間步驟的標籤,而那更難蒐集。這是個真實的取捨,怎麼選取決於你的任務把品質藏在步驟裡的程度有多深。