自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

將偏好學(xué)習(xí)引入模型訓(xùn)練,北大李戈團(tuán)隊(duì)新框架,可顯著提升代碼準(zhǔn)確性與執(zhí)行效率

人工智能
監(jiān)督微調(diào)(SFT)等現(xiàn)有訓(xùn)練方法,盡管提升了代碼質(zhì)量,但在代碼生成過(guò)程中存在關(guān)鍵局限——沒(méi)有完全訓(xùn)練模型在正確與錯(cuò)誤解決方案之間做出偏好選擇。

代碼模型SFT對(duì)齊后,缺少進(jìn)一步偏好學(xué)習(xí)的問(wèn)題有解了。

北大李戈教授團(tuán)隊(duì)與字節(jié)合作,在模型訓(xùn)練過(guò)程中引入偏好學(xué)習(xí),提出了一個(gè)全新的代碼生成優(yōu)化框架——CodeDPO。

在部分模型上,相比于單獨(dú)使用SFT,CodeDPO能夠?qū)⒛P偷腍umanEval得分再多提升10個(gè)百分點(diǎn),最高增幅接近1/3。

圖片圖片

監(jiān)督微調(diào)(SFT)等現(xiàn)有訓(xùn)練方法,盡管提升了代碼質(zhì)量,但在代碼生成過(guò)程中存在關(guān)鍵局限——沒(méi)有完全訓(xùn)練模型在正確與錯(cuò)誤解決方案之間做出偏好選擇。

當(dāng)采用SFT方法訓(xùn)練模型時(shí),隨著偏好輸出的可能性增加,生成不理想輸出的概率也隨之上升,導(dǎo)致性能出現(xiàn)瓶頸。

為解決這一問(wèn)題,北京大學(xué)李戈教授團(tuán)隊(duì)與字節(jié)跳動(dòng)合作,CodeDPO因此而生。

該框架將偏好學(xué)習(xí)融入代碼模型訓(xùn)練中,利用代碼自驗(yàn)證機(jī)制,顯著提升代碼生成的準(zhǔn)確性和執(zhí)行效率。

SFT對(duì)代碼生成效果的提升存在局限

代碼生成任務(wù),即根據(jù)自然語(yǔ)言描述自動(dòng)生成代碼,正日益受到廣泛關(guān)注。

大模型在大規(guī)模數(shù)據(jù)集上進(jìn)行了充分的訓(xùn)練,在這一領(lǐng)域展現(xiàn)出強(qiáng)大的能力。

這些代碼大模型通常會(huì)進(jìn)一步通過(guò)指令監(jiān)督微調(diào)(SFT)等方法進(jìn)行微調(diào),以最大限度提升其代碼生成能力。

然而,盡管SFT方法提升了模型的代碼生成效果,但其并未完全訓(xùn)練模型在正確與錯(cuò)誤解決方案之間做出偏好選擇。

以Phi-2-2.7B模型為例,在其后訓(xùn)練過(guò)程中,不同正確性和效率的代碼生成概率的變化情況如下圖所示。

圖片圖片

傳統(tǒng)的SFT策略難以教會(huì)模型更傾向于生成正確解決方案,而非錯(cuò)誤或執(zhí)行緩慢的方案。

因此,在代碼模型的后訓(xùn)練中更新訓(xùn)練策略,對(duì)于改進(jìn)這些代碼模型以應(yīng)對(duì)各種代碼生成任務(wù)至關(guān)重要。

本文提出新型代碼生成優(yōu)化框架CodeDPO,將偏好學(xué)習(xí)融入代碼模型訓(xùn)練中,基于兩個(gè)關(guān)鍵因素——正確性和效率——定義了代碼偏好。

其中,正確性指代碼是否準(zhǔn)確解決問(wèn)題,而效率是指衡量代碼運(yùn)行的速度。

研究團(tuán)隊(duì)期望在代碼模型的訓(xùn)練過(guò)程中,提升模型對(duì)正確、高效代碼的偏好性。

訓(xùn)練代碼模型代碼偏好

如圖所示,CodeDPO方法包含四個(gè)關(guān)鍵步驟:

