Hugging Face的Open R1再度升級(jí)! Hugging Face的Open R1是一個(gè)社區(qū)驅(qū)動(dòng)的項(xiàng)目,目標(biāo)是創(chuàng)建一個(gè)完全開源的DeepSeek-R1版本。目前,已有模型如OlympicCoder-32B和數(shù)據(jù)集如codeforces發(fā)布,顯示了項(xiàng)目的進(jìn)展。 最新發(fā)布的7B和32B OlympicCoder,在IOI挑戰(zhàn)上超越了一眾前沿模型,比Claude 3.7 Sonnet還猛。 OlympicCoder已經(jīng)成了代碼推理界的「肌肉猛男」,有些模型規(guī)模比它大100倍,結(jié)果還是被它按在地上摩擦…… 模型在2024年國(guó)際信息學(xué)奧林匹克競(jìng)賽(IOI)50次提交中的表現(xiàn) 而這一切,得感謝Open R1的一系列騷操作: CodeForces-CoTs數(shù)據(jù)集:近10萬(wàn)個(gè)高質(zhì)量樣本,提煉自DeepSeek-R1,專門訓(xùn)練C++和Python代碼生成。 IOI基準(zhǔn)測(cè)試:拿2024年國(guó)際信息學(xué)奧林匹克競(jìng)賽(IOI)的難題來(lái)虐AI,看看誰(shuí)是真正的「代碼戰(zhàn)神」。 提交策略優(yōu)化:模擬OpenAI的策略,讓模型最大化得分,像真正的選手一樣參加比賽。 我們來(lái)扒一扒它是怎么煉成的,以及Hugging Face團(tuán)隊(duì)踩過(guò)的那些坑。 (小心,可能會(huì)讓你懷疑人生:AI連刷題都比你強(qiáng)了……) CodeForces-CoTs數(shù)據(jù)集 CodeForces作為編程競(jìng)賽的熱門平臺(tái),其中的算法優(yōu)化問(wèn)題極具挑戰(zhàn)性。 這使其成為一個(gè)有趣的數(shù)據(jù)集,用于提升和測(cè)試模型的代碼推理能力。 此次發(fā)布的open-r1/codeforces包含了超過(guò)1萬(wàn)個(gè)問(wèn)題,時(shí)間跨度從最初的競(jìng)賽一直到2025年,其中約3000個(gè)問(wèn)題是DeepMind和CodeContests中沒有的。 對(duì)于約60%的問(wèn)題,數(shù)據(jù)集提供了競(jìng)賽組織者撰寫的解題思路,這對(duì)理解原理至關(guān)重要。 同時(shí),每個(gè)問(wèn)題都從官方網(wǎng)站提取了3個(gè)正確解決方案。 open-r1/codeforces-cots數(shù)據(jù)集更是一大亮點(diǎn),其中包含了DeepSeek-R1針對(duì)這些問(wèn)題生成的近10萬(wàn)個(gè)思維鏈(CoT)樣本,用C++和Python兩種語(yǔ)言呈現(xiàn)。 研究團(tuán)隊(duì)在這個(gè)數(shù)據(jù)集上對(duì)Qwen2.5 Coder Instruct 7B和32B進(jìn)行微調(diào),得到了OlympicCoder-7B和OlympicCoder-32B模型。 代碼可驗(yàn)證性危機(jī)雖然DeepMind和其他競(jìng)賽數(shù)據(jù)集都包含測(cè)試用例,并聲稱是可驗(yàn)證的,但這些通常只是競(jìng)賽網(wǎng)站上全套測(cè)試用例的一小部分。 特別是CodeForces,顯示的測(cè)試用例上限約為500個(gè)字符,這意味著這些數(shù)據(jù)集只包含符合此限制的較短、較簡(jiǎn)單的測(cè)試用例。 例如,研究者選取了7個(gè)問(wèn)題,R1生成的解決方案通過(guò)了全部公開測(cè)試用例,并將它們提交到CodeForces平臺(tái): 盡管這些方案通過(guò)了較短的測(cè)試,但均未通過(guò)完整測(cè)試集。這凸顯了對(duì)新的可驗(yàn)證的編程競(jìng)賽數(shù)據(jù)集的需求。 國(guó)際信息學(xué)奧林匹克競(jìng)賽(IOI) 國(guó)際信息學(xué)奧林匹克競(jìng)賽(IOI)是全球頂尖的編程競(jìng)賽。 完整測(cè)試集遵循寬松的(CC-BY)許可發(fā)布,使其成為測(cè)試代碼推理能力的理想數(shù)據(jù)集。 如果你熟悉美國(guó)數(shù)學(xué)邀請(qǐng)賽(AIME),IOI就相當(dāng)于數(shù)學(xué)奧林匹克競(jìng)賽(IMO)的編程版,參加AIME的最優(yōu)秀學(xué)生才有資格受邀參加IMO。 IOI的問(wèn)題設(shè)計(jì)獨(dú)特,每個(gè)問(wèn)題細(xì)分為多個(gè)子任務(wù),各子任務(wù)輸入約束不同。 參賽者要解決子任務(wù),提交的方案須在嚴(yán)格時(shí)限內(nèi)通過(guò)所有測(cè)試用例。 最后子任務(wù)通常是完整復(fù)雜問(wèn)題,而前面子任務(wù)相對(duì)簡(jiǎn)單、約束更多,參賽者常針對(duì)特定子任務(wù)拿部分分?jǐn)?shù),競(jìng)賽中得滿分十分罕見。 團(tuán)隊(duì)整理了2020-2024年的IOI問(wèn)題,將它們拆分為子任務(wù),使每個(gè)提示都能解決一個(gè)特定的子任務(wù),便于有針對(duì)性地訓(xùn)練和評(píng)估。 他們還在open-r1/ioi和open-r1/ioi-test-cases中發(fā)布了處理后的問(wèn)題陳述、評(píng)分檢查文件及測(cè)試用例,同時(shí)創(chuàng)建了自定義代碼,用于運(yùn)行解決方案并按IOI規(guī)則評(píng)分,代碼可在https://github.com/huggingface/ioi上獲取。 研究者對(duì)2024年IOI上40多個(gè)領(lǐng)先的推理模型進(jìn)行了全面評(píng)估。 每個(gè)問(wèn)題的提交次數(shù)限制為50次,采用與OpenAI類似的選擇策略模擬得分。 評(píng)估結(jié)果顯示,OlympicCoder模型表現(xiàn)出色。 OlympicCoder-32B在50次提交限制下,超越了o1-mini、DeepSeek-R1、Claude-3.7-Sonnet-thinking等模型。 模型在2024年國(guó)際信息學(xué)奧林匹克競(jìng)賽(IOI)50次提交中的表現(xiàn) 提交策略這種提交策略可能不利于非推理模型,像OlympicCoder-32B-Instruct和Qwen-2.5-Coder-32B-Instruct。 為模擬真實(shí)競(jìng)賽,團(tuán)隊(duì)采用類似OpenAI用于o1-ioi的循環(huán)提交策略。 首先提交針對(duì)最后一個(gè)子任務(wù)的解決方案,然后是倒數(shù)第二個(gè)子任務(wù)的方案,以此類推,只有選定提交時(shí)才評(píng)估解決方案。 若子任務(wù)已被之前選定的提交解決,就跳過(guò)針對(duì)該子任務(wù)的提交。 在每個(gè)目標(biāo)子任務(wù)里,傾向于選擇更長(zhǎng)的生成內(nèi)容,這對(duì)推理模型合理,對(duì)其他模型不太適用。 如果取消50次提交限制,并評(píng)估生成的所有提交,會(huì)得到以下結(jié)果: 國(guó)際信息學(xué)奧林匹克競(jìng)賽(2024年)無(wú)提交限制時(shí)模型的表現(xiàn) 基于R1軌跡訓(xùn)練的經(jīng)驗(yàn)教訓(xùn) 在創(chuàng)建OlympicCoder模型時(shí),研究者進(jìn)行了大量SFT實(shí)驗(yàn),以了解用于CodeForces數(shù)據(jù)集的各種篩選條件的作用。 發(fā)現(xiàn)open-r1/codeforces-cots的以下子集表現(xiàn)最佳:
請(qǐng)注意,這里只關(guān)注了C++解決方案,融入Python解決方案可能進(jìn)一步提高性能。 用LiveCodeBench作為模型的測(cè)試平臺(tái),然后將表現(xiàn)最佳的checkpoints用于更具挑戰(zhàn)性的IOI基準(zhǔn)測(cè)試。 研究者測(cè)試了各種超參數(shù)配置來(lái)訓(xùn)練模型,最終確定如下: 模型:Qwen2.5 Coder Instruct 7B和32B 輪數(shù):10 有效批大小:128 學(xué)習(xí)率:4e-5 調(diào)度器:余弦衰減至峰值學(xué)習(xí)率的10% 上下文長(zhǎng)度:7B為32,768個(gè)token,32B為22,528個(gè)token 樣本打包會(huì)損害推理性能樣本打包是一種在訓(xùn)練中常用的加速方法,它將訓(xùn)練樣本連接成大小相等的塊,無(wú)需填充token。 打包后,樣本可能會(huì)跨塊邊界重疊。不過(guò),要是大部分樣本比塊小很多,這種重疊影響不大。 然而,對(duì)于從R1提取的推理軌跡,這可能會(huì)帶來(lái)負(fù)面影響。 因?yàn)楹芏嘬壽E長(zhǎng),答案被截?cái)嗟目赡苄愿。這就導(dǎo)致訓(xùn)練時(shí),它很難關(guān)注長(zhǎng)上下文信息,尤其是問(wèn)題和答案被分到不同塊的時(shí)候。 如下圖所示,打包會(huì)嚴(yán)重?fù)p害模型的性能。用打包時(shí),模型幾乎解不出LiveCodebench里的題;不用打包,性能在幾個(gè)訓(xùn)練周期后趨于平穩(wěn)。 這種差異可能是由于訓(xùn)練集僅包含C++解決方案,而LiveCodeBench僅評(píng)估Python的性能。 盡管如此,在所有分析過(guò)的數(shù)據(jù)集里,打包的效果都更差。 用較大的學(xué)習(xí)率獲得最佳表現(xiàn)在用Qwen進(jìn)行的大多數(shù)SFT實(shí)驗(yàn)中,2e-5的學(xué)習(xí)率通常足以獲得強(qiáng)大的性能。 但是,當(dāng)將帶有推理數(shù)據(jù)的SFT用于現(xiàn)有指令模型時(shí),將學(xué)習(xí)率大幅提高到4e-5,性能會(huì)顯著提升。 如下圖所示,學(xué)習(xí)率每提高一倍,在LiveCodeBench上的得分就會(huì)提高近10分! 納入解題思路無(wú)助于提升性能在創(chuàng)建open-r1/codeforces-cots數(shù)據(jù)集中的solutions_w_editorials子集時(shí),原以為給R1輸入問(wèn)題及解答,能獲得更好的推理軌跡。 但出人意料的是,結(jié)果并非如此。訓(xùn)練時(shí),直接從問(wèn)題描述采樣,反倒讓性能有了一定的持續(xù)提升。 用 |
原創(chuàng)欄目
IT百科
網(wǎng)友評(píng)論
聚超值•精選