o3斬獲IOI金牌沖榜全球TOP 18,自學碾壓頂尖程序員!48頁技術報告公布
幾天前,谷歌AlphaGeometry 2拿下IMO金牌,震驚了所有人。
這次,o3在IOI 2024競賽中取得驚人的394分(滿分600),一舉奪得金牌,實力相當于全球第18名賽級選手。
不僅如此,在世界級編程競賽CodeForces上,o3位居全球Top 200之列,堪比人類頂尖程序員。
早在去年8月,OpenAI團隊便開始全力準備讓o系模型參賽IOI 2024,o1作為第一個代表上陣。
為了提升AI性能,他們當時用盡了幾乎所有的技巧——微調、基于測試用例進行過濾、提示模型生成額外的測試用例、基于相似度對解決方案進行聚類、對聚類進行排序等等。
誰曾想,那個「苦澀的教訓」依然和往常一樣苦澀......
而o3卻在無人啟發(fā)的情況下,通過強化學習中自己摸索出了一些技巧,就比如,用隨機測試用例對比暴力解來測試代碼。
o3通過「思維鏈」來scaling測試時計算的能力是多么強大。
當我們檢查思維鏈過程時,我們發(fā)現模型自主發(fā)展出了自己的測試時策略。其中一個有趣的策略是:模型會 1)先寫一個簡單的暴力解決方案,然后 2)用它來驗證一個更復雜的優(yōu)化方案。
這些關鍵發(fā)現,現如今已全部公開了。
本月初,OpenAI團隊在arXiv發(fā)表了一篇,超全48頁推理模型參與競爭性編程的研究。
論文鏈接:https://arXiv.org/pdf/2502.06807
論文中,他們展示了LLM如何從「菜鳥」進階到全球Top程序員,甚至拿下了IOI金牌的全過程!
最新研究,重點強調了「推理」在編程任務中的重要性,詳細呈現了o系推理模型在編程方面的進展,以及在各類競賽編程、編碼基準測試中評估方法和結果。
其中,關鍵亮點有以下四個:
- 展示了CoT推理的強大作用:從競賽編程基準到復雜軟件工程難題,編程表現都有提高
- 同時增加強化學習訓練和測試時計算資源,能持續(xù)提升模型表現,幾乎達到世界頂尖人類水平
- 利用CodeForces、IOI等多個權威平臺及數據集,全面驗證模型在競賽和實際任務中的表現
- 發(fā)現LLM通過強化學習可超越特定領域模型,證實CoT推理提升模型性能
半個月前,奧特曼曾在采訪中劇透,「OpenAI內部的一個推理模型已躍升至全球第50名,而且很可能在年底前霸榜」。
用不了多久,AI真的要踏平編程界了么。
AI拿下IOI金牌,卷趴頂尖程序員
競技編程,被廣泛認為是評估推理和編程能力的具有挑戰(zhàn)性的基準。
從文檔字符串合成程序,OpenAI早期某模型的正確率為28.8%,而GPT-3對這類問題甚至完全無能為力。
解決復雜的算法問題,需要高級的計算思維和問題解決技巧。此外,這些問題還具有客觀的可評分性,使其成為評估AI系統推理能力的理想試驗平臺。
AlphaCode通過大規(guī)模代碼生成和推理過程中的啟發(fā)式方法,成功解決了競賽編程任務。隨后推出的AlphaCode2,幾乎使AlphaCode的解決問題數量翻倍,并使其在CodeForces平臺上躋身前15%。
論文地址:https://www.science.org/doi/10.1126/science.abq1158
這兩種系統都在問題上大規(guī)模采樣,最多生成一百萬個候選解決方案,然后通過手工設計的測試策略選擇前10個提交結果。
自那時以來,利用強化學習提升大規(guī)模語言模型(LLM)推理能力取得了顯著進展。這促使了大規(guī)模推理模型(LRM)的出現:這些語言模型通過強化學習進行訓練,以「推理」和「思考」復雜的思維鏈。
一個尚未解決的問題是,領域特定的手工設計推理策略與模型自主生成并執(zhí)行的學習方法相比,效果如何?
為了解決這個問題,團隊希望從o1、o1-ioi和o3的早期checkpoint中獲得靈感。
OpenAI o1使用通用方法來提升編程性能。而o1-ioi是一個針對2024年國際信息學奧林匹克(IOI)競賽進行微調的系統,采用了類似于AlphaCode系統的測試時策略。與o1-ioi或AlphaCode不同,o3不依賴于由人工定義的特定編碼的測試時策略。
值得注意的是,o3在2024年IOI中贏得了金牌,并獲得了與人類頂尖選手相當的CodeForces評級。
o1:推理模型先鋒
o1通過強化學習訓練的大型語言模型,利用CoT將復雜任務分解為易于處理的部分,用于處理復雜的推理任務。
此外,o1能夠使用外部工具,特別是在安全環(huán)境中編寫和執(zhí)行代碼,讓o1能夠驗證生成的代碼是否能編譯、能否通過測試用例并滿足其他正確性檢查。
通過測試和優(yōu)化其輸出,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的表現
o1-ioi:為競賽「量身定制」
o1-ioi起源
在開發(fā)和評估OpenAI o1的過程中,發(fā)現增加強化學習(RL)計算量和測試時間推理計算量,都能持續(xù)提高模型性能。
圖2:更多的強化學習訓練/測試時計算資源提升了競賽數學表現
基于這些洞察,研究團隊創(chuàng)建了o1-ioi系統,用于參加2024年國際信息學奧林匹克(IOI)。
除了針對編程任務進行的持續(xù)強化學習訓練,o1-ioi還結合了專門為競賽編程設計的測試時推理策略。
編程任務的強化微調
第一步是擴展OpenAI o1的強化學習階段,重點聚焦于編程任務。
通過將額外的訓練計算資源投入到編程問題中,我們增強了模型規(guī)劃、實現和調試更復雜解決方案的能力。具體來說:
- 從OpenAI o1的checkpoint恢復了強化學習訓練
- 特別強調了具有挑戰(zhàn)性的編程問題,幫助模型提升C++代碼生成和運行時檢查能力
- 引導模型生成符合IOI提交格式的輸出
這種額外的編程訓練使得o1-ioi在推理過程中能夠編寫并執(zhí)行C++程序。通過反復運行和優(yōu)化解決方案,模型在推理過程中不斷改進其推理能力,從而增強了編程和解決問題的技能。
o1-ioi測試時策略
從整體上看,測試時策略將每個IOI問題分解成多個子任務。
對于每個子任務,從o1-ioi中采樣了10,000個解決方案,然后采用基于聚類和重新排序的方法,來決定從這些解決方案中提交哪些結果。
問題設定
o1-ioi選擇單獨解決每個問題的各個子任務,因為IOI的評分是基于每個子任務進行的,并且每個選手的最終得分是所有子任務中最佳嘗試的得分。
因此,將每個IOI問題分解為其組成的子任務(根據每個問題的評分指南中的劃分)。具體做法是為每個子任務創(chuàng)建一個版本的文檔,刪除其他子任務的信息。
聚類
基于模型生成的測試輸入的輸出,對生成的解決方案進行了聚類。
對于每個子任務,首先讓模型根據問題規(guī)格和子任務要求生成隨機的C++測試輸入生成器。研究團隊使用這些生成器生成256個隨機測試輸入。
為了確保這些測試輸入的有效性,接著讓模型編寫C++的測試輸入驗證器,檢查每個測試輸入是否滿足子任務的約束條件。
最終,只接受通過至少75%驗證器檢查的測試輸入。對于每個子任務,生成了256個這樣的隨機測試輸入,并基于這些測試輸入的輸出進行了聚類。所有在所有測試輸入上輸出相同的程序將被歸為同一類。
重新排序
接著,研究團隊實現了測試時計算策略中的重新排序核心部分。根據以下幾個方面,對每個解決方案進行了評分:
- 根據學習得來的評分函數評估解決方案的質量
- 在模型生成的測試輸入上出現的錯誤
- 未通過提供的公共測試用例
每個聚類都被賦予了一個分數,該分數定義為該聚類中包含的樣本的平均分數減去每次從該聚類提交樣本時所受到的懲罰。所有這些懲罰的權重是通過對過去幾年IOI問題的解決方案進行隨機搜索調整的,具體方法是通過直接模擬提交過程來進行調優(yōu)。
模擬提交
隨后以輪詢的方式提交了最多50個解決方案(這是人類參賽者允許的最大提交次數),從最難的子任務開始,覆蓋所有子任務。
研究團隊為每個子任務選擇排名靠前的集群中的最高排名解決方案。
當某個子任務被解決(即獲得了最高分)時,停止對該子任務的采樣。
在提交任何嚴格包含已解決子任務的子任務的解決方案時,會過濾掉那些與已解決子任務的測試輸入輸出不匹配的解決方案,從而通過剔除幾乎肯定會在較簡單子任務上失敗的解決方案,快速縮小較難子任務上的候選解決方案范圍。
CodeForces基準測試
研究團隊再次模擬了CodeForces競賽,以評估o1-ioi的編程能力,競賽條件與實際比賽高度一致,包括每個問題的完整測試集和適當的時間與內存限制。
圖3顯示,o1-ioi達到了1807的CodeForces評分,超越了93%的競爭者——這清楚地展示了通過在編程任務上進行額外強化學習訓練所帶來的改進。
當應用簡單的篩選器,拒絕任何未通過公共測試的解決方案時,評分提高到了2092(第96百分位)。完整的測試時策略進一步提升了性能,達到了2214的評分(第98百分位)。
這些結果驗證了領域特定的強化學習微調與先進的選擇啟發(fā)式方法相結合,可以顯著提升競賽編程的成果。
圖3:通過對OpenAI o1進行編碼任務的進一步訓練并結合測試時策略,可以提升性能
CodeForces維護著一個全球活動參與者的排行榜。研究團隊直接將o3在測試競賽中的解題率與其他參賽者進行比較。
圖10展示了這兩種比較,展示了他們在參賽的競賽中的平均解題率與他們的評分,并標出了關鍵績效水平的評分閾值。
其中,每個點代表至少參加了8場測試競賽的參賽者。水平線表示全球CodeForces活躍競爭者排行榜上的表現閾值。
盡管最頂尖的人類參賽者仍然遠遠強于o3,他們的解題率超過85%,但評分和解題率都表明,o3可以位列全球前200名活躍參與者之中。
圖10:o3位居全球Top 200競賽程序員之列
IOI 2024
o1-ioi系統在與人類參賽者相同的條件下參加了2024年國際信息學奧林匹克競賽(IOI)。它有10小時的時間解決六個高難度算法問題,每個問題最多允許提交50次。
在競賽期間,系統為每個問題生成了10,000個候選解決方案,并使用設計的測試時選擇策略從中挑選50個提交方案。
該策略根據提交方案在IOI公開測試用例、模型生成的測試用例以及學習得到的評分函數上的表現進行優(yōu)先級排序。該模型最終得分213分,位列競賽的第49百分位。
相比之下,隨機選擇50個提交方案的平均得分僅為156分,這表明選擇策略在競賽的限制條件下額外貢獻了近60分。
當每個問題的提交限制放寬到10,000次時,模型的表現顯著提升。在不采用任何測試時選擇策略的情況下,其得分達到了362.14分,超過了金牌門檻。
圖4:o1-ioi在IOI 2024競賽中的表現
o3:自主推理新SOTA
o3在o1和o1-ioi的基礎上,進行了更具創(chuàng)新性的探索。它致力于僅依靠強化學習訓練,擺脫對人工設計測試時策略的依賴,挖掘模型自主推理的極限。
研究人員獲取了o3的早期checkpoint,在編程競賽任務上對其進行評估。
在CodeForces基準測試中,o3的表現堪稱驚艷。進一步的RL訓練讓o3相較于o1和o1-ioi有了質的飛躍。
o3的評分從o1-ioi的2214(98百分位)提升至 2724(99.8百分位),這一巨大的提升反映出o3在解決復雜算法問題的能力有了顯著增強,可靠性更高,在CodeForces平臺上的實力已經接近頂尖人類選手。
o3在推理過程中展現出更具洞察力和深度思考的思維鏈。
對于驗證過程較為復雜的問題,o3會采用一種獨特的策略:先編寫簡單的暴力解法,犧牲一定效率來確保正確性,然后將暴力解法的輸出與更優(yōu)化的算法實現進行交叉檢查。
這種自我驗證機制有效地幫助o3發(fā)現潛在錯誤,提高了解決方案的可靠性。
在2024年IOI基準測試中,研究人員對o3在相同的6個IOI問題上進行了回溯評估。o3采用了與o1-ioi不同的采樣和選擇策略。
o3從包含原始問題陳述的單個提示中采樣,每個問題僅采樣1000個解決方案,選擇策略也更為簡潔,即從1024個樣本中選取測試時計算得分最高的50個解決方案。
即便采用如此簡化的方法,o3依然能夠生成強大的解決方案,覆蓋大部分甚至全部子任務,而無需像o1-ioi那樣依賴子任務特定的提示、手動分區(qū)或復雜的提交策略。
最終,o3在僅提交50次的情況下,得分達到395.64分,超過了金牌分數線,而o1-ioi在相同提交次數下僅得到213分,提交次數增加到10000次才超過金牌分數線。
這充分證明了o3無需依賴特定領域的啟發(fā)式方法或基于聚類的復雜策略,僅靠大規(guī)模強化學習訓練就能實現卓越的編碼和推理性能。
編程中的「實戰(zhàn)」表現
編程競賽雖然能展示AI的能力,在實際的軟件開發(fā)任務中,模型的表現又如何呢?
研究人員通過HackerRank Astra和SWE-bench Verified這兩個數據集,對模型進行了進一步的測試。
HackerRank Astra數據集包含65個編碼挑戰(zhàn),旨在模擬現實世界的軟件開發(fā)任務。
這些挑戰(zhàn)涵蓋了React.js、Django和Node.js等多種框架,要求開發(fā)者在復雜的多文件、長上下文場景中解決問題,并且不提供公共測試用例。
測試結果顯示,o1-preview相較于GPT-4o,首次嘗試完成任務的概率(pass@1)上提高了9.98%,平均得分提升了6.03分。
經強化學習微調后的o1表現更優(yōu),pass@1達到63.92%,平均得分達到75.80%,相比o1-preview又有了進一步提升。這表明o1能夠有效地應對復雜的軟件開發(fā)任務。
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等復雜的軟件工程挑戰(zhàn),增加強化學習訓練計算量和測試時計算量,能持續(xù)推動模型性能提升,使其接近甚至超越世界頂尖人類選手的水平。