圖片圖片

  • 數(shù)據(jù)種子構(gòu)建:首先從開(kāi)源代碼庫(kù)中收集數(shù)據(jù)種子并生成編程任務(wù)提示;
  • 正確性?xún)?yōu)化與自驗(yàn)證評(píng)分:同時(shí)生成代碼與測(cè)試,通過(guò)自驗(yàn)證機(jī)制構(gòu)建用于正確性?xún)?yōu)化的數(shù)據(jù)集;
  • 執(zhí)行時(shí)間效率優(yōu)化:研究團(tuán)隊(duì)在選定的可信測(cè)試集上測(cè)量執(zhí)行時(shí)間,以構(gòu)建效率優(yōu)化數(shù)據(jù)集;
  • 模型偏好訓(xùn)練:從上述兩個(gè)階段收集數(shù)據(jù)集,并使用DPO方法來(lái)訓(xùn)練多種代碼模型。

其中,自驗(yàn)證評(píng)分根據(jù)生成代碼是否通過(guò)測(cè)試進(jìn)行迭代更新。

(如上圖所示,經(jīng)過(guò)兩次迭代后,代碼-1的評(píng)分從1變?yōu)?.75再至2.7,因其通過(guò)更可靠的測(cè)試并在每次更新中獲得更高評(píng)分,表明其正確的概率更大)

代碼自驗(yàn)證機(jī)制

CodeDPO 通過(guò)自驗(yàn)證機(jī)制從真實(shí)代碼庫(kù)構(gòu)建數(shù)據(jù)集,其中代碼和測(cè)試用例被同時(shí)生成并用于評(píng)估。

團(tuán)隊(duì)假設(shè),能被更多代碼片段執(zhí)行的測(cè)試更為可靠,而通過(guò)更多測(cè)試的代碼則更有可能是正確的。

為此,CodeDPO采用了一套自驗(yàn)證過(guò)程:

每個(gè)代碼片段和測(cè)試用例首先獲得一個(gè)自驗(yàn)證分?jǐn)?shù),隨后使用一套類(lèi)PageRank的算法進(jìn)行迭代更新。

該算法通過(guò)考慮交叉驗(yàn)證中的關(guān)系,來(lái)調(diào)整每個(gè)代碼片段和測(cè)試的可信分?jǐn)?shù),優(yōu)先基于正確性和效率選擇解決方案。

在初始階段,所有代碼片段和測(cè)試用例的自驗(yàn)證得分均設(shè)為1。

隨著驗(yàn)證過(guò)程的進(jìn)行,代碼和測(cè)試用例的得分會(huì)根據(jù)通過(guò)率逐步更新。具體而言,測(cè)試用例被更多的代碼片段通過(guò),它的自驗(yàn)證得分就會(huì)越高;

通過(guò)越多高可信度測(cè)試用例的代碼片段,其自驗(yàn)證得分也越高。自驗(yàn)證得分的更新公式如下:

圖片圖片

其中,d為阻尼因子,Link(c,t)表示代碼片段c是否通過(guò)測(cè)試用例t。

經(jīng)過(guò)多次迭代后,評(píng)分逐步收斂,最終反映了代碼片段和測(cè)試用例的正確性質(zhì)量。

除了代碼正確性,代碼的執(zhí)行效率也是代碼生成模型優(yōu)化的重要指標(biāo)。

在 CodeDPO 中,團(tuán)隊(duì)通過(guò)記錄每個(gè)代碼片段在測(cè)試用例中的執(zhí)行時(shí)間,來(lái)優(yōu)化其執(zhí)行效率。

然而,并非所有測(cè)試用例都能準(zhǔn)確反映代碼的執(zhí)行效率。

為了確保效率評(píng)估的可靠性,該團(tuán)隊(duì)選擇在正確性?xún)?yōu)化階段評(píng)分最高的代碼片段所通過(guò)的測(cè)試用例,作為“可信測(cè)試集”,以此作為效率評(píng)估的標(biāo)準(zhǔn)。

對(duì)于通過(guò)可信測(cè)試集的代碼片段,執(zhí)行時(shí)間越短,其效率評(píng)分越高。

最終,這些效率較高的代碼片段將被用于訓(xùn)練數(shù)據(jù)集中,以進(jìn)一步優(yōu)化模型生成代碼的執(zhí)行效率。

CodeDPO的最終數(shù)據(jù)集,包含了從正確性?xún)?yōu)化與執(zhí)行效率優(yōu)化階段收集到的數(shù)據(jù)。

通過(guò)整合兩方面的數(shù)據(jù)集,確保了模型不僅能生成正確的代碼,還能生成高效的代碼解決方案。

完整的數(shù)據(jù)構(gòu)造流程如下圖所示:

圖片圖片

準(zhǔn)確性與效率均有提升

測(cè)試結(jié)果顯示,經(jīng)過(guò)CodeDPO優(yōu)化后,代碼模型的生成準(zhǔn)確率和效率,都獲得了一定提升。

