定RLHF獎勵建模的新思路)
做RLHF做到第三個月的時候我徹底對“獎勵模型”這四個字失去了安全感。當時用的標準獎勵模型在驗證集上的偏好分類準確率已經(jīng)刷到了很不錯的水平可一旦接到策略優(yōu)化里模型就開始瘋狂輸出那種“看起來很有道理、讀起來全是空話”的內(nèi)容——就是大家常說的reward hacking。后來我把獎勵模型的輸出分布打出來看了一眼發(fā)現(xiàn)評分尺度在一輪訓練里能上下漂移好幾個點而且它對給出的分數(shù)完全沒有置信度可言。這也是我后來轉(zhuǎn)向貝葉斯非負獎勵模型BNRM的直接原因。BNRM這個方向很有意思它其實是對獎勵模型做了兩件事第一把獎勵輸出約束成非負值第二給獎勵參數(shù)引入貝葉斯后驗分布讓模型在打分的同時告訴你怎么“不確定”。這兩件事單拎出來都不算新但合在一起正好打在標準獎勵模型的幾個要害上。這篇文章我打算把BNRM的設計動機、數(shù)學推導、訓練流程和踩坑經(jīng)驗完整過一遍適合已經(jīng)被RLHF折磨過、想給獎勵模型換一種更穩(wěn)做法的朋友參考也適合剛?cè)雽R方向、想把獎勵建模理解透的初學者。1. 標準獎勵模型為什么不夠用1.1 RLHF流程中的獎勵模型先對齊一下語境。RLHF到現(xiàn)在已經(jīng)演出了很多變體但主流仍然可以拆成三步先用人工或規(guī)則數(shù)據(jù)做有監(jiān)督微調(diào)SFT然后訓練一個獎勵模型Reward Model, RM最后用強化學習PPO這類算法去優(yōu)化策略。獎勵模型在這條流水線里承擔的是“人類偏好的代理”這個角色——它需要在偏好數(shù)據(jù)上學會什么樣輸出更符合期望然后在策略優(yōu)化階段給每一條生成結(jié)果打分。標準做法是Bradley-Terry模型。給定同一個提示x下的兩個回答y_a和y_b人工標注告訴我們y_a比y_b好那獎勵模型就要讓r(x,y_a)盡量大于r(x,y_b)。用公式寫就是P(y_a y_b) σ(r(x,y_a) - r(x,y_b))其中σ是sigmoid。訓練的時候最大化偏好對上的對數(shù)似然等價于讓兩個回答的獎勵差值盡量拉開。這個思路簡潔、穩(wěn)定也被證明非常有效但它把“人類偏好可以建模成一個標量分數(shù)”這個假設貫徹得很徹底問題恰恰也出在這。1.2 標準獎勵模型的三個“內(nèi)傷”我實際跑過的標準RM幾乎沒有不踩下面三個坑的。第一點估計給不了置信度。訓練收斂之后模型只輸出一個固定分數(shù)它不會告訴你這個分數(shù)是“很有把握”還是“猜的”。但在真實偏好數(shù)據(jù)里很多pair本身就是模糊的、甚至是標注員隨機翻牌的。標準RM面對這種樣本時只能強行給一個分數(shù)分數(shù)背后的不確定性完全丟失。到了PPO階段策略會去追高分哪怕這個高分只是模型瞎猜出來的策略也會把它當成真實信號去學習。第二輸出尺度不受約束漂移嚴重。標準RM最后一層是線性層輸出可以落在任意實數(shù)區(qū)間。同一個RM訓練1個epoch和訓練2個epoch分數(shù)分布可能完全不同。那PPO里的reward clip閾值、KL系數(shù)就都要跟著調(diào)。我試過最夸張的一次模型在300步內(nèi)平均獎勵從0.8漲到2.4策略其實沒有變好只是RM自己在漂移。第三對獎勵語義沒有約束。標準RM既可以給正分也可以給負分但“負分”在某些場景下很難解釋。比如推薦場景里用戶沒點擊只是“不感興趣”并不等于“反感”安全對齊里我們經(jīng)常希望模型對違規(guī)請求給一個“拒絕”動作但這個動作可能沒有明確的負向程度。將獎勵約束為非負相當于給打分一個語義下界0分意味著“沒提供任何正向價值”所有分數(shù)都朝“有用、安全、符合偏好”的方向度量。這在實踐里能減少很多獎勵解釋上的麻煩。1.3 BNRM想解決的到底是什么BNRM的設計目標是把上面三個問題一次性做進模型架構里而不是靠后處理去修。非負約束負責解決語義和尺度漂移的一部分問題貝葉斯化負責解決不確定性和魯棒性的問題。二者結(jié)合帶來的直接好處是在PPO階段我們可以根據(jù)后驗分布對每個獎勵信號做“減不確定性懲罰”或“采樣”處理讓策略在低置信度區(qū)域不再盲目追高從根本上緩解reward hacking。理解這一層很重要因為BNRM不是一個“更準的打分器”它是一套更完整的獎勵建模方案。它犧牲了一部分訓練便利性換來了對獎勵不確定性的顯式建模和更強的安全邊界。后面所有數(shù)學和代碼都圍繞這個核心思想展開。2. BNRM的核心設計思路與數(shù)學骨架2.1 非負是約束更是語義BNRM最常見的參數(shù)化方式是把獎勵模型最后一層的輸出接一個softplus激活r(x,y) softplus(f_θ(x,y)) ln(1 exp(f_θ(x,y)))softplus形狀像一個平滑的ReLU輸出永遠大于0而且沒有尖角梯度可以正?;貍?。有些實現(xiàn)會用softplus(x)再乘一個縮放因子保證獎勵上限不至于過小。其實用平方輸出或者exp輸出也能保證非負但softplus在邏輯回歸式的訓練里數(shù)值穩(wěn)定性更好——它的導數(shù)有自然的上界不會像exp那樣指數(shù)爆炸。為什么非負這么重要從數(shù)學上看非負約束改變了獎勵空間的拓撲結(jié)構。標準RM的獎勵空間是R整個實數(shù)域兩個樣本的分數(shù)差可以無限大模型訓練時天然的傾向就是把正負樣本使勁拉開而BNRM的獎勵空間是R0是一個硬性下界這限制了過大的獎勵差值模型必須用更“經(jīng)濟”的方式去表達偏好。尤其在樣本噪聲大的時候標準RM會把噪聲當成信號去拉分BNRM因為下界的存在天然對異常偏好沒那么敏感。從PPO實操來看非負獎勵還有另一個隱性好處KL懲罰項和獎勵項在做權衡時reward clip邊界可以設置得更有物理意義。比如把獎勵clip在[0, 5]區(qū)間0就對應“無價值”5對應“優(yōu)秀”設置參數(shù)時心理有個譜。標準RM的負分區(qū)間到底怎么處理很多時候真的只能靠猜。2.2 貝葉斯化獎勵的不確定性表達非負約束解決的是語義和尺度問題貝葉斯化解決的則是置信度問題。標準RM把參數(shù)θ當成一個固定值訓練一次得到點估計。BNRM換了一個思路參數(shù)θ是一個隨機變量我們對它先驗p(θ)有一個判斷看到數(shù)據(jù)D之后更新的后驗分布p(θ|D)才真正用于預測。用貝葉斯公式寫清楚就是p(θ|D) ∝ p(D|θ) · p(θ)數(shù)據(jù)似然p(D|θ)和標準RM一樣來自Bradley-Terry偏好模型。而預測獎勵時不再用一個固定參數(shù)前向計算而是對后驗做積分p(r|x,y,D) ∫ p(r|x,y,θ) · p(θ|D) dθ這個積分在神經(jīng)網(wǎng)絡里沒法精確算所以實際會用兩種近似一是變分推斷用一個簡單的分布去近似后驗二是MCMC采樣用HMC或NUTS從真實后驗里采樣。后面實操環(huán)節(jié)我會展開說這兩種選擇的取舍。核心是要理解BNRM的最終輸出不是一個標量而是一個獎勵分布。這個分布的均值就是點估計方差就是不確定性。舉個具體例子。某段生成內(nèi)容在訓練集里出現(xiàn)了100次偏好都是一邊倒的那么后驗分布會很尖方差很小另一段內(nèi)容只出現(xiàn)過兩次而且標注員之間還有分歧后驗分布就會很胖方差很大。這個方差信息在標準RM里完全看不到但它在PPO里太重要了——策略在不確定的區(qū)域應該謹慎而不是冒險。2.3 BNRM與標準BT模型的數(shù)學關系看公式會發(fā)現(xiàn)BNRM其實沒有拋棄Bradley-Terry而是把它做了三層擴展。第一層獎勵函數(shù)r(x,y)被參數(shù)化為非負函數(shù)而標準RM沒有這個約束。第二層模型訓練目標從“最大化一個固定的log-likelihood”變成“最大化后驗分布的證據(jù)下界ELBO”。第三層推理時從“前向一次得到分數(shù)”變成“采樣多個參數(shù)前向多次得到分數(shù)分布”。標準RM可以看成BNRM的一個退化特例如果我們把先驗分布設成方差無窮大即懲罰項消失參數(shù)約束也取消同時后驗推斷只用最大后驗MAP點估計BNRM就完整退化成標準的Bradley-Terry獎勵模型。這個退化關系很重要它說明我們做的一切改動都是兼容性擴展而不是另起爐灶。在工程實現(xiàn)上先用標準RM的權重做BNRM初始化幾乎可以無縫銜接。3. 從數(shù)學到訓練BNRM落地全過程3.1 先驗設計把先驗知識“寫”進模型BNRM里先驗不是擺設它決定了不確定性估計的質(zhì)量。我嘗試過的先驗大致分三類。第一類是球面高斯先驗也是推薦拿來當默認的p(θ) N(0, σ02 · I)σ0取0.1到1.0之間。這個先驗唯一的作用是防止參數(shù)飛太遠相當于一個可調(diào)節(jié)的正則化強度。好處是簡單穩(wěn)定幾乎不需要調(diào)參。第二類是分層先驗給參數(shù)分組設置不同的先驗方差例如把embedding層和分類頭的先驗尺度分開。它能表達“embedding比分類頭更可壓縮”這類知識但實現(xiàn)復雜度高收益往往不明顯。第三類是稀疏先驗類似Lasso的思路鼓勵獎勵模型只依賴少數(shù)關鍵特征。這個在特征維度很高時才推薦嘗試否則容易引入額外偏差。實操建議是第一版先做球面高斯先驗把σ0調(diào)到在驗證集準確率不下降的前提下盡量大。這個值的意義很直觀——先驗方差越大數(shù)據(jù)對后驗的塑造能力越強先驗方差越小后驗越保守不確定性估計越大。如果你發(fā)現(xiàn)BNRM的不確定性整體偏高策略優(yōu)化得畏畏縮縮第一反應不應該是改學習率而是把先驗方差調(diào)大。3.2 后驗推斷變分還是MCMC后驗推斷是BNRM工程實現(xiàn)里最重要的一個岔路口兩種主流路線各有個的適用場景。變分推斷VI的思路是選一個簡單的變分分布族比如對角高斯q_ψ(θ) N(μ, diag(σ_ψ2))然后優(yōu)化ELBOL(ψ) E_{θ~q_ψ}[log p(D|θ)] - KL(q_ψ(θ) || p(θ))第一項讓模型擬合偏好數(shù)據(jù)第二項讓變分分布別偏離先驗太遠。優(yōu)化這個目標用重新參數(shù)化技巧就能搞和訓練普通網(wǎng)絡幾乎一樣。對于LLM規(guī)模的獎勵模型我用下來感覺變分推斷幾乎是唯一現(xiàn)實的選擇——推理速度和標準RM一樣不確定性通過多次前向采樣獲得代價是后驗可能被對角高斯限制住相關性參數(shù)學不出來。MCMC路線里HMC/NUTS在小模型上能采出高質(zhì)量后驗樣本但放到現(xiàn)代規(guī)模的大語言模型上采樣成本勸退。NUTS需要計算Hessian或至少高階梯度信息一次采樣幾十步顯存和時間都撐不住。我的看法是科研驗證階段用MCMC做“黃金標尺”對比VI的近似質(zhì)量工程落地階段直接上VI沒必要糾結(jié)。3.3 后驗獎勵如何接到策略優(yōu)化里拿到獎勵分布之后怎么用是關鍵。我試過三種方式分別對應不同的優(yōu)化心態(tài)。第一種是后驗均值不確定性懲罰也是推薦做安全對齊時優(yōu)先嘗試的r_ppo(x,y) μ_r(x,y) - λ · σ_r(x,y)其中μ_r和σ_r分別是從后驗采樣計算出的獎勵均值和標準差λ是一個正的超參數(shù)。這背后的想法是悲觀主義當一個樣本的獎勵不確定時我們向下修正它的分數(shù)策略就不會去過度追逐這些模糊的高分區(qū)域。和標準RM相比這個方案等于給獎勵信號加了一道“護欄”rewards less likely to be gamed。第二種是Thompson采樣也叫后驗采樣式。每個PPO batch隨機從后驗分布里采一個獎勵函數(shù)參數(shù)用它給整個batch打分。這樣策略在訓練中會自然傾向于在“大多數(shù)后驗樣本都給高分”的區(qū)域前進而偶爾的隨機性也變相起到了探索作用。這種方式實現(xiàn)最簡單但方差會比上一種大。第三種是樂觀探索版把r_ppo設成μ_r λ·σ_r。它鼓勵策略去試那些不確定性高的區(qū)域適合探索型任務。除非你的任務真的是鼓勵探索否則我一般不建議用——在安全對齊場景里樂觀探索等于主動去撞模糊地帶出問題概率偏高。3.4 關鍵訓練偽代碼與超參數(shù)下面給一段核心邏輯的偽代碼展示BNRM訓練和PPO接入的完整鏈路??蚣軣o關看邏輯就行。# BNRM 訓練階段 # 模型: f_theta backbone head # 非負層: reward softplus(f_theta(x)) def bnrm_train_step(batch_x, batch_y_a, batch_y_b, pref, prior_scale0.5): # 變分參數(shù): mu, log_var eps gaussian_sample(mu.shape) theta_sample mu exp(0.5 * log_var) * eps r_a softplus(f_theta(x, y_a, theta_sample)) r_b softplus(f_theta(x, y_b, theta_sample)) r_diff r_a - r_b log_p -softplus(-r_diff) # 等價于 log sigmoid(r_diff) nll -mean(log_p) kl gaussian_kl(mu, log_var, prior_scale) loss nll kl / batch_size update(mu, log_var, loss) return loss.item() # 得到獎勵分布 def predict_reward_distribution(x, y, n_samples16): rewards [] for _ in range(n_samples): theta_sample posterior_sample() rewards.append(softplus(f_theta(x, y, theta_sample))) rewards stack(rewards) # [n_samples, batch] return mean(rewards, dim0), std(rewards, dim0) # PPO 階段 def ppo_batch_inference(x, responses, lambd0.5, modepessimistic): mu, sigma predict_reward_distribution(x, responses) if mode pessimistic: r mu - lambd * sigma elif mode thompson: idx random_index() r posterior_samples[idx] elif mode optimistic: r mu lambd * sigma return r有幾個超參數(shù)值得單獨說。KL項前面的系數(shù)官方常規(guī)做法是讓KL項在總loss里占比在0.1到1之間太小后驗會坍縮到點估計太大模型會欠擬合偏好數(shù)據(jù)。變分采樣數(shù)n_samples訓練時可以取1推理時建議至少8到16。λ的取值我沒有一個普適默認方案和獎勵數(shù)值范圍強相關通常從0開始逐步往上試0先確認基線的reward hacking程度再以0.25的幅度遞增。4. 實驗配置與效果評估細節(jié)4.1 數(shù)據(jù)準備與預處理習慣BNRM對數(shù)據(jù)質(zhì)量的要求比標準RM更高原因是不確定性建模會把“數(shù)據(jù)覆蓋不足”這件事暴露出來。偏好數(shù)據(jù)構造上我一直用的思路是這樣的。提示詞覆蓋要廣確保不同難度、不同話題的prompt都有足夠的數(shù)量。如果提示詞分布偏斜BNRM會在高頻區(qū)域?qū)W得“胸有成竹”低頻區(qū)域?qū)W得“滿腹狐疑”這個特征本身是準確的但如果你在策略優(yōu)化時用了統(tǒng)一的不確定性閾值就得留意低頻區(qū)域會不會普遍被低估。標注一致性處理也容易踩坑。同一對樣本請三個標注員標結(jié)果2比1這算偏好還是算噪聲我建議把這個信息編碼進訓練目標而不是簡單地把多數(shù)派當成硬標簽。具體做法是給每個pair一個置信度權重完全一致標注的樣本權重1.0有分歧的樣本權重0.5讓BNRM在分歧樣本上不要過度自信。這個改動雖然樸素但實測能明顯改善后驗校準質(zhì)量。4.2 超參設置參考表下面這份參數(shù)表是我在7B級基座模型上跑出的相對穩(wěn)定配置不同規(guī)模模型可以在此基礎上縮放。參數(shù)參考值說明先驗尺度 σ00.3 ~ 1.0先驗方差決定不確定性估計的保守程度變分分布對角高斯簡單穩(wěn)定支持重參數(shù)化訓練KL系數(shù)0.1 ~ 1.0按總loss比例調(diào)節(jié)過小會后驗坍縮訓練采樣數(shù)1訓練階段減少計算量推理采樣數(shù)8 ~ 16計算獎勵均值與標準差悲觀系數(shù) λ0 ~ 1.0從0開始遞增觀察reward hacking程度偏好溫度 T0.1 ~ 1.0縮放r_diff溫度越低偏好區(qū)分越尖銳學習率1e-5 ~ 5e-5與標準RM一致即可這里特別提一下溫度T。標準RM公式里sigmoid的輸入是r_a - r_b有時訓練會發(fā)現(xiàn)模型過于自信logits差動輒10以上這時候在差值上除一個溫度T可以壓住尖銳度。BNRM是由高斯后驗采樣的r_diff天然帶有不確定性抖動溫度的作用相對被削弱了一些但仍建議保留一個可調(diào)的溫度參數(shù)觀察后驗不確定度與校準誤差的關系。4.3 怎么評估BNRM真的變好了評估BNRM不能只看偏好分類準確率。準確率能證明它“判別力不差”但證明不了不確定性估計是否有效。我自己常用的評估角度有五項。獎勵分布校準度是核心指標。把預測樣本按不確定性分桶方差最小的桶、中間桶、方差最大的桶檢查桶內(nèi)預測獎勵均值和實際偏好標簽一致的比例。如果低不確定性的桶內(nèi)準確率高于高不確定性的桶說明方差確實攜帶了有效信息。這個做法和分類器校準里的ECE異曲同工。PPO穩(wěn)定性指標也要看同樣優(yōu)化步數(shù)下使用BNRM后KL和reward的比值曲線是否能更穩(wěn)定收斂。前面提到的reward改寫率也很有說服力統(tǒng)計PPO訓練中超出clip邊界的reward占比和reward尺度漂移方向BNRM應該明顯更穩(wěn)。生成質(zhì)量和安全指標不能省最終要回到策略輸出的自動評估和人工抽評上。計算效率也要記錄VI只比標準RM多了一倍推理時間如果優(yōu)化的好差值可以壓在30%以內(nèi)。5. 常見問題與排查實錄5.1 非負激活導致的梯度飽和softplus在輸入向負數(shù)方向拉得很大時輸出趨近于0梯度趨近于0。訓練初期如果模型權重初始化不合適f_θ(x,y)普遍都是很大負數(shù)softplus輸出基本為0r_a和r_b都是0r_diff永遠約等于0loss不下降。排查時我習慣先打印獎勵分布。如果你發(fā)現(xiàn)大量樣本的獎勵都壓在0.01以下說明softplus飽和了。解決方案有三個第一重新初始化最后一層讓輸出大致落在[-3, 3]區(qū)間softplus會平滑過渡第二先讓模型用MSE目標在SFT輸出上學一個粗糙的打分回歸作為冷啟動第三給softplus加一個偏移量r(x,y) softplus(f_θ(x,y)) epsilonepsilon取1e-4到0.01保證獎勵永遠不會完全歸零也就不會出現(xiàn)全零梯度。這個偏移量很小不影響語義但能救訓練一命。5.2 后驗坍縮與不確定性失真變分推斷最經(jīng)典的問題就是后驗坍縮q_ψ(θ)的方差被優(yōu)化到接近0模型重新退化成點估計。表現(xiàn)是預測獎勵分布極度尖銳所有樣本的不確定性幾乎一樣方差失去了指示意義。原因通常是KL項權重太低或者數(shù)據(jù)量太大、模型容量和KL項之間失衡。調(diào)整方向我剛才說過先把KL系數(shù)往上抬觀察后驗方差是否恢復到有區(qū)分度的狀態(tài)。另一個我試過有效的做法是對變分分布做“預熱”訓練前500步只優(yōu)化均值μ凍結(jié)log_var讓模型先在偏好數(shù)據(jù)上找到一個好的參數(shù)區(qū)域再放開方差優(yōu)化。這能避免訓練初期高loss區(qū)域里模型圖省事直接把方差壓到0來擬合偏好的壞結(jié)果。如果還坍縮可以考慮用低秩高斯或塊對角高斯來替代對角高斯讓相關性信息有表達空間。5.3 獎勵尺度漂移與KL預算失衡即使加了非負約束獎勵尺度漂移也只能緩解不能根治。softplus輸出理論上界是無限的模型如果非常確信某樣本優(yōu)秀可以給一個很大的正分。這會間接推高策略的獎勵預期導致KL預算失控。我踩過的坑是BNRM的reward均值調(diào)到很高的階段策略模型仍然開始輸出重復率極高的低質(zhì)量內(nèi)容說明模型還是沒有逃脫“追高分”的陷阱。解決尺度漂移參考兩個做法。第一在PPO階段對獎勵做標準化把mean和std約束到預先設定的區(qū)間這能直接阻止尺度漂移帶來的波動。第二給BNRM的最終輸出加一個顯式上界比如用sigmoid乘以固定上限R_max上限設在4到5。這樣獎勵被嚴格約束在[0, R_max]區(qū)間。代價是模型表達極端偏好時會損失一些精度換來的是整個訓練過程的穩(wěn)定權衡下來通常值得。5.4 聯(lián)合訓練時的顯存與時間問題BNRM的時間開銷主要來自后驗采樣。預測階段如果每個樣本采樣16次相當于做了16次前向這個成本在PPO訓練中會被放大因為每個batch都需要為全部經(jīng)驗計算獎勵分布。我現(xiàn)在的做法是分兩步走。PPO外推階段每一條經(jīng)驗樣本只獎勵采樣一次。因為策略當前批次的經(jīng)驗和上一步的經(jīng)驗在分布上相差不大獎勵不確定性可以復用舊統(tǒng)計量。然后在PPO更新階段挑選一部分成功候選或高不確定性樣本做16次重采樣再用更精確的均值和方差去更新策略。這個“嘗鮮版本”策略能省掉接近60%的獎勵計算開銷同時保留不確定性估計的核心價值。顯存上變分參數(shù)比標準模型多保存一份均值和方差整體增量在5%以內(nèi)基本可忽略。唯一要注意的是保存檢查點時要把mu、log_var、優(yōu)化器狀態(tài)一起保存否則恢復訓練后就無法繼續(xù)變分更新了。6. 我的一線實操體會貝葉斯非負獎勵模型在我自己的實踐里最驚艷的不是偏好準確率提升而是訓練穩(wěn)定性的變化。用標準RM時PPO階段的reward曲線像心電圖換到BNRM后即使不調(diào)λ那條曲線也平滑了很多。這背后的原因我現(xiàn)在理解得更透徹了——策略優(yōu)化不需要一個“聰明但偶爾發(fā)瘋”的評判員它需要的是一個“判斷穩(wěn)定、敢于說不知道”的評判員。不確定性懲罰本質(zhì)上是在阻止策略利用獎勵模型的知識盲區(qū)。最后再分享一個小技巧。BNRM版本的獎勵模型在打過幾次PPO之后不要把后驗參數(shù)扔了。它積累的不確定性信息可以反哺偏好數(shù)據(jù)挑選把方差最高的那批樣本抽出來重新標注或做一致性檢查對標噪聲數(shù)據(jù)的清洗效率非常高。這個用法當初是純屬誤打誤撞后來成了我每次都用的一招。獎勵建模這個方向與其糾結(jié)怎么加更多約束不如先讓模型學會承認自己不知道什么。BNRM在這條路上的探索值得一試。