國(guó)內(nèi)團(tuán)隊(duì)提出全新RLTF框架,刷新SOTA!大模型生成代碼質(zhì)量更高bug更少
「程序合成」或「代碼生成」任務(wù)的目標(biāo)是根據(jù)給定的描述生成可執(zhí)行代碼,最近有越來(lái)越多的研究采用強(qiáng)化學(xué)習(xí)(RL)來(lái)提高大語(yǔ)言模型(簡(jiǎn)稱大模型)(LLM)在代碼方面的性能。
不過(guò),這些RL方法僅使用離線框架,限制了它們對(duì)新樣本空間的探索。此外,當(dāng)前利用單元測(cè)試信號(hào)的方法相當(dāng)簡(jiǎn)單,沒有考慮到代碼中特定錯(cuò)誤位置。
而國(guó)內(nèi)團(tuán)隊(duì)最近發(fā)布的新型在線RL框架RLTF(即基于單元測(cè)試反饋的強(qiáng)化學(xué)習(xí)),可以將代碼的多粒度單元測(cè)試反饋結(jié)果用于優(yōu)化code LLM,在訓(xùn)練過(guò)程中實(shí)時(shí)生成數(shù)據(jù),并同時(shí)利用細(xì)粒度反饋信號(hào)引導(dǎo)模型生成更高質(zhì)量的代碼。
有趣的是,小編發(fā)現(xiàn)這篇論文的作者,和曾經(jīng)稱霸王者峽谷的騰訊絕悟AI的作者,有所重疊。
論文地址:https://arxiv.org/pdf/2307.04349.pdf
具體來(lái)說(shuō),在線框架RLTF通過(guò)細(xì)粒度的單元測(cè)試反饋來(lái)增強(qiáng)預(yù)訓(xùn)練的LLM在程序合成任務(wù)中的性能,允許模型在訓(xùn)練過(guò)程中實(shí)時(shí)生成新樣本,并利用單元測(cè)試結(jié)果作為反饋信號(hào),從而改善整體模型性能。
此方法使模型能夠?qū)W習(xí)代碼錯(cuò)誤的具體細(xì)節(jié),并相應(yīng)地提高性能。
大語(yǔ)言模型(LLM)在程序合成任務(wù)中表現(xiàn)出色,如Codex、AlphaCode、InCoder等,現(xiàn)有的LLMs在處理更具挑戰(zhàn)性的問(wèn)題(如程序競(jìng)賽)方面仍有進(jìn)展空間且預(yù)訓(xùn)練的代碼模型在生成代碼時(shí)可能存在語(yǔ)法和功能上的錯(cuò)誤。
基于此,研究人員提出了基于強(qiáng)化學(xué)習(xí)(RL)的算法來(lái)改進(jìn)代碼LLMs的性能,如CodeRL和PPOCoder,但現(xiàn)有的RL方法大多是離線的,而在線RL訓(xùn)練更穩(wěn)定,能更好地探索環(huán)境并得到更優(yōu)的策略;
且現(xiàn)有的RL方法對(duì)單元測(cè)試結(jié)果的反饋信號(hào)較為簡(jiǎn)單和粗粒度,無(wú)法捕捉到代碼中具體錯(cuò)誤的細(xì)節(jié)。
RLTF方法引入了多粒度的單元測(cè)試反饋(Fine-grained Feedback根據(jù)代碼的錯(cuò)誤類型和錯(cuò)誤具體位置,懲罰代碼中出現(xiàn)錯(cuò)誤的特定部分,Adaptive Feedback根據(jù)通過(guò)的測(cè)試用例比例分配不同的懲罰),并通過(guò)實(shí)時(shí)生成樣本和提供多樣化的訓(xùn)練樣本,提高了模型性能。
RLTF在程序合成任務(wù)中取得了APPS和MBPP基準(zhǔn)測(cè)試的最新成果,并通過(guò)消融研究證明了方法的有效性。
方法
論文中提出的任務(wù)可以形式化為一個(gè)條件概率優(yōu)化問(wèn)題,即在給定自然語(yǔ)音描述D和模型可優(yōu)化參數(shù)θ的情況下,最大化正確程序W的概率:
在線RL訓(xùn)練框架
為了更好地探索樣本空間,研究人員使用在線學(xué)習(xí)的方式進(jìn)行RL訓(xùn)練。
兩個(gè)LLM共享權(quán)重,一個(gè)負(fù)責(zé)梯度回傳更新模型,另一個(gè)負(fù)責(zé)在線生成訓(xùn)練樣本。
訓(xùn)練樣本經(jīng)過(guò)編譯器,分配好標(biāo)簽,進(jìn)而更新online buffer中的數(shù)據(jù)。
Online buffer負(fù)責(zé)存儲(chǔ)在線訓(xùn)練所用的數(shù)據(jù),它在內(nèi)部維護(hù)一個(gè)隊(duì)列,會(huì)刪除過(guò)舊的數(shù)據(jù),buffer的更新頻率是50個(gè)step。
多粒度反饋的強(qiáng)化學(xué)習(xí)
RL訓(xùn)練的loss可以定義為:
其中,R代表獎(jiǎng)勵(lì)系數(shù),S和E代表代碼的起點(diǎn)和終點(diǎn)。
研究人員將編譯器的反饋分為3類,eg. Error, Failure, Pass,然后根據(jù)不同的編譯器反饋,制定了不同粒度的模型獎(jiǎng)勵(lì)。
粗粒度反饋:該反饋的級(jí)別建立在上述3類反饋上,和CodeRL,PPoCoder設(shè)置相同;
細(xì)粒度反饋:粗粒度的反饋只告訴模型「錯(cuò)了」,卻沒有將具體「哪里錯(cuò)了」告知模型。
而細(xì)粒度反饋的目的就是為了解決這一問(wèn)題,使得模型能更加明確錯(cuò)誤產(chǎn)生的原因和位置。為此,研究人員將Error中不同的錯(cuò)誤子類型分為U_global,U_line,U_ignore,具體分類見下表;
根據(jù)不同的錯(cuò)誤子類型,我們有不同的R值和起點(diǎn)終點(diǎn):
自適應(yīng)反饋:針對(duì)未能通過(guò)全部測(cè)試樣例的數(shù)據(jù),我們根據(jù)其通過(guò)的比率設(shè)定了自適應(yīng)的反饋,這一設(shè)置是為了模型能夠生成通過(guò)盡可能多的測(cè)試樣例的程序。
如下兩個(gè)消融實(shí)驗(yàn)也驗(yàn)證了「在線訓(xùn)練框架 」和「多粒度反饋」的有效性:
實(shí)驗(yàn)
研究人員使用了兩個(gè)最先進(jìn)的基于強(qiáng)化學(xué)習(xí)和code LLMs的方法作為基準(zhǔn),并在相同的基準(zhǔn)和設(shè)置下進(jìn)行評(píng)估。作者使用了兩個(gè)不同的編程問(wèn)題數(shù)據(jù)集進(jìn)行評(píng)估,分別是APPS和MBPP。
在APPS數(shù)據(jù)集上,作者使用了RLTF框架對(duì)預(yù)訓(xùn)練的CodeT5模型進(jìn)行微調(diào),并取得了優(yōu)于其他方法的結(jié)果。在MBPP數(shù)據(jù)集上,作者展示了RLTF方法在零樣本設(shè)置下的性能,取得了新的最優(yōu)結(jié)果。
APPS:使用CodeT5 770M作為基礎(chǔ)模型,在APPS數(shù)據(jù)集上進(jìn)行評(píng)估。與其他基于CodeT5的方法(CodeRL、PPOCoder),和其他更大的模型(Codex、AlphaCode、GPT2、GPT3、GPT-Neo等進(jìn)行了比較)。
結(jié)果表明,RLTF方法在APPS數(shù)據(jù)集上取得了優(yōu)于其他方法的結(jié)果。
MBPP:論文在MBPP數(shù)據(jù)集上評(píng)估了CodeT5模型在APPS數(shù)據(jù)集上使用RLTF方法訓(xùn)練的零樣本性能,RLTF方法在MBPP數(shù)據(jù)集上取得了優(yōu)于不同大小的GPT模型的結(jié)果,并達(dá)到了新的最優(yōu)性能。
不同的基座模型:為了展示RLTF方法的魯棒性,除了使用CodeT5外,論文還使用另一個(gè)基礎(chǔ)模型CodeGen 2.7B進(jìn)行實(shí)驗(yàn)。
結(jié)果表明,在CodeGen 2.7B上應(yīng)用RLTF方法也取得了令人印象深刻的性能,使得pass@10的提高接近1%。
值得注意的是,研究人員發(fā)現(xiàn),基礎(chǔ)模型越大,RLTF提供的性能提升越大,表明RLTF方法可以有效地發(fā)揮不同基礎(chǔ)模型生成更好代碼的潛力,當(dāng)基礎(chǔ)模型大小更大時(shí),影響更為明顯。
結(jié)論及未來(lái)工作
本文提出了RLTF(Reinforcement Learning from unit Test Feedback),一個(gè)具有多粒度單元測(cè)試反饋的新型在線RL框架,用于優(yōu)化程序合成任務(wù)中的大語(yǔ)言模型。
與現(xiàn)有工作相比,該方法在訓(xùn)練過(guò)程中實(shí)時(shí)生成數(shù)據(jù),并同時(shí)利用更細(xì)粒度的反饋信號(hào)引導(dǎo)模型生成更高質(zhì)量的代碼。
大量實(shí)驗(yàn)表明,RLTF超越了現(xiàn)有基于RL的方法,并可以應(yīng)用于各種code LLM,包括CodeT5和CodeGen。此外,它在廣泛使用的benchmark(如APPS和MBPP)上實(shí)現(xiàn)了最先進(jìn)的性能。
在未來(lái),有幾個(gè)方向可以進(jìn)一步改進(jìn)RLTF:
例如,現(xiàn)有基準(zhǔn)測(cè)試中的輸入輸出示例可能不夠多樣化,使用隱藏的輸入輸出示例生成的程序可能不是正確的最終代碼版本,這種限制可能會(huì)影響RLTF的性能,因此,使用LLM創(chuàng)建更多樣化和準(zhǔn)確的輸入輸出示例集是一個(gè)值得探討的潛在研究方向。
此外,是否更細(xì)粒度的反饋信號(hào)(如來(lái)自靜態(tài)代碼分析器的信號(hào))可以進(jìn)一步提高RLTF的性能,也是另一個(gè)可能的研究方向。