https://www.youtube.com/watch?v=p7TdPUcPoik
語言模型答對的次數,比它認出自己答對的次數多。上一講把這件事量了出來:同一個題目取樣幾十次、幾百次,正確答案常常就在裡面,卡住的是系統沒有能力自動把它挑出來。這個落差叫 generation-verification gap。CS329A 第三講整堂課都在處理這一端,也就是 verifier。講者把過去四年四篇論文排成一條線:2021 年跟著 GPT-3 一起訓練的那顆 verifier;把分數打在每一個推理步驟上的 PRM;讓模型自己 rollout 出標籤的 Math Shepherd;還有 NeurIPS 2025 那篇 Weave,把一整群不完美的 verifier 加權起來,再 distill 成 4 億參數的小模型。講者最後給的判斷是,驗證這一端做好,8B 的系統可以站到 70B 等級的位置上。
2021 年的 verifier:GSM8K,跟每題一百個候選
第一篇是 OpenAI 2021 年的 Training Verifiers to Solve Math Problems。動機很直白:LLM 會幻覺,會很有自信地把錯的解法端到使用者面前。講者補了一句,四年之後這句話還是成立,模型當然強了很多,但問題沒有消失。
這篇的另一個貢獻是做出 GSM8K。8,500 題小學數學,設計時要的是題目的品質與多樣性,而且刻意壓在多步推理上:題目本身不難,可是要解出來得走好幾步;解答用自然語言寫,不是純數學符號,因為這樣才收得到推理過程。講者到今天還是推薦用 GSM8K 測小型模型,也建議學生把它放進自己專案的評測裡。
Verifier 的訓練方式是一條清楚的迴圈。generator 先在同一批資料上 fine-tune 兩個 epoch,接著對每一題取樣 100 份解答,拿人類寫好的標準答案比對,一份一份標成對或錯,再用這些「題目、解答、標籤」訓練 verifier 一個 epoch。這批題目跟答案是靠大量人工監督做出來的,所以標準答案是可靠的,標籤可以直接從它長出來。
Verifier 自己也是一顆語言模型,頭上多了一個 scalar head,對每個 token 輸出一個二元預測。損失有兩條疊在一起:一條是預測對錯的二元分類,一條是原本的 next-token prediction。題目的 token 被遮掉,不列入最佳化,模型只需要管解答那一段。標籤的顆粒度可以選:切在句子層級,看每個句號之前那句話對不對;或切在 token 層級,後者很吵,等於要求每一個 token 都走在通往正確答案的軌道上。測試時整份解答只留一個判斷,取最後一個 token 的分數當結論。講者示範了兩份解答,一份中段分數掉下去,但後段一路轉綠,最後對上;另一份前面很好,後段出錯,最後一個 token 是紅的,跟實際標籤一致。
測試時的做法就是 best-of-N:同一個問題生成很多解答,用 verifier 給分,選分數最高的那一份當系統輸出。講者也講了一個實務上的保留:先做 supervised fine-tune 這一步,現在未必必要,模型已經很會聽指令、很懂數學,很多新的 verifier 直接訓練驗證目標,不先做那一輪 SFT。
Verifier 得贏過 fine-tune,而且大小要配對
跟「直接 fine-tune 同一批資料」比,verification 是贏的。GPT-3 的 6B 與 175B 兩個尺寸都是這樣,而且 verifier 的訓練資料越多,差距越明顯。資料量少於一千筆左右時,175B 那顆的 verification 幫不上什麼忙;資料堆上去之後,兩條線就分開了。
兩條線會不會交叉,這個問題也被追問過:資料真的夠多時,fine-tune 跟 verification 大概會收斂到差不多的結果。但 verifier 的價值在別的地方,你不會動到 base model,generator 保持通用,由 verifier 在旁邊帶它。這跟把模型整顆改成某個資料集的形狀是兩件事。
另一組 ablation 問的是大小怎麼配:大 generator 配小 verifier,還是小 generator 配大 verifier?答案是前者比較好。講者說這在某種程度上符合直覺,如果生成平均來說比驗證難,把多的參數放在生成那一邊就說得通。這條線還沒走完,generator 與 verifier 的 Pareto 最佳大小怎麼配,是一個值得做的題目;現在 base model 強很多,Hugging Face 上也有一堆現成的 verifier 與 reward model,甚至有 leaderboard 可以對著測。
候選數推到 400 之後,verifier 也開始追不上
test-time scaling 的結果也畫在同一篇論文裡。候選數往上加,verifier 帶來的準確率就一直往上,到大約 400 份都還有明顯增益,再往上就平掉了。取樣到 800 份時,verifier 已經追不上解答真正的分布,挑不出最好的那一份。對照上一講的 majority voting:那時候的結論是十幾個樣本、從來沒撐到 50 個就失效;verifier 把這條線推到了 400。
為什麼 400 之後會掉,講者解釋得很清楚。圖上量的不是 coverage,是整條系統最終的輸出。候選一多,verifier 的 precision 就下降:800 份裡如果有兩份解答非常接近、一份對一份錯,它分不出來;400 份的時候還分得出來。實務上他們停在 100 個樣本,因為大部分增益在那裡就拿到了,而且表現穩定。標籤的產生方式也順帶講明白:人類對每一題只寫一次標準答案,離線做一次就結束,之後模型生 100 份,逐份跟這份答案比對,對錯就出來了。
verifier 自己能不能再 scaling,講者把答案留到後面幾篇論文。
ORM 與 PRM:一個打總分,一個每一步打分
第二篇是 Let's Verify Step by Step,一樣出自 OpenAI,隔不到兩年。問題換了個角度:模型逐步解題,前面某一步錯了,整份答案就被帶歪。
這篇把 reward model 分成兩種。outcome-based reward model,簡稱 ORM,給整份解答一個分數,看的是最後答案對不對,就是前一篇 verifier 的概念。process-based reward model,簡稱 PRM,對過程中的每一步各給一個分數。
標籤怎麼來,決定了兩者的成本。一題數學題、一份逐步解答,最後答案可以直接對標準答案,ORM 的標籤到此為止。PRM 得靠人類標註員一步一步看、一步一步給分。最後的 reward 是每一步分數的乘積。用的時候可以 prompt 模型把步驟寫清楚,PRM 逐步打分,乘起來得到一個品質區間,再決定這份答案要輸出還是重試。這個做法叫 process supervision,credit assignment 精準,可以指到出錯的那一步。
更關鍵的是它處理 false positive 的能力。模型有可能過程整個歪掉,卻碰巧走到正確答案;outcome supervision 看到的只是一個對的答案,process supervision 有機會把中間那些錯步驟挑出來。它也鼓勵人類看得懂、願意背書的推理方式,因為那些標籤就是人寫的。這篇論文同時釋出 PRM800K,一組 80 萬筆 step-level 標籤的開源資料集。
PRM800K:真正貴的不是數量,是「看起來對的錯答案」
蒐集這批標籤的過程本身就是一個方法。他們讓語言模型逐步生出大量樣本,然後優先挑「convincing wrong answers」給人標,也就是最後答案對、中間步驟錯的那一種。這個選擇讓他們比隨機挑樣本省下 2.6 倍的資料量。標籤有三種:正、負、中性。整個流程是迭代的,資料收一批、PRM 訓一輪、下一輪的資料品質再往上。
講者用一題示範:某個分數的分母比分子的三倍少七,這個分數等於五分之二,問分子是多少。前五步都對,最後一步把 x 算成 7,正確答案是 14,那一步就標成錯。
訓練細節上,base model 是 GPT-4,ORM 與 PRM 都先做過 supervised fine-tune。ORM 取 completion 最後一個 token 的分數,PRM 用每一步機率的乘積。
結果是 PRM 贏過 ORM,也贏過 majority voting。majority voting 大約一百個樣本之後就失效;PRM 還能挑出稀有的正確答案,有些題目在取樣分布裡正確率不到 5%。資料效率的差距也很嚇人:ORM 每題標 100 份解答,效果大約等於 PRM 每題標 1 份。泛化方面,majority voting 跨到新領域時反而比 ORM 好,但 PRM 整體最好,能承受更多 distribution shift。
PRM 的代價,與那個擋不住的跳步
PRM 不是沒有代價。第一,它需要 k 乘以步數的標籤,要跟 ORM 做完全公平的比較並不容易,論文自己也知道,只能在部分圖上盡量控制步數。第二,PRM 的分數門檻是一個新引入的 hyperparameter,得為自己的系統去調,這是額外的複雜度。講者也說,新的做法很多是把 PRM 跟 ORM 併用,兩邊的好處都要。
另一個問題是跳步。如果模型直接寫「設分子為 x,x 等於 14」,中間的推理全省略,PRM 會不會照樣給高分?講者的回答分兩層。PRM 看得到題目、前面的步驟與當前這一步,答案對,它沒有理由扣分;PRM 本身不負責逼模型逐步思考。但這個設定裡你並沒有動 generator,你還是可以 prompt 它把步驟寫出來,PRM 只負責打分。真正會出事的是拿 PRM 去 fine-tune generator:模型可能學會停止推理,直接生出 PRM 喜歡的答案,這時候就得特別小心,確保 chain of thought 站得住。
這裡的標籤是人寫的,跳步會被人標低。下一篇把標註自動化之後,這層保障就沒了,講者直接說那確實是個 caveat。
Math Shepherd:標籤不找人了,讓模型自己 rollout
第三篇是 Math Shepherd。動機來自一個很實際的瓶頸:PRM 比 ORM 有潛力,特別是搭上 test-time scaling,但它很吃資料,而人工標註又貴又慢。所以問題變成,能不能把 PRM 的標籤蒐集自動化?
做法是把一個推理步驟的品質,定義成「從這一步走到最終正確答案的潛力」。站在某一步上,從那裡往外取樣 n 條後續軌跡,看最後有幾條答對。hard estimate 是只要 n 條裡有任何一條最後答對,這一步就算成功;soft estimate 是算比例,n 條裡有幾條答對就是幾分之幾。n 等於 3 的時候,hard 給第一步 1 分,soft 給三分之二。人的標註就被這套 rollout 換掉了,前提是你手上有每一題的最終標籤。
弱點也很明顯。如果正確路徑很罕見,可能要取樣到一百條才看得到,用三條去看就會給 0 分;難題上多數樣本都錯,等於整題收不到訊號;中間有錯步驟、最後卻走對的軌跡,會被標成正確。取樣多一點可以減少這些誤判,但不是保證。
使用方式跟前面一樣:取樣候選解答、用 PRM 打分、取最高的那一份當輸出。他們也把 PRM 當 reward model,用 RL 訓練 generator,讓它生出分數越來越高的步驟。hard 與 soft 最後差別不大;n 變大時 soft 看起來好一點,但 n 等於 4 那組就是他們最好的結果,最後選 hard,因為比較好量。
沒有半個人標的標籤,還是贏過 majority voting
成績單會讓人多看兩眼:整份訓練資料沒有任何人類標註,全部由模型產生。跟幾個 baseline 比:self-consistency,也就是 majority voting 的另一個名字;ORM;以及 Math Shepherd 自己的 PRM。它贏過 majority voting 與 ORM,也贏過前一篇的 PRM800K,在 MATH 上差距更大,因為 MATH 比 GSM8K 難得多。這些結論跨了 Llama 7B、Llama 34B 與 DeepSeek 67B。
加上 RL 又更好。拿 Mistral 7B 對這顆 PRM 做 PPO,結果明顯高於只對 ORM 做 RL。這個差距比單純 test-time scaling 小一點,但意義不同:模型生標註,標註訓 PRM,PRM 同時在測試時與 RL 訓練裡改進 generator,好幾層都用同一顆模型替自己產生資料與 reward。效果在某個點上會開始鈍化。
課堂上補了兩個方向。一個是給模型一份 rubric 或一組規則,讓它拿每一步去對照,多一份訊號判斷這一步合不合理;另一個是讓它用工具,例如計算機或 sympy,把方程式直接算掉。多一點 supervision、多一點工具,加上 agentic 的做法,驗證品質還能再往上。還有一個問題牽涉算力怎麼分:generator 多取樣、verifier 多取樣,兩邊吃的是同一筆預算,固定 compute 下該怎麼配,講者說這是可以做的題目;同時提醒 ORM 與 PRM 最好用同一批資料訓練,否則比起來不公平。
Weave:不要訓練更強的 verifier,把一群不完美的加起來
第四篇是 Shrinking the Generation-Verification Gap with Weak Verifiers,Stanford 的工作,NeurIPS 2025,課堂前幾個月才發表。動機還是同一個 gap,做法換了:不訓練一顆新的 verifier,改用 inference compute,把一群 verifier 集成起來。
這裡的「weak」不是故意找爛的,是承認沒有一顆 verifier 是完美的。pool 裡放的是市面上最好的 verifier,它們跟真實標籤有相關,但都有缺陷。成員有三類:PRM、ORM,還有一大類是把 LLM 當 judge,直接把答案丟給模型問它對不對,或讓它用工具、用 rubric 生出一個分數。
先看集成有沒有用。拿不同 lab、不同資料集訓練出來的 verifier 排在一起,比 top-1、top-5、top-10,整體來說集成有幫助,但不是單調的,多塞不一定更好。真正穩定有用的是學權重,給每個成員一個權重再加起來。有標籤的話,naive Bayes 或 logistic regression 這種很簡單的方法就夠,一顆 verifier 一個權重。以 MATH 500 為例,用一批標籤把權重找出來,再套到新的測試資料上,進步就很明顯。
先篩掉爛的,再用 1% 的標籤學權重
Weave 的流程叫 score, weight, select。先把各家 verifier 的分數標準化到同一個尺度,再用一小批標籤把品質太差的 verifier 濾掉。講者特別強調這一步重要,verifier 要先過某個品質門檻,才有資格進 pool。
剩下的靠 weak-to-strong supervision 來估準確率,這條線受 Snorkel 與 Alex Ratner 等人的工作啟發。設定是這樣:n 個 query,每個 query 生 k 份解答,pool 裡有 m 顆 verifier,總共 n 乘 k 乘 m 個標籤;要估的是「第 i 題的第 j 份解答是對的」這個機率,條件是手上所有 verifier 給出的標籤。關鍵假設是每一顆 verifier 抓到的是正確性的不同側面。講者的說法是,如果 pool 裡每一顆對每一份樣本都給一樣的分數,集成起來什麼都沒學到;訊號在於它們彼此哪裡一致、哪裡不一致。在這個假設下可以寫出機率,再用兩組等式:第一組用到任兩顆 verifier 彼此獨立的假設,第二組只是機率的定義,沒有額外假設。從這兩組式子架一個最佳化,就解出每一顆 verifier 的權重。
跟 naive ensemble 比,這個做法有幫助,在 GPQA Diamond、MATH、MMLU Pro 這些難題上增益更大,因為 baseline 本來就低,加權集成把分數拉起來一大段。
算力分配那張圖上放了幾條線:深紅虛線是 Pass@K oracle,代表如果有一個完美的挑選器會拿到多少,但我們沒有,所以才要訓 verifier;紫色是 supervised,假設有一大批標籤可以學權重;藍色是 unsupervised,每個資料集只用 1% 的訓練標籤;橘色是 naive ensemble,直接平均,但還是先濾掉爛的。這幾條都明顯贏過 majority voting,也贏過 multi-agent verification。MAV 是 prompt 一堆 LLM,依照不同面向替一份回應打分,本質上是 rubric 式的做法,在兩個設定裡不比 majority voting 好,甚至更差。
8B 的系統站上 70B 的位置,然後把它蒸餾成 400M
難題上的準確率從四成多被拉到七成以上,對上的是 o3-mini 那個等級。8B 的 generator,Llama 3.1 8B instruct,配上 8B 以下的 verifier,在這些資料集上平均 70%,講者的說法是這顆 8B 模型靠 inference scaling 就被拉到接近 70B 等級模型做 majority voting 的水準;把同樣的生成加驗證套到 70B 等級的模型上,平均 86.2%,跟 o3-mini 這種不同量級的專有模型差不多。她提醒,這張圖量的是整個系統最終的準確率,不是 coverage,跟上一講那些 coverage 曲線不一樣。
集成很花錢。每一份解答都要跑一整排 verifier 才有分數可以平均,如果每題是一百份解答,乘上去很可觀。他們的做法是把 Weave 訓練一次,再用 distillation 壓進一顆很小的模型:4 億參數,原始的在 7B 這個量級。蒸餾版保住原本那一大團 verifier 97% 的準確率,測試時的算力少 99% 以上。兩個版本都開源,checkpoint 也都放出來了,拿去做 Agent 或 test-time scaling 的專案都可以。
效率圖上,淺藍是蒸餾版,深藍是原始 Weave,橫軸是花掉的總 inference compute,縱軸是成功率。蒸餾版明顯省;原始 Weave 因為準確率到得了比較高的位置,在那個水準上反而比 naive ensemble 與 majority voting 更省 FLOP。
課收在 pass@1,跟一個還沒回答的架構問題
四篇論文是一條四年的路。verification 同時改進訓練與推論的結果,process reward 比 outcome reward 更有用,但最好兩個併用。verifier 吃資料,資料越多越好,而且可以拿去 RL fine-tune generator。Weave 走的是另一條,用 weak supervision 在一群 verifier 上做最佳化,test-time scaling 的方式是加更多 verifier,不是把同一顆 verifier 多取樣幾次,最後還能蒸餾掉。
課堂最後把鏡頭拉遠。這些 benchmark 幾乎都是數學與推理,還有哪裡可以做?講者說 coding 很有趣,GPQA 那些 benchmark 裡本來就有些程式題,不全是數學。她提到接下來要講的 CodeMonkeys,做法是不直接訓練 verifier,而是讓模型在測試時自己生 unit test,那些 unit test 就變成 verifier。她也認為驗證對任何推理任務都有用。
reasoning model 會不會讓這套過時?不會。這一類模型的訓練本來就是生推理步驟、拿 reward、跑 RL 迴圈、把正面的軌跡留下來當下一輪的資料;test-time scaling 已經被吃進資料生成裡。多取樣還是能讓它們探索到解空間裡更多地方。
那未來會不會變成取樣只用來生訓練資料,測試時就問一次?講者說這正是想去的方向,模型要強到 pass@1 就對。張力在另一頭:把 log prob 壓得太尖、只往一個答案收斂,創造力與解答的多樣性可能一起被弄丟;她說現在反而喜歡那些思考方式有創意、有多樣性的模型,這是想保留的特質。
最後一個沒答完的問題是架構。generator 跟 verifier 該不該同一家族、同一量級?講者說這是個好題目。一般來說模型比較喜歡自己家族的生成結果,也比較懂自己那套解讀方式;有一篇論文講某些模型用不同類別的 verifier 反而更好,但同尺寸同家族與不同尺寸不同家族到底差在哪,她還沒看到有人專門研究。