o3斬獲IOI金牌衝榜全球TOP 18,自學碾壓頂尖程序員!48頁技術報告公佈

新智元報導  

編輯:編輯部 JYs

【新智元導讀】o3一舉拿下IOI 2024金牌,躋身全球TOP 18頂尖程序員之列!OpenAI團隊48頁新作揭秘原理:強化學習+Scaling測試時計算,讓o3逐漸從「編程新秀」進階到拿下奧賽金牌!

這次,o3在IOI 2024競賽中取得驚人的394分(滿分600),一舉奪得金牌,實力相當於全球第18名賽級選手。

不僅如此,在世界級編程競賽CodeForces上,o3位居全球Top 200之列,堪比人類頂尖程序員。

早在去年8月,OpenAI團隊便開始全力準備讓o系模型參賽IOI 2024,o1作為第一個代表上陣。

為了提升AI性能,他們當時用盡了幾乎所有的技巧——微調、基於測試用例進行過濾、提示模型生成額外的測試用例、基於相似度對解決方案進行聚類、對聚類進行排序等等。

誰曾想,那個「苦澀的教訓」依然和往常一樣苦澀……

而o3卻在無人啟發的情況下,通過強化學習中自己摸索出了一些技巧,就比如,用隨機測試用例對比暴力解來測試代碼。

o3通過「思維鏈」來scaling測試時計算的能力是多麼強大。

當我們檢查思維鏈過程時,我們發現模型自主發展出了自己的測試時策略。其中一個有趣的策略是:模型會 1)先寫一個簡單的暴力解決方案,然後 2)用它來驗證一個更複雜的優化方案。

這些關鍵發現,現如今已全部公開了。

本月初,OpenAI團隊在arXiv發表了一篇,超全48頁推理模型參與競爭性編程的研究。

論文鏈接:https://arXiv.org/pdf/2502.06807論文鏈接:https://arXiv.org/pdf/2502.06807

論文中,他們展示了LLM如何從「新秀」進階到全球Top程序員,甚至拿下了IOI金牌的全過程!

最新研究,重點強調了「推理」在編程任務中的重要性,詳細呈現了o系推理模型在編程方面的進展,以及在各類競賽編程、編碼基準測試中評估方法和結果。

其中,關鍵亮點有以下四個:

展示了CoT推理的強大作用:從競賽編程基準到複雜軟件工程難題,編程表現都有提高

同時增加強化學習訓練和測試時計算資源,能持續提升模型表現,幾乎達到世界頂尖人類水平

利用CodeForces、IOI等多個權威平台及數據集,全面驗證模型在競賽和實際任務中的表現

發現LLM通過強化學習可超越特定領域模型,證實CoT推理提升模型性能

半個月前,奧特曼曾在採訪中劇透,「OpenAI內部的一個推理模型已躍升至全球第50名,而且很可能在年底前霸榜」。

用不了多久,AI真的要踏平編程界了麼。

AI拿下IOI金牌,卷趴頂尖程序員

競技編程,被廣泛認為是評估推理和編程能力的具有挑戰性的基準。

從文檔字符串合成程序,OpenAI早期某模型的正確率為28.8%,而GPT-3對這類問題甚至完全無能為力。

解決複雜的算法問題,需要高級的計算思維和問題解決技巧。此外,這些問題還具有客觀的可評分性,使其成為評估AI系統推理能力的理想試驗平台。

AlphaCode通過大規模代碼生成和推理過程中的啟髮式方法,成功解決了競賽編程任務。隨後推出的AlphaCode2,幾乎使AlphaCode的解決問題數量翻倍,並使其在CodeForces平台上躋身前15%。

論文地址:https://www.science.org/doi/10.1126/science.abq1158論文地址:https://www.science.org/doi/10.1126/science.abq1158

這兩種系統都在問題上大規模采樣,最多生成一百萬個候選解決方案,然後通過手工設計的測試策略選擇前10個提交結果。

自那時以來,利用強化學習提升大規模語言模型(LLM)推理能力取得了顯著進展。這促使了大規模推理模型(LRM)的出現:這些語言模型通過強化學習進行訓練,以「推理」和「思考」複雜的思維鏈。

