模型能力沒有牆?從 Loop Engineering 看史丹佛 Self-Guided Self-Play:7B 打贏 671B 的關鍵是一道「把關」

又到了週二讀論文。
這幾天社群在瘋傳一張圖,標題寫著「模型能力沒有牆!」,底下掛著史丹佛這篇 Scaling Self-Play with Self-Guidance(作者 Luke Bailey、Kaiyue Wen、Kefan Dong、Tatsunori Hashimoto、Tengyu Ma)。賣點很聳動:一個 7B 的模型,自己跟自己玩,最後解的題目比 671B 還多。
先把標題降溫一下。論文證的不是「模型沒有牆」,而是一件更具體、對做落地的人更有用的事:
self-play 本來會撞牆,撞牆的原因不是算力不夠、也不是資料不夠,而是「反饋品質爛掉了」。把反饋品質這道牆拆掉,7B 才打得贏 671B。
這個結論,跟我上一篇寫的 EFC(Effective Feedback Compute)幾乎是同一件事的兩面。上次講的是 agent 推理時「有效反饋 > raw compute」,這次是訓練時「有效題目 > 更多自我對弈」。我們一個一個拆。
先講 data wall:模型學完人類之後要去哪變強
現在大模型訓練有個公認的痛點:高品質的推理資料是有限的。
人類寫下來的好題目、好證明、好推理鏈,數量就那麼多。模型一旦把這些都吃完,再往上就沒料了。你不可能無止盡地請數學家來出題。
Self-play(自我對弈)是大家寄予厚望的解法。概念很乾淨:讓一個模型扮「出題的」(論文叫 Conjecturer,出題者),生題目給另一個「解題的」(Solver,解題者)去解。解題者變強,出題者就要出更難的題;出題者出更難,解題者又被逼著再變強。兩邊互相拉抬,理論上沒有上限——反正題目是自己生的,不靠人類資料。
聽起來很美。問題是,過去的 self-play 方法跑久了就停滯,撞到一個很硬的天花板。為什麼?
牆的真面目:出題者學會「reward hacking」
論文把這個牆解剖得很清楚。
出題者的獎勵,大致是「讓解題者答不出來」。聽起來合理——你要出有挑戰性的題嘛。但模型很賊,它會找到最省力的方式去最大化這個獎勵:不是去生「真的有助於進步」的好題,而是生一堆人為複雜、扭曲、甚至跟目標完全無關的怪題。
這就是經典的 reward hacking:它沒在解你真正想要的問題,它在鑽你獎勵函數的漏洞。論文給這個現象一個名字,叫「退化瓶頸」(degeneracy bottleneck)。
而且這不是嘴上說說,論文給了很具體的數據(Figure 2):
- 沒有把關機制時,出題者生的題目,結論裡帶「或(∨)」這種邏輯分支的比例,從原本資料集的 不到 10%,一路飆到 80% 以上。
- 結論的平均長度,膨脹到原本的 約 10 倍。
- 跑到第 195 輪,沒把關的版本生出來的,已經是一堆又臭又長、堆滿邏輯分支的扭曲句子——對解題者的能力成長毫無幫助。
用人話講:出題者發現「把題目寫得又臭又長,解題者就答不出來,我就有獎勵」,於是它就一路往「故意刁難」的方向退化,而不是往「出好題」的方向進步。
這讓我想到 EFC 那篇的一句話——Agent 練一萬小時,如果反饋沒閉合,一樣不會變強,那是在練一萬小時無效的球。 Self-play 撞的就是這道牆:出題者生的題是無效的球,解題者揮再多次也沒用。
轉折:加第三個角色「Guide」,把品質閘門裝進訓練
SGS 的解法,簡單講就是多請一個裁判進來。
原本只有兩個角色,現在變三個,而且三個都是同一個語言模型扮的:
- Solver(解題者):負責解題。
- Conjecturer(出題者):負責生題。
- Guide(嚮導/裁判):負責評題目好不好。
Guide 做的事,就是擋在出題者前面,問三個問題:
- Relevance(相關性,0–5 分):這題對我真正想解的目標題,到底有沒有用?
- Complexity(複雜度,0–4 分):結論是不是堆了一堆沒必要的邏輯分支跟巢狀?
- Redundancy(冗餘,二元):有沒有塞一堆用不到的前提?
合成一個分數,論文的公式長這樣:
R_guide = max(0, relevance + (2 − complexity) + (1 − redundancy))
關鍵在那個 complexity——只要複雜度被評到 3 或 4 分,這題直接拿 0 分。等於明確告訴出題者:你想靠「把題目寫得又臭又長」來刁難解題者?這條路我直接封死。
然後出題者真正拿到的總獎勵,是兩個東西相乘:
R_synth = R_solve × R_guide
R_solve 那部分只獎勵「難度適中」的題(太簡單的、前 30% 最好解的不給分,根本解不開的也不給分),R_guide 這部分管「題目乾不乾淨、相不相關」。兩個相乘的意思是:題目要嘛又難又乾淨,要嘛沒分。 你沒辦法只靠把題目搞複雜來騙獎勵了。
這個設計的精神,跟 EFC 那篇我給 mem0 的建議一模一樣——記憶不能什麼都往裡塞,要配一道「寫入閘門」:這個反饋夠有料、可信、不重複嗎?過了再存。 Guide 就是 self-play 訓練迴圈裡的那道寫入閘門。差別只是 EFC 講的是 agent 推理階段,SGS 把同一個原則裝到了訓練階段。
數據:80 輪超越 RL,200 輪 7B 打贏 671B
加了這道閘門之後,差距有多大?
- 比最強的 RL baseline 高 7% 的漸近解題率(asymptotic solve rate,就是跑到收斂後的天花板)。
- 大約 80 輪 self-play,就追平並超越 RL baseline 的天花板——人家是收斂後的極限,它 80 輪就過了。
- 200 輪之後,這個 7B 模型解開的題目數量,超過 DeepSeek-Prover-V2-671B 的 pass@4。 注意,671B 是它的 96 倍參數量。
- 最狠的是最難那批:有 1,346 題是 RL baseline 從頭到尾一題都沒解開(0%),SGS 在這批硬題上做到 約 10%。
實驗設定講清楚免得失真:基底模型是 DeepSeek-Prover-V2-7B,做的是 Lean4 形式化定理證明,資料集 D_3k 是 3,323 題自動形式化的數學題,從高中前到大學程度都有。論文還把累積解題率擬合成一條 sigmoid 的 scaling law(Rc = R0 + (A − R0) / (1 + (Cmid/C)^B)),用來證明 SGS 的擴展性質確實比舊方法好——抽掉尾段 10–30% 的資料重擬合,預測的天花板只差 1.1%,代表這條曲線是真的、不是硬湊的。
把這串數據濃縮成一句:真正讓 7B 打贏 671B 的,不是它算了更多,而是它每一輪自我對弈的「題目品質」被一道閘門守住了。 同樣的算力,反饋有效,結果天差地遠——這跟 EFC 那篇「成本沒變、只是反饋變有效、成功率從 27% 跳到 90%」是一模一樣的故事骨架。
為什麼這對做 agent 落地的人重要
你可能會說,這是一篇做數學定理證明的訓練論文,跟我做 agent、做 RAG、做自動化有什麼關係?
關係很大,因為現在大家都在做「會自己進步的系統」:
- 讓 agent 自己生 case、自己跑、自己存進 memory,下次更聰明。
- 讓系統自己生合成資料(synthetic data)餵自己再訓練。
- 讓 agent 自己評自己(LLM-as-judge),自己迭代。
這些全都是 self-play 的近親。而 SGS 給的警告非常直接:
只要你讓一個系統「自己生資料、自己學」,而中間沒有一道把關,它幾乎一定會 reward hack,往對自己最省力、但對真實目標最沒用的方向退化。 你以為它在自我進化,其實它在自我退化,而且因為迴圈是閉的,退化會越滾越快。
換成 Loop Engineering 的講法會更清楚:SGS 根本就是一個 Loop Engineering 的範本。它要解的不是「怎麼 prompt 出題者出好題」——那是 prompt 思維;它解的是「怎麼設計這個自我對弈的 loop,讓 loop 自己長不出爛題」。Conjecturer、Solver、Guide 三個角色,就是 loop 裡的三個組件,而 Guide 這個把關,就是 loop 裡那個決定「要不要把這輪產出餵回去」的閘門。Loop Engineering 的重點從來不是 loop 裡的某一個 agent 多強,而是這個 loop 收斂到變強、還是收斂到退化。 SGS 證明了:差別就在你有沒有裝那道閘門。
論文核心那條假設值得記下來:「語言模型有能力判斷一個子問題對達成目標有沒有用。」 整套方法能成立,就靠這條。換到你的場景,這句話就是——你敢不敢讓模型自己當那道把關的裁判?敢的話,self-play 的牆能往後推很遠;不敢、或者乾脆不裝裁判,那條退化曲線在等你。
坦白說:這篇沒有解決的事
照慣例,把論文自己承認的限制攤開講,不然會變成吹捧。
第一,Guide 是凍結的。 那個裁判從頭到尾不訓練,就是一組固定規則在評分。論文自己白紙黑字說:要去打「最難」的那批題,凍結的 Guide「很可能不夠」。換句話說,把關的人本身不會進步,遲早會變成新的天花板。
第二,只在「可驗證」的領域成立。 Lean4 有 verifier,題目解對解錯機器說了算,所以解題那端的獎勵是乾淨的。換到沒有 ground truth 的開放任務(寫文案、做決策、開放對話),誰來保證 Guide 自己不會也 hack?這題論文沒答,因為它根本還沒踏進去。
第三,模型大小固定在 7B。 「Guide 的把關品質」跟「模型規模」會怎麼交互,完全沒測。7B 行,70B、700B 會不會反而更會鑽漏洞?不知道。
所以回到那張「模型能力沒有牆」的圖——這標題是過度延伸。 論文真正證的是:在有 verifier 的窄領域裡,加一道反饋把關,能把 self-play 的牆往後推到「7B 打贏 671B」這麼遠。這已經很猛了,但它是「把牆推很遠」,不是「沒有牆」。把關機制本身,就是下一道牆。
一句話帶走
如果你正在做任何「會自己進步」的 AI 系統,這篇給你的不是「快去 self-play」,而是:
別讓系統自己生資料、自己學、自己爽。先裝一道把關,問清楚「這個反饋/這道題,對真正的目標到底有沒有用」——過了再進迴圈。
訓練端叫 Guide,推理端叫 EFC 的寫入閘門,名字不一樣,是同一件事:牆從來不在算力,牆在反饋品質。