斯坦福、Deepmind、劍橋聯合發文:推理ScalingUp的簡單技巧

隨著 o1、o1 Pro 和 o3 的成功釋出,我們明顯看到,推理所需的時間和計算資源逐步上升。可以說,o1 的最大貢獻在於它揭示了提升模型效果的另一種途徑:在推理過程中,透過最佳化計算資源的配置,可能比單純擴充套件模型引數更為高效。
上述的結論不是憑空提出的,在谷歌八月發表的一篇論文中透過系統全面的實驗,進行了詳細的論證。同時論文中對於如何驗證最佳結果給出了詳細的分析。
論文標題:

Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters

論文連結:
https://arxiv.org/pdf/2408.03314

相比透過增量預訓練或者微調的方式,增加推理資源更加簡單直接,不需要大量的資料和成本,減少了訓練微調帶來的試錯成本,對於快速的效果驗證是多麼理想的方案。
我們知道大模型的生成過程是 token by token 的生成方式,假如詞表大小是 V,需要生成的長度序列是 L,生成過程可以看作是從 V*L 的矩陣中每一列選擇一個元素的過程,如下圖的紅色色塊代表的序列,至少有一條正確的路徑。
這種情況下,大模型的一次生成過程,等同於取樣一條上圖中的序列。隨著取樣次數的增加,那麼取樣的結果集合中包括正確序列的機率一定是增大的,極限狀態下,取樣所有的組合方式,那麼一定有正確答案。

基於重複取樣的推理技巧

基於這個想法,斯坦福、Deepmind、劍橋在下面的論文給出了詳細的實驗分析。
論文標題:

Large Language Monkeys: Scaling Inference Compute with Repeated Sampling

論文連結:
https://arxiv.org/pdf/2407.21787

透過重複取樣的方式,能夠獲取到足夠多的候選答案,從而提升模型的效能。例如,論文提到 DeepSeek-Coder-V2-Instruct 在 SWE-bench Lite 資料集上,透過250 取樣能夠從 15.9% 的準確率提升到 56%,遠超 SOTA 的 43%
為了驗證方法的有效性,那麼有兩個問題需要考慮:
為了解決這兩個問題,論文中定義了兩個指標:
為了便於實驗的驗證,在論文中,只使用了 GSM8K、MATH、MiniF2F-MATH、CodeContests 和 SWE-bench Lite 資料集,這些資料集能夠透過自動化的方式驗證答案的有效性
從論文的實驗結果來看,重複取樣的方法無疑是成功的,隨著取樣次數的增多,覆蓋率得到明顯的提升。但我們可能有疑惑:這個方法是否適用於所有的大模型?這個答案是肯定的,論文中給出了這個問題的實驗結果。
重複取樣能夠在各種模型規模(70M-70B)、模型家族(Llama、Gemma 和 Pythia)以及不同的後訓練水平(基礎模型和指令模型)中實現一致的覆蓋率提升。
從前面的分析看,重複取樣是以推理成本的增加為代價,提升大模型的效果,那增加的成本是否具備價效比?論文中透過定義 FLOPs 來衡量成本,定義如下:
  • FLOPs per token 衡量模型處理單個 token 所需的計算量。
  • total inference FLOPs 表明整個推理任務的計算複雜度,包含輸入 token 和生成輸出 token 的計算,以及多次生成(例如透過重複取樣)帶來的額外計算開銷。
但遺憾的是,在論文的實驗中,並沒有得到一致的結論:單獨檢查 FLOPs 可能是一個粗略的成本指標,它忽略了系統效率的其他方面。特別是,重複取樣可以利用大批次和專門的最佳化來提高相對於單次嘗試推理工作負載的系統吞吐量。
以推理FLOP的數量衡量,以及Llama8B-Instruct和Llama-3-70B-Instruct的覆蓋率。我們看到理想的模型大小取決於任務、計算預算和覆蓋要求
從上圖可以看出,在相同 FLOPs 下,除了 CodeContests 任務外,8B 的模型效果更佳。而 CodeContests 任務上 70B 總是優於 8B 的模型。重複取樣帶來的效果提升需要結合任務的複雜程度來看。
不過,從實際落地的角度出發,當不具備大量顯示卡資源下,以推理耗時成本提升效果也是不錯的選擇。畢竟,不考慮資源的落地就是耍流氓。

重複取樣方法的縮放定律

在推理過程中,增加取樣次數會提高覆蓋率,但也會顯著增加計算成本(FLOPs)。論文希望透過縮放定律找到效能與計算成本的最優平衡點
我們知道,傳統的模型縮放定律(Scaling Laws)主要研究訓練階段的效能隨計算預算的變化規律。而論文透過研究推理階段的重複取樣,希望揭示推理計算量如何影響模型的效能表現(如覆蓋率、任務解決率)。
希望透過縮放定律幫助回答:
  • 隨著重複取樣次數的增加,效能提升是否遵循某種規律?
  • 模型在推理階段的效能增長是否存在遞減收益?
對於大多數任務和模型,覆蓋率和樣本數量之間的關係可以用指數冪定律建模。但是,如MiniF2F-MATH上的Llama-3-8B-Instruct稍微有點差異,這可能和模型以及具體任務場景有關。

驗證器是重複取樣的瓶頸

基於上面的討論,我們可以看出,推理階段的重複取樣能夠有效提升覆蓋率,也就是獲得備選答案,但是,從所有的候選解中如何選出正確的答案呢?
可以類比傳統的搜尋引擎,使用者搜尋“一點點奶茶”,召回階段會得到大量的候選結果,排序階段是如何將“一點點”這個品牌排序到第一位,這也就是驗證器要乾的事。
論文設計了三種驗證器的實現邏輯:
  • Majority Vote(多數投票):少數服從多數的邏輯
  • Reward Model + Best-of-N:使用 ArmoRM-Llama3-8B-v0.1 模型對每個答案進行評分,根據得分進行排序
  • Reward Model + Majority Vote:計算多數票,其中每個樣本由其獎勵模型分數加權
透過實驗結果,我們可以看出,重複取樣方法帶來的效果提升,很大程度受限於驗證器的效能,覆蓋率的提高無法直接轉化為最終的任務成功率,且驗證器在樣本數量增加時表現出效能飽和。
這是谷歌的 alpha 程式碼(前文提到的谷歌 8 月份提出的論文)。結合可靠的驗證器,你可以將域效能擴充套件到瘋狂的水平。
當然,也有網友表示這個方法更像是 O3 的簡化版本。

總結

對於提升模型效能,大多數的選擇是調整模型,包括預訓練、微調和強化學習等,在訓練階段增加成本。重複取樣給了我們一種新的思路,不改變模型的情況下,透過增加推理耗時,也能得到很好的結果,但效果的提升強依賴於驗證器的效能。
世間難得雙全事,解決了一個問題,總會出現另一個問題,但這不就是探索嘛,期待在這個方向上的進一步的突破。
參考文獻

https://x.com/rohanpaul_ai/status/1834908421864239183

https://x.com/_philschmid/status/1868919520741445797

https://x.com/DrJimFan/status/1834279865933332752

https://x.com/_philschmid/status/1870396154241843312
https://x.com/michaeljmcnair/status/1870515810307063814

https://x.com/dosco/status/1870613928092619153

相關文章