一個尚未解決的問題是,領域特定的手工設計推理策略與模型自主生成並執行的學習方法相比,效果如何?

為瞭解決這個問題,團隊希望從o1、o1-ioi和o3的早期checkpoint中獲得靈感。

OpenAI o1使用通用方法來提升編程性能。而o1-ioi是一個針對2024年國際信息學奧林匹克(IOI)競賽進行微調的系統,採用了類似於AlphaCode系統的測試時策略。與o1-ioi或AlphaCode不同,o3不依賴於由人工定義的特定編碼的測試時策略。

值得注意的是,o3在2024年IOI中贏得了金牌,並獲得了與人類頂尖選手相當的CodeForces評級。

o1:推理模型先鋒

o1通過強化學習訓練的大型語言模型,利用CoT將複雜任務分解為易於處理的部分,用於處理複雜的推理任務。

此外,o1能夠使用外部工具,特別是在安全環境中編寫和執行代碼,讓o1能夠驗證生成的代碼是否能編譯、能否通過測試用例並滿足其他正確性檢查。

通過測試和優化其輸出,o1在單次樣本過程中不斷改進其解決方案。

CodeForces是一個舉辦實時編程競賽的網站,吸引了世界上頂尖的競賽程序員。

為了評估模型在競賽編程中的能力,模擬了與實際比賽條件非常相似的CodeForces競賽,包括使用每個問題的完整測試集,並為解決方案設定適當的時間和內存限制。

o1與非推理模型gpt4o和早期的推理模型o1-preview進行了比較。如圖1顯示,o1-preview和o1的表現遠遠超越了gpt-4o,突顯了強化學習在複雜推理中的有效性。

o1-preview模型在CodeForces上的評分為1258(第62百分位),相比之下,gpt-4o的評分為808(第11百分位)。進一步的訓練使o1的評分提高到1673(第89百分位),為AI在競賽編程中的表現設立了新的里程碑。

圖1:在CodeForces上不同大語言模型OpenAI o1-preview、o1與GPT-4o的表現圖1:在CodeForces上不同大語言模型OpenAI o1-preview、o1與GPT-4o的表現

o1-ioi:為競賽「量身定製」

o1-ioi起源

在開發和評估OpenAI o1的過程中,發現增加強化學習(RL)計算量和測試時間推理計算量,都能持續提高模型性能。

圖2:更多的強化學習訓練/測試時計算資源提升了競賽數學表現圖2:更多的強化學習訓練/測試時計算資源提升了競賽數學表現

基於這些洞察,研究團隊創建了o1-ioi系統,用於參加2024年國際信息學奧林匹克(IOI)。

除了針對編程任務進行的持續強化學習訓練,o1-ioi還結合了專門為競賽編程設計的測試時推理策略。

編程任務的強化微調

第一步是擴展OpenAI o1的強化學習階段,重點聚焦於編程任務。

通過將額外的訓練計算資源投入到編程問題中,我們增強了模型規劃、實現和調試更複雜解決方案的能力。具體來說:

從OpenAI o1的checkpoint恢復了強化學習訓練

特別強調了具有挑戰性的編程問題,幫助模型提升C++代碼生成和運行時檢查能力

引導模型生成符合IOI提交格式的輸出

這種額外的編程訓練使得o1-ioi在推理過程中能夠編寫並執行C++程序。通過反復運行和優化解決方案,模型在推理過程中不斷改進其推理能力,從而增強了編程和解決問題的技能。

o1-ioi測試時策略

從整體上看,測試時策略將每個IOI問題分解成多個子任務。

對於每個子任務,從o1-ioi中采樣了10,000個解決方案,然後採用基於聚類和重新排序的方法,來決定從這些解決方案中提交哪些結果。

問題設定

o1-ioi選擇單獨解決每個問題的各個子任務,因為IOI的評分是基於每個子任務進行的,並且每個選手的最終得分是所有子任務中最佳嘗試的得分。

因此,將每個IOI問題分解為其組成的子任務(根據每個問題的評分指南中的劃分)。具體做法是為每個子任務創建一個版本的文檔,刪除其他子任務的信息。

聚類

基於模型生成的測試輸入的輸出,對生成的解決方案進行了聚類。

