OpenAI的O-1出現前,其實就有已經有大佬開始分析後面OpenAI的技術路線,其中一個方向就是從Pretrain-scaling,Post-Train-scaling向Inference Scaling的轉變,這一章我們挑3篇inference-scaling相關的論文來聊聊,前兩篇分別從聚合策略和搜尋策略來最佳化廣度推理,最後一篇全面的分析了各類廣度深度推理策略的最優使用方案。
廣度打分策略
- Are More LM Calls All You Need? Towards the Scaling Properties of Compound AI Systems
第一篇論文的出發點比較簡單,簡單說就是論證Inference Ensemble是否有效,既讓模型多次回答同一個問題,再透過voting或filter-voting等不同的ensemble打分策略對答案進行投票,分析對回答準確率的影響。這裡filter vote藉助以下LLM prompt對推理得到的答案進行篩選再做major votte
[User Question]: {query}
[Answer]:{answer}
Instruction: Review your previous answer and find problems with your answer. Finally, conclude with either ’[[correct]]’ if the above answer is correct or ’[[wrong]]’ if it is incorrect. Think step by step.
Verdict:
論文在MMLU和QA等有標準答案的資料集上進行了測試,結果得到了下圖非單調的曲線,會發現隨著推理次數的上升,不論是vote還是filter vote的回答準確率都是非單調的,其中vote會先上升在下降,filter vote的表現在不同資料集上存在差異。這裡我們就看下major vote,畢竟filter vote又引入一步模型推理所以其實有兩層變數。
回到了最熟悉的data analysis領域,U-Shape,∩-shape模式多數情況下都是因為資料中存在多個表現各異的分組,有的組內指標先上升後穩定,有的組內指標穩定下降,多個小組的指標彙總後就會出現,先升後降或者先降後升的模式。所以這種U-Shape,∩-shape模式的解決思路就是尋找那個可以顯著區分指標走勢的confounder變數。
論文定位到的confounder變數是Query難度,使用一個問題最終能否被回答作為衡量這個問題難度的定義。其實個人認為不是query難度,而是該問題在模型內化知識空間中對的答案和錯的答案本身的機率分佈,當模型更高的機率得到正確答案時,更多的LLM推理和major vote才能生效。所以隨著推理次數增加簡單問題的回答準確率先上升後趨於平穩,而複雜問題的準確率持續下降,合併起來就出現了先升後降的趨勢。
第一篇論文其實是用來做個首尾呼應,這裡論文發現了Query難度會影響推理打分策略的效果,和後面谷歌的推理策略最最佳化不謀而合。
廣度搜尋策略
- REBASE:An Empirical Analysis of Compute-Optimal Inference for Problem-Solving with Language Models
廣度推理策略,其實包含兩個部分一個是如何生成推理鏈路(搜尋策略),一個是如何對推理鏈路進行打分
- 廣度搜尋:包括像前一篇論文直接隨機取樣生成多個推理,還有更復雜類似TOT,MCTS的樹形多步推理
- 打分:包括major vote,filter major vote, weighted major vote,還有基於reward打分的best-of-n(包括基於結果的ORM和基於過程的PRM)
前面一篇論文說了major vote等打分策略,但搜尋策略只用了簡單的多次隨機推理,這裡我們再看一篇對搜尋策略進行最佳化的論文REBEASE。論文采用了樹形搜尋,在搜尋邏輯上REBEASE和TOT相似,透過實驗提供了推理準確率和推理成本之間balance的一些insight。
樹形搜尋的流程如下,
- 第一步針對問題生成N個候選答案,推理Budget=N
- 使用PRM模型對N個候選推理步驟進行打分,同時使用模型判斷這N個候選步驟中是否有推理完成的節點,如果有C個節點推理完成,則budget-=C
- 對未完成的節點,根據PRM打分進行加權取樣,取樣後的節點進行下一步推理
- 直至Budget=0,也就是成功生成N個推理結果後終止
- 對最終得到的N個候選答案,可以使用各類廣度打分策略來進行聚合,這裡論文采用了理論上效果更好的weighted major vote和Best-of-N
在MATH和GSM8k資料集上,論文使用PRM資料集微調了Llemma-34B模型作為Reward模型,分別使用在MeatMath資料集上微調過的Mistral-7B,llema-7B,Llema-34B作為推理模型,以下是REBEASE和其他廣度搜尋策略,以及不考慮Budget的屬性搜尋策略的效果對比
效果上,相同的推理錯誤率,使用REBEASE搜尋策略,相比隨機取樣和MCTS需要更低的推理成本,並且隨錯誤率降低,推理量級的上升幅度相比其他策略更低。
同時在同一個模型系列中,相同錯誤率下,使用推理廣度或者樹形搜尋策略,7B模型相比34B所需的推理成本更低。 這裡的觀點就很有意思了也就是小模型透過更優的推理策略,是有可能用更低的成本達到大模型的效果的,這個觀點在後面谷歌的論文中得到了更全面細緻的論證。
全面分析:Test Time Scaling
- Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters
- RISE:Recursive introspection: Teaching foundation models how to self-improve
- MATH-SHEPHERD: VERIFY AND REINFORCE LLMS STEP-BY-STEP WITHOUT HUMAN ANNOTATIONS
如果說前兩篇論文各自選了推理策略中的一個方向去做最佳化和分析,那谷歌的這篇論文就是一網打盡式的把各個推理策略和最佳化方向都全面考慮在內,給出了一個綜合的推理策略選擇最優方案。論文的目標就是回答在給定prompt和推理budget的前提下如何選擇最優的推理策略, 以及該推理策略對推理效果的提升,是否比直接換個大模型要來的更顯著?
論文提出最佳化推理效果,本質上是調整模型推理的token分佈,一種是讓模型自我調整,例如透過RL對齊讓模型生成中間推理過程(STaR),也可以讓模型透過自我最佳化,對推理結果給出最佳化建議並針對建議進行最佳化,論文稱之為“Proposal”。另一種就是面向一個打分模型進行搜尋最佳化,論文稱之為“Verifier”。我理解其實前者的本質就是深度策略(例如self-refine,self-critique,self-reflection),而後者的本質廣度策略(例如best-of-n)。
論文提出以上不同的策略適配不同難度的問題,那第一步就是對問題的難度進行分類,這裡論文使用MATH資料集,使用基座模型對每個樣本生成2048個推理結果,然後使用打分模型評估這些推理結果是否正確,對正確率進行分桶,總共分成5個桶,代表不同的難度分層。有了難度分類,下面我們分別看下最佳化Verifier和Proposal的效果
Verifier
Verifier依賴打分模型,所以首先是PRM模型的訓練,不熟悉PRM的可以先讀這篇解密prompt系列34. RLHF之訓練另闢蹊徑:循序漸進 & 青出於藍。這裡論文參考了MATH-SHEPHERD的全自動標註方案,透過對同一個問題生成多個推理過程,過程中的每個節點,都使用該節點通向正確答案的機率作為該節點的標籤來訓練PRM模型。
至於如何使用PRM來最佳化推理,其實包含兩個步驟:多個推理鏈路的搜尋生成,以及對多個鏈路打分投票得到最終答案。
先說推理鏈路的搜尋策略,這裡論文嘗試了三種方案包含簡單廣度搜尋和樹形搜尋,分別是
- Best-of-N:隨機取樣生成N個推理鏈路
- Beam Search:生成N個初始節點,每一步都基於PRM選擇Top M個節點繼續推理,最終保留N個得分最高的推理鏈路
- Lookahead Search:同樣是Beam Search只不過每一步保留哪些節點,不由當前節點的打分決定,而是再向前推理K步,由K步之後的節點打分決定,當K=0其實就是Beam Search。雖然看起來是最科學的搜尋策略,但是也帶來了額外的計算成本。
再來說下打分投票策略,以上不同的搜尋策略都會得到N個推理鏈路,論文對每個推理鏈路進行整體打分,這裡沒有使用多個步驟的PRM打分聚合而是直接使用了最後一個節點的PRM打分作為整個推理鏈路的得分。得到打分後,使用weighted best-of-n來得到最終答案,也就是對每個答案計算所有得到該答案的推理鏈路的總分,得分最高的答案作為最終答案。
不同策略的效果對比能得到以下幾個結論
- 當推理budget有限時,Beam Search的效果最好,當N逐漸變大後Best-of-N逐漸展現出了暴力就是奇蹟的優越效能
- 相同Budget下,Lookahead的效果是最差的,論文懷疑是過度的搜尋層的最佳化會導致一些例如推理鏈路過短的過度最佳化問題(先前推N步後early stop了)。但我有點懷疑是因為向前推的部分論文使用的是temperature=0進行外推,影響了推理質量
- 在不同難度的問題上,簡單問題(level 1-2)隨著budget上升,Best-of-N的效果會逐漸變得更好,提示廣度策略對於簡單問題的有效性。而較難的問題(level3-4),beam-search持續有更優的效果,對於最難的問題(level5)啥也不好使
一言以蔽之問題越簡單搜尋策略越簡單,推理資源越多搜尋策略越簡單
Proposal
Proposal依賴模型自我反思最佳化的能力,所以首先是訓練Revision模型,論文參考了RISE的方案,只不過採用了離線構建多輪迴答的方案。論文對每個樣本獨立取樣64次,從中把正確的回答和0-4個錯誤的回答(隨機取樣)進行配對,把錯誤回答作為上文,正確回答作為最終的回答構建多輪對話作為訓練資料。
配對過程選用了編輯距離來挑選和正確回答最相近的錯誤回答,幫助模型更容易找到正確和錯誤之間的關聯性,真的是去學習從錯誤中定位原因進行最佳化,而非跳過錯誤的上文,直接去嘗試生成正確答案。然後使用以上樣本對模型進行微調。
但以上的樣本存在bias,也就是上文只有錯誤答案,最終的推理答案都和上文不同,而真正在推理過程中使用多個結果作為上文,其中是可能存在正確答案的,也就是有可能模型會把正確答案給改成錯誤答案。因此論文選擇把revision和verifier進行結合,也就是使用打分模型從revision序列生成的多個推理結果中選擇最正確的。
效果上論文發現,在不同的推理budget下,同樣是N個推理鏈路,revision深度搜尋的效果都要優於parallel廣度搜尋。但論文認為本質上兩種策略應該在不同場景中各有優劣,廣度策略更善於全域性搜尋,而深度策略依賴最開始已經選擇了正確的方向然後進行持續的區域性最佳化。因此論文嘗試把廣度策略和深度策略進行合併,並尋找最優的合併比例,給定budget多少用來做深度搜尋,多少做廣度搜尋。
論文認為在不同的budget和問題難度下應該存在廣度和深度策略的最優ratio,老實說下圖的趨勢並不是非常的明顯,能推理出的結論有
- Budget有限,revision更多的效果更好,Budget很大時存在最優ratio。但我的感覺是這並非balance ratio,而是廣度策略對budget的依賴更明視訊記憶體在突變點,就是當budget>threshold會在部分問題上效果有更顯著的提升,而revision隨budget的效果提升更平滑
- 簡單問題,revision更多效果更好,複雜問題存在最優ratio,在解決複雜問題時深度和廣度策略可以互相補充
最後還有一個問題沒有回答就是推理效果提升和預訓練之間的balance,直接上圖,具體資料不是很重要因為和模型以及資料集都相關,所以只說下insight
- 簡單問題:更多推理資源能覆蓋更多預訓練能解決的問題,所以小模型更多推理資源更合適
- 複雜問題:對於模型能力以外的複雜問題,預訓練是提升模型能力的核心
想看更全的大模型相關論文梳理·微調及預訓練資料和框架·AIGC應用,移步Github >> DecryPrompt