代碼準(zhǔn)確性實(shí)驗(yàn)

研究團(tuán)隊(duì)在HumanEval(+),MBPP(+)和DS-1000三個(gè)數(shù)據(jù)集上進(jìn)行了廣泛實(shí)驗(yàn),涵蓋8種主流代碼生成模型,包含Base模型和SFT模型。

團(tuán)隊(duì)觀察到CodeDPO在所有模型上均帶來(lái)了顯著提升,無(wú)論其初始性能如何。

特別值得一提的是,在DeepSeekCoder-6.7B的基礎(chǔ)上,配合已有的SFT策略(MagiCoder-S-DS-6.7B),以及本文CodeDPO的增強(qiáng),最終模型在HumanEval上達(dá)到了83.5%的通過(guò)率。

此外,CodeDPO在更具挑戰(zhàn)性的HumanEval+上也展現(xiàn)出顯著進(jìn)步,證明了其在更嚴(yán)格評(píng)估下的魯棒性。

得益于CodeDPO的數(shù)據(jù)構(gòu)建策略,構(gòu)建一個(gè)可靠的偏好數(shù)據(jù)集,幫助模型傾向于高質(zhì)量輸出,從而實(shí)現(xiàn)更可靠的代碼生成。

CodeDPO在代碼模型的后期訓(xùn)練階段發(fā)揮著關(guān)鍵作用,顯著提升了整體性能。

圖片圖片

在DS-1000數(shù)據(jù)集上,該團(tuán)隊(duì)進(jìn)一步評(píng)估了CodeDPO在不同Python庫(kù)中的表現(xiàn)。

需要注意的是,在數(shù)據(jù)構(gòu)建過(guò)程中,并未融入特定Python庫(kù)的先驗(yàn)知識(shí)。

盡管在Torch和TensorFlow下團(tuán)隊(duì)觀察到了輕微的性能下降,可能是由于這些庫(kù)在數(shù)據(jù)集構(gòu)建中的占比較低。

然而,CodeDPO總體上顯示出對(duì)其各自基線模型的性能提升。

DS-1000在數(shù)據(jù)格式和評(píng)估的編程技能方面與HumanEval和MBPP等基準(zhǔn)有所不同,其數(shù)據(jù)構(gòu)造過(guò)程確保其幾乎不被任何模型的訓(xùn)練集所包含,從而使得團(tuán)隊(duì)在DS-1000上觀察到的改進(jìn)具有可靠性。

這些結(jié)果表明,CodeDPO不僅僅適應(yīng)于HumanEval等標(biāo)準(zhǔn)編程基準(zhǔn),也證明了CodeDPO能夠在更復(fù)雜和多樣化的場(chǎng)景中提升模型的編程能力。

圖片圖片

代碼執(zhí)行效率實(shí)驗(yàn)

對(duì)于代碼執(zhí)行效率這一問(wèn)題,該團(tuán)隊(duì)通過(guò)測(cè)量生成代碼的執(zhí)行時(shí)間并計(jì)算加速比來(lái)評(píng)估。

同時(shí)團(tuán)隊(duì)還評(píng)估了應(yīng)用CodeDPO前后代碼優(yōu)化百分比,其中程序若比基線快至少10%則視為已優(yōu)化。

這些指標(biāo)基于在應(yīng)用CodeDPO前后都能被解決的編程問(wèn)題所構(gòu)成的交集上來(lái)進(jìn)行實(shí)驗(yàn)。
團(tuán)隊(duì)選擇HumanEval+和MBPP+進(jìn)行評(píng)估,因其test case的構(gòu)造顯著擴(kuò)展了測(cè)試用例的多樣性,使得這兩個(gè)增強(qiáng)數(shù)據(jù)集涵蓋了各種邊緣情況。

下圖展示了多次實(shí)驗(yàn)結(jié)果的分布情況。

CodeDPO持續(xù)提升代碼性能,使生成的代碼平均加速1.25至1.45倍,約20%-45%的生成代碼解決方案得到了改進(jìn),證實(shí)了其在提升代碼效率方面的有效性。

圖片圖片

消融實(shí)驗(yàn)

進(jìn)一步地,作者探討了CodeDPO提出的自驗(yàn)證機(jī)制得到的排序分?jǐn)?shù),對(duì)于最終代碼生成效果的影響。