對於每個子任務,首先讓模型根據問題規格和子任務要求生成隨機的C++測試輸入生成器。研究團隊使用這些生成器生成256個隨機測試輸入。

為了確保這些測試輸入的有效性,接著讓模型編寫C++的測試輸入驗證器,檢查每個測試輸入是否滿足子任務的約束條件。

最終,只接受通過至少75%驗證器檢查的測試輸入。對於每個子任務,生成了256個這樣的隨機測試輸入,並基於這些測試輸入的輸出進行了聚類。所有在所有測試輸入上輸出相同的程序將被歸為同一類。

重新排序

接著,研究團隊實現了測試時計算策略中的重新排序核心部分。根據以下幾個方面,對每個解決方案進行了評分:

  • 根據學習得來的評分函數評估解決方案的質量

  • 在模型生成的測試輸入上出現的錯誤

  • 未通過提供的公共測試用例

每個聚類都被賦予了一個分數,該分數定義為該聚類中包含的樣本的平均分數減去每次從該聚類提交樣本時所受到的懲罰。所有這些懲罰的權重是通過對過去幾年IOI問題的解決方案進行隨機搜索調整的,具體方法是通過直接模擬提交過程來進行調優。

模擬提交

隨後以輪詢的方式提交了最多50個解決方案(這是人類參賽者允許的最大提交次數),從最難的子任務開始,覆蓋所有子任務。

研究團隊為每個子任務選擇排名靠前的集群中的最高排名解決方案。

當某個子任務被解決(即獲得了最高分)時,停止對該子任務的采樣。

在提交任何嚴格包含已解決子任務的子任務的解決方案時,會過濾掉那些與已解決子任務的測試輸入輸出不匹配的解決方案,從而通過剔除幾乎肯定會在較簡單子任務上失敗的解決方案,快速縮小較難子任務上的候選解決方案範圍。

CodeForces基準測試

研究團隊再次模擬了CodeForces競賽,以評估o1-ioi的編程能力,競賽條件與實際比賽高度一致,包括每個問題的完整測試集和適當的時間與內存限制。

圖3顯示,o1-ioi達到了1807的CodeForces評分,超越了93%的競爭者——這清楚地展示了通過在編程任務上進行額外強化學習訓練所帶來的改進。

當應用簡單的篩選器,拒絕任何未通過公共測試的解決方案時,評分提高到了2092(第96百分位)。完整的測試時策略進一步提升了性能,達到了2214的評分(第98百分位)。

這些結果驗證了領域特定的強化學習微調與先進的選擇啟髮式方法相結合,可以顯著提升競賽編程的成果。

圖3:通過對OpenAI o1進行編碼任務的進一步訓練並結合測試時策略,可以提升性能圖3:通過對OpenAI o1進行編碼任務的進一步訓練並結合測試時策略,可以提升性能

CodeForces維護著一個全球活動參與者的排行榜。研究團隊直接將o3在測試競賽中的解題率與其他參賽者進行比較。

圖10展示了這兩種比較,展示了他們在參賽的競賽中的平均解題率與他們的評分,並標出了關鍵績效水平的評分閾值。

其中,每個點代表至少參加了8場測試競賽的參賽者。水平線表示全球CodeForces活躍競爭者排行榜上的表現閾值。

儘管最頂尖的人類參賽者仍然遠遠強於o3,他們的解題率超過85%,但評分和解題率都表明,o3可以位列全球前200名活躍參與者之中。

圖10:o3位居全球Top 200競賽程序員之列圖10:o3位居全球Top 200競賽程序員之列

IOI 2024

o1-ioi系統在與人類參賽者相同的條件下參加了2024年國際信息學奧林匹克競賽(IOI)。它有10小時的時間解決六個高難度算法問題,每個問題最多允許提交50次。

在競賽期間,系統為每個問題生成了10,000個候選解決方案,並使用設計的測試時選擇策略從中挑選50個提交方案。

該策略根據提交方案在IOI公開測試用例、模型生成的測試用例以及學習得到的評分函數上的表現進行優先級排序。該模型最終得分213分,位列競賽的第49百分位。

相比之下,隨機選擇50個提交方案的平均得分僅為156分,這表明選擇策略在競賽的限制條件下額外貢獻了近60分。

