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