實(shí)驗(yàn)中選擇了一些其他的常見(jiàn)排序策略,如:

  • 全測(cè)試過(guò)濾,即假設(shè)所有生成的測(cè)試用例均正確,并利用它們來(lái)判斷代碼的正確性;
  • 按通過(guò)測(cè)試數(shù)量排序,即統(tǒng)計(jì)所有生成測(cè)試中每段代碼通過(guò)的測(cè)試數(shù)量,以通過(guò)測(cè)試最多和最少的代碼作為偏好對(duì);
  • 隨機(jī)選擇,即從生成的代碼中隨機(jī)選取兩個(gè)代碼解決方案作為偏好對(duì)。

實(shí)驗(yàn)結(jié)果表明,本文提出的自驗(yàn)證機(jī)制以及計(jì)算得到的排序分?jǐn)?shù),在確保偏好數(shù)據(jù)集構(gòu)建的正確性和可靠性方面起著至關(guān)重要的作用,顯著提升了CodeDPO框架的性能。

圖片圖片

文章還探討了不同偏好優(yōu)化策略(DPO、KTO和SFT)對(duì)代碼生成模型性能的影響。

SFT訓(xùn)練策略采用構(gòu)建的數(shù)據(jù)集中最佳的代碼解決方案。

在KTO訓(xùn)練策略中,研究團(tuán)隊(duì)在框架中用KTO替代了DPO。

下圖結(jié)果顯示,在這些策略中,DPO表現(xiàn)最佳。

得益于新型的數(shù)據(jù)構(gòu)建方法,團(tuán)隊(duì)能夠獲得分布均衡的正負(fù)偏好對(duì),從而增強(qiáng)了DPO中的對(duì)比機(jī)制。

圖片圖片

CodeDPO的框架不僅驗(yàn)證了自生成、驗(yàn)證機(jī)制和偏好學(xué)習(xí)在代碼生成領(lǐng)域的有效性,還為未來(lái)更大規(guī)模的代碼偏好優(yōu)化奠定了堅(jiān)實(shí)基礎(chǔ)。

CodeDPO的特色在于,不需要有大量?jī)?yōu)質(zhì)的測(cè)試用例,減少了對(duì)外部資源的依賴(lài),使得該框架能夠在高質(zhì)量測(cè)試數(shù)據(jù)可能稀少的現(xiàn)實(shí)場(chǎng)景中優(yōu)化代碼模型。

作者認(rèn)為,隨著技術(shù)的不斷發(fā)展,CodeDPO有望在實(shí)際應(yīng)用中幫助開(kāi)發(fā)團(tuán)隊(duì)生成更優(yōu)質(zhì)、更符合需求的代碼,顯著提升軟件的可靠性與交付質(zhì)量。

作者簡(jiǎn)介

本文的通訊作者是北京大學(xué)計(jì)算機(jī)學(xué)院長(zhǎng)聘教授李戈。

第一作者為李戈教授課題組博士生張克馳,本科畢業(yè)于北京大學(xué)信息科學(xué)技術(shù)學(xué)院,研究方向?yàn)橹悄芑浖こ獭⒋a表示與代碼生成。

他曾以第一作者在自然語(yǔ)言處理、軟件工程等領(lǐng)域的國(guó)際會(huì)議上發(fā)表多篇論文,曾獲得2023年ACM杰出論文獎(jiǎng)(ACM SIGSOFT Distinguished Paper Award in International Conference on Program Comprehension)。

論文地址:https://arxiv.org/abs/2410.05605

責(zé)任編輯:武曉燕 來(lái)源: 量子位
相關(guān)推薦

2024-09-03 14:10:00

模型測(cè)試

2024-08-06 08:43:17

2024-09-14 10:00:00

AI機(jī)器人計(jì)算

2024-09-12 13:50:00

模型訓(xùn)練

2024-12-23 13:28:22

2009-08-12 09:27:31

Google搜索

2024-06-05 09:59:13

2024-06-20 10:49:15

2024-12-11 08:12:24

2021-05-10 17:40:14

AI 數(shù)據(jù)人工智能

2021-11-09 09:52:57

神經(jīng)網(wǎng)絡(luò)AI算法

2024-02-07 12:13:03

AI模型

2024-12-09 09:20:00

MySQLNULL 值

2017-08-13 22:19:37

人工智能

2024-12-02 13:50:00

模型訓(xùn)練

2015-04-28 10:31:35

SQL格式化查詢(xún)

2020-02-02 19:00:28

區(qū)塊鏈供應(yīng)鏈區(qū)塊鏈技術(shù)

2025-04-01 04:25:00

RAG數(shù)據(jù)檢索

2024-10-30 16:34:56

2025-03-04 13:00:00

JavaScrip代碼語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)