當每個問題的提交限制放寬到10,000次時,模型的表現顯著提升。在不採用任何測試時選擇策略的情況下,其得分達到了362.14分,超過了金牌門檻。

圖4:o1-ioi在IOI 2024競賽中的表現圖4:o1-ioi在IOI 2024競賽中的表現

o3:自主推理新SOTA

o3在o1和o1-ioi的基礎上,進行了更具創新性的探索。它致力於僅依靠強化學習訓練,擺脫對人工設計測試時策略的依賴,挖掘模型自主推理的極限。

研究人員獲取了o3的早期checkpoint,在編程競賽任務上對其進行評估。

在CodeForces基準測試中,o3的表現堪稱驚豔。進一步的RL訓練讓o3相較於o1和o1-ioi有了質的飛躍。

o3的評分從o1-ioi的2214(98百分位)提升至 2724(99.8百分位),這一巨大的提升反映出o3在解決複雜算法問題的能力有了顯著增強,可靠性更高,在CodeForces平台上的實力已經接近頂尖人類選手。

o3在推理過程中展現出更具洞察力和深度思考的思維鏈。

對於驗證過程較為複雜的問題,o3會採用一種獨特的策略:先編寫簡單的暴力解法,犧牲一定效率來確保正確性,然後將暴力解法的輸出與更優化的算法實現進行交叉檢查。

這種自我驗證機制有效地幫助o3發現潛在錯誤,提高瞭解決方案的可靠性。

在2024年IOI基準測試中,研究人員對o3在相同的6個IOI問題上進行了回溯評估。o3採用了與o1-ioi不同的采樣和選擇策略。

o3從包含原始問題陳述的單個提示中采樣,每個問題僅采樣1000個解決方案,選擇策略也更為簡潔,即從1024個樣本中選取測試時計算得分最高的50個解決方案。

即便採用如此簡化的方法,o3依然能夠生成強大的解決方案,覆蓋大部分甚至全部子任務,而無需像o1-ioi那樣依賴子任務特定的提示、手動分區或複雜的提交策略。

最終,o3在僅提交50次的情況下,得分達到395.64分,超過了金牌分數線,而o1-ioi在相同提交次數下僅得到213分,提交次數增加到10000次才超過金牌分數線。

這充分證明了o3無需依胡禮定領域的啟髮式方法或基於聚類的複雜策略,僅靠大規模強化學習訓練就能實現卓越的編碼和推理性能。

編程中的「實戰」表現

編程競賽雖然能展示AI的能力,在實際的軟件開發任務中,模型的表現又如何呢?

研究人員通過HackerRank Astra和SWE-bench Verified這兩個數據集,對模型進行了進一步的測試。

HackerRank Astra數據集包含65個編碼挑戰,旨在模擬現實世界的軟件開發任務。

這些挑戰涵蓋了React.js、Django和Node.js等多種框架,要求開發者在複雜的多文件、長上下文場景中解決問題,並且不提供公共測試用例。

測試結果顯示,o1-preview相較於GPT-4o,首次嘗試完成任務的概率(pass@1)上提高了9.98%,平均得分提升了6.03分。

經強化學習微調後的o1表現更優,pass@1達到63.92%,平均得分達到75.80%,相比o1-preview又有了進一步提升。這表明o1能夠有效地應對複雜的軟件開發任務。

SWE-bench Verified是OpenAI對SWE-bench進行人工驗證後的子集,用於更可靠地評估AI模型解決實際軟件問題的能力。

在這個數據集上,o1-preview相較於GPT-4o有8.1%的性能提升,經過更多強化學習訓練的o1進一步提升了8.6%,o3相較於o1更是實現了22.8%的顯著提升。

這些結果說明,LLM的強大推理能力不僅在編程競賽中表現出色,在實際的軟件工程任務中同樣具有重要價值。

思維鏈推理對於提升編碼任務的性能有巨大威力。

從CodeForces和IOI等編程競賽基準測試,到SWE-bench和Astra等複雜的軟件工程挑戰,增加強化學習訓練計算量和測試時計算量,能持續推動模型性能提升,使其接近甚至超越世界頂尖人類選手的水平。

參考資料:

https://x.com/arankomatsuzaki/status/1889522974467957033

https://arXiv.org/abs/2502.06807