0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

多任務(wù)微調(diào)框架MFTCoder詳細(xì)技術(shù)解讀

深度學(xué)習(xí)自然語言處理 ? 來源:深度學(xué)習(xí)自然語言處理 ? 2023-11-17 17:17 ? 次閱讀

代碼大模型(Code LLMs)已經(jīng)成為一個(gè)專門的研究領(lǐng)域,通過使用代碼相關(guān)數(shù)據(jù)對預(yù)訓(xùn)練模型進(jìn)行微調(diào)來提升模型的編碼能力。以往的微調(diào)方法通常針對特定的下游任務(wù)或場景進(jìn)行定制,意味著每個(gè)任務(wù)需要單獨(dú)進(jìn)行微調(diào),需要大量的訓(xùn)練資源,并且由于多個(gè)模型并存而難于維護(hù)和部署。此外,這些方法未能利用不同代碼任務(wù)之間的內(nèi)在聯(lián)系。 為了克服這些限制,我們提出了一種多任務(wù)微調(diào)框架——MFTCoder,它可以實(shí)現(xiàn)在多個(gè)任務(wù)上同時(shí)并行地進(jìn)行微調(diào)。通過結(jié)合多種損失函數(shù),我們有效地解決了多任務(wù)學(xué)習(xí)中常見的任務(wù)間數(shù)據(jù)量不平衡、難易不一和收斂速度不一致等挑戰(zhàn)。

大量實(shí)驗(yàn)結(jié)果顯示,相較于單獨(dú)對單個(gè)任務(wù)進(jìn)行微調(diào)或者多任務(wù)混合為一后進(jìn)行微調(diào),我們的多任務(wù)微調(diào)方法表現(xiàn)更優(yōu)。此外,MFTCoder具備高效訓(xùn)練特征,包括提供高效的數(shù)據(jù)Tokenization模式和支持PEFT微調(diào),能有效提升微調(diào)訓(xùn)練速度并降低對資源的需求。 MFTCoder已適配支持了多個(gè)主流開源LLMs,如LLama-1/2、CodeLLama、Qwen、CodeGeeX2、StarCoder、Baichuan2、ChatGLM2/3、GPT-Neox等。

以CodeLLama為底座,使用MFTCoder微調(diào)得到的CODEFUSE-CODELLAMA-34B在HumaneEval測試中pass@1得分高達(dá)74.4%,超過了GPT-4的表現(xiàn)(67%,zero-shot, 2023年3月)。

對應(yīng)的代碼也已經(jīng)開源到github: https://github.com/codefuse-ai/MFTCoder? 本文旨在對MFTCoder論文做一個(gè)詳細(xì)技術(shù)解讀。

1bd14d56-8527-11ee-939d-92fbcf53809c.png


?

引言

ChatGPT和GPT-4的橫空出世使得大模型(LLMs)研發(fā)井噴式爆發(fā),這也同時(shí)進(jìn)一步引燃了將大模型應(yīng)用于代碼生成與理解的研發(fā)熱潮,這一分支被稱為代碼大模型(即Code LLMs)方向。通過在大量的代碼數(shù)據(jù)(例如GitHub公開數(shù)據(jù))和自然文本數(shù)據(jù)上進(jìn)行預(yù)訓(xùn)練,代碼大模型可以有效完成各種代碼相關(guān)的任務(wù),例如代碼自動(dòng)補(bǔ)全、基于描述生成代碼、為代碼添加注釋、解釋代碼功能、生成單測用例、修復(fù)代碼、翻譯代碼等。 盡管(代碼)LLMs的預(yù)訓(xùn)練階段旨在確保其對不同的下游任務(wù)具有泛化能力,但隨后的微調(diào)階段通常只針對特定任務(wù)或場景而進(jìn)行。這種方法忽視了兩個(gè)關(guān)鍵挑戰(zhàn)。

首先,它涉及針對每個(gè)任務(wù)進(jìn)行資源密集型的單獨(dú)微調(diào),這阻礙了在生產(chǎn)環(huán)境中的高效部署;其次,代碼領(lǐng)域任務(wù)的相互關(guān)聯(lián)性表明,與單獨(dú)微調(diào)相比,聯(lián)合微調(diào)可以提高性能。因此,進(jìn)行多任務(wù)微調(diào)是至關(guān)重要的,可以同時(shí)處理所有任務(wù),并利用相關(guān)任務(wù)的優(yōu)勢來增強(qiáng)其他任務(wù)的表現(xiàn)。 為了更好地闡明,假設(shè)我們有兩個(gè)相關(guān)的任務(wù):代碼補(bǔ)全和代碼摘要。代碼補(bǔ)全是基于部分代碼片段預(yù)測下一行代碼,而代碼摘要旨在生成給定代碼片段的簡潔易讀的摘要。傳統(tǒng)上,每個(gè)任務(wù)會分別進(jìn)行微調(diào),導(dǎo)致資源密集型的重復(fù)。然而,代碼補(bǔ)全和代碼摘要之間存在內(nèi)在聯(lián)系。

代碼片段的補(bǔ)全依賴于對整體功能和目的的理解,而生成準(zhǔn)確的摘要?jiǎng)t需要理解結(jié)構(gòu)、依賴關(guān)系和預(yù)期功能。通過采用多任務(wù)學(xué)習(xí),可以訓(xùn)練一個(gè)單一模型來共同學(xué)習(xí)這兩個(gè)任務(wù),利用共享的知識和模式,從而提高兩個(gè)任務(wù)的性能。模型理解代碼元素之間的上下文依賴關(guān)系,有助于預(yù)測下一個(gè)代碼片段并生成信息豐富的摘要。此外,多任務(wù)學(xué)習(xí)在個(gè)別任務(wù)性能之外還提供了額外的好處:任務(wù)之間的共享表示有助于減輕過擬合問題,促進(jìn)更好的泛化,并增強(qiáng)模型處理特定任務(wù)的數(shù)據(jù)稀缺性的能力。如果代碼補(bǔ)全具有比代碼摘要更大的訓(xùn)練數(shù)據(jù)集,模型可以利用豐富的補(bǔ)全數(shù)據(jù)來提高摘要的性能,從而有效地解決數(shù)據(jù)稀缺性挑戰(zhàn)。多任務(wù)學(xué)習(xí)甚至使模型能夠處理未見過但相關(guān)的任務(wù),即使沒有特定的訓(xùn)練數(shù)據(jù)。

總體而言,多任務(wù)學(xué)習(xí)允許模型共同學(xué)習(xí)多個(gè)相關(guān)的任務(wù),從共享的知識中受益,提高性能,增強(qiáng)泛化能力,并應(yīng)對數(shù)據(jù)稀缺性。 盡管多任務(wù)學(xué)習(xí)很重要,但在自然語言處理領(lǐng)域,只有少數(shù)幾項(xiàng)現(xiàn)有研究探索了這種方法(Raffel等,2023年;Aghajanyan等,2021年;Aribandi等,2022年)。這些研究將多任務(wù)數(shù)據(jù)合并用于大模型學(xué)習(xí),而沒有明確區(qū)分任務(wù)。更不幸的是,這些研究往往優(yōu)先考慮樣本量較大的任務(wù),忽視了樣本量較小的任務(wù)。此外,它們未能確保任務(wù)間的收斂速度相等,導(dǎo)致一些任務(wù)過度優(yōu)化,而其他任務(wù)則欠優(yōu)化。 本文聚焦于大模型多任務(wù)微調(diào)(MFT, Multitask Fine-Tuning),意在使樣本數(shù)量存有差異的任務(wù)獲得相等的關(guān)注并取得相近的優(yōu)化。

雖然我們的方法不限于代碼大模型領(lǐng)域,但本文我們重點(diǎn)關(guān)注代碼大模型,這是考慮到代碼領(lǐng)域的下游任務(wù)往往更具相關(guān)性,這也是MFTCoder命名的來源。我們強(qiáng)調(diào),MFTCoder可以簡單地?cái)U(kuò)展到任意一組相關(guān)的NLP任務(wù)。為了提高M(jìn)FTCoder的效率,我們采用了包括LoRA(Hu等,2021年)和QLoRA(Dettmers等,2023年)在內(nèi)的參數(shù)高效的微調(diào)技術(shù)。實(shí)驗(yàn)結(jié)果表明,使用MFT方法訓(xùn)練的多任務(wù)模型在性能上優(yōu)于單獨(dú)為每個(gè)任務(wù)進(jìn)行微調(diào)或合并多個(gè)任務(wù)的數(shù)據(jù)進(jìn)行微調(diào)而得到的模型。我們進(jìn)一步適配并驗(yàn)證了MFTCoder對各種當(dāng)前流行的預(yù)訓(xùn)練LLMs的有效性,例如Qwen、Baichuan2、Llama、Llama 2、StarCoder、CodeLLama、CodeGeex2等。值得一提的是,當(dāng)以CodeLlama-34B-Python為基座模型,MFTCoder微調(diào)得到的CodeFuse-CodeLLama-34B模型在HmanEval評測集上取得了74.4%的pass@1得分,超過了GPT-4(67%,zero-shot, 2023年3月)的表現(xiàn)。 文章主要貢獻(xiàn)總結(jié)如下:

提出了MFTCoder,將多任務(wù)學(xué)習(xí)應(yīng)用于代碼大模型微調(diào),重點(diǎn)解決了先前多任務(wù)微調(diào)方法中常見的數(shù)據(jù)不平衡和收斂速度不一致問題。

大量實(shí)驗(yàn)表明,MFT方法在性能上優(yōu)于單獨(dú)微調(diào)和多任務(wù)混合合并微調(diào)方法?;贑odeLlama-34B-Python底座,MFTCoder微調(diào)得到的模型CodeFuse-CodeLLama-34B在HumanEval評測集上取得了74.4%的pass@1得分,超過了GPT-4(67%,零樣本),并開源了該模型和一個(gè)高質(zhì)量指令數(shù)據(jù)集。

我們在多個(gè)流行LLMs上適配并驗(yàn)證了MFTCoder的表現(xiàn),包括Qwen、Baichuan2、Llama、Llama 2、StarCoder、CodeLLama、CodeFuse和CodeGeex2等,證明了其與不同底座模型的兼容性和可擴(kuò)展性。

方法

1c78afb0-8527-11ee-939d-92fbcf53809c.png

圖1:MFT架構(gòu)圖 01

框架

MFTCoder的總體框架如圖 1所示,包括多任務(wù)支持、多模型適配、高質(zhì)量數(shù)據(jù)集構(gòu)建、高效數(shù)據(jù)使用方式、高效訓(xùn)練方式及多任務(wù)均衡設(shè)計(jì)。

多任務(wù))MFTCoder旨在無縫地適配LLMs到不同的場景,并在特定的場景中最大化它們的性能。在將MFTCoder應(yīng)用于新場景時(shí),首要步驟便是將場景分解為對應(yīng)于目標(biāo)能力的較小任務(wù)。例如,在代碼LLMs領(lǐng)域,增強(qiáng)模型的代碼能力的總體目標(biāo)可以進(jìn)一步拆解為更細(xì)粒度的任務(wù),如代碼補(bǔ)全,文本到代碼生成,單元測試用例生成,代碼修復(fù),代碼調(diào)試,甚至跨語言翻譯。我們廣泛的實(shí)踐經(jīng)驗(yàn)表明,MFTCoder可以有效處理從單個(gè)任務(wù)到數(shù)十甚至數(shù)百個(gè)任務(wù)的多任務(wù)規(guī)模。

數(shù)據(jù)集構(gòu)建與高效訓(xùn)練)拆分完后,下一步便是為每個(gè)任務(wù)收集和整理微調(diào)數(shù)據(jù)集,然而,某些任務(wù)的數(shù)據(jù)收集可能會存在挑戰(zhàn)。為了克服這一問題,MFTCoder利用了Self-Instruct(Wang等,2022年)和Agents技術(shù)來生成指令數(shù)據(jù)集。多任務(wù)微調(diào)往往意味著一次微調(diào)會使用較大量的訓(xùn)練數(shù)據(jù),為了確保高效的訓(xùn)練過程,MFTCoder采用了兩種高效的數(shù)據(jù)Tokenization模式,并支持PEFT(Parameter-Efficient Fine-Tuning)技術(shù)來提高訓(xùn)練效率。

任務(wù)均衡設(shè)計(jì))針對多任務(wù)學(xué)習(xí)領(lǐng)域普遍存在的任務(wù)間數(shù)據(jù)量不均衡、難易不一及收斂速度不一致的挑戰(zhàn),MFTCoder引入或調(diào)整不同的損失函數(shù)以實(shí)現(xiàn)任務(wù)平衡。

多模型適配)鑒于不同的大型模型具有不同的優(yōu)勢和能力,為支持按需選擇適合的模型底座進(jìn)行微調(diào)以實(shí)現(xiàn)最佳性能,MFTCoder已適配了若干主流的開源LLMs,包括LLama,LLama 2,CodeLLama,Qwen,Baichuan 1/2,ChatGLM 2,CodeGeeX 2,GPT-NEOX,CodeFuse-13B,StarCoder,AntLLM等。同時(shí)也在持續(xù)更新和適配新的模型。

02

指令數(shù)據(jù)集構(gòu)建

對于數(shù)據(jù)收集具有挑戰(zhàn)性的任務(wù),我們采用Self-Instruct技術(shù)為MFTCoder中的下游代碼相關(guān)任務(wù)生成微調(diào)數(shù)據(jù)。這涉及向GPT-3.5或GPT-4提供定制的提示,明確描述我們的指令生成需求,從而生成指令數(shù)據(jù)。此外,我們從PHI-1/1.5工作(Gunasekar等,2023年)中受到啟發(fā),進(jìn)一步將Self-Instruct技術(shù)應(yīng)用于為下游代碼相關(guān)任務(wù)生成高質(zhì)量的代碼練習(xí)數(shù)據(jù)集。 在具體實(shí)現(xiàn)方面,我們有兩個(gè)選擇。

一種是借助Agents(例如Camel(Li等,2023c年))的自主多輪對話方法,另一種是通過直接調(diào)用ChatGPT API實(shí)現(xiàn)的單輪對話方法。在多輪對話方法中,我們使用Camel啟動(dòng)兩個(gè)Agents,每個(gè)Agent被賦予特定的角色和任務(wù)目標(biāo),驅(qū)動(dòng)它們之間相互對話以生成與給定主題相符的指令數(shù)據(jù)。例如,在生成Python練習(xí)數(shù)據(jù)時(shí),我們將兩個(gè)Agents分別指定為“教師”(模擬ChatGPT的用戶角色)和“學(xué)生”(模擬ChatGPT的助理角色)角色,其中,教師的責(zé)任是向?qū)W生提供生成練習(xí)題的指令,而學(xué)生的任務(wù)則是提供相應(yīng)指令的解決方案。

這個(gè)迭代過程會持續(xù)進(jìn)行而生成多個(gè)練習(xí)問題,直到滿足任務(wù)要求或達(dá)到ChatGPT的最大輸入長度。值得一提的是,為了適應(yīng)ChatGPT的輸入長度限制,我們不能直接使用較寬泛的題目作為任務(wù)主題。例如,當(dāng)創(chuàng)建用于評估學(xué)生Python語言掌握程度的練習(xí)題時(shí),我們需要將主題分解為較小而具體的Python知識點(diǎn)(例如二叉搜索樹),并為每個(gè)知識點(diǎn)單獨(dú)啟動(dòng)Camel會話。

具體的示例如下圖2(摘自論文附錄Ahttps://arxiv.org/pdf/2311.02303.pdf)。

1cd1f052-8527-11ee-939d-92fbcf53809c.png

圖2: 通過Camel Agents生成代碼練習(xí)題系統(tǒng)及用戶提示設(shè)置示例

多輪對話方案提供了較高的自動(dòng)化能力,但由于需要維護(hù)兩個(gè)Agents,并且每個(gè)代理都需要對ChatGPT API進(jìn)行多輪會話調(diào)用,因此成本較高。為了緩解這一問題,我們提出了一種更經(jīng)濟(jì)高效的單輪對話生成方法,其整體過程如圖3所示。我們首先創(chuàng)建一個(gè)初始種子集,種子集由數(shù)百個(gè)Python基礎(chǔ)知識點(diǎn)組成。然后將這些種子與準(zhǔn)備好的固定Prompt模板組合,生成一組模式化的任務(wù)Prompt。

為了解決固定模板導(dǎo)致的多樣性減少問題,并確保準(zhǔn)確的提示描述,我們利用Camel的任務(wù)Prompt細(xì)化功能來獲取精確且多樣的任務(wù)Prompt。每個(gè)任務(wù)Prompt用于生成與相應(yīng)種子相關(guān)的一組指令(例如與二叉搜索樹相關(guān)的練習(xí)問題)。使用ChatGPT,我們生成相應(yīng)的指令解決方案。最后,我們將指令及其相應(yīng)的解決方案組裝和去重,以獲得一個(gè)練習(xí)數(shù)據(jù)集。我們已經(jīng)開源了使用這種方法構(gòu)建的Python Code Exercises數(shù)據(jù)集: https://huggingface

.co/datasets/codefuse-ai/CodeExercise-Python-27k??

1cffc3c4-8527-11ee-939d-92fbcf53809c.png

圖3: Code Exercises指令數(shù)據(jù)集單輪生成方案流程 03

高效Tokenization模式

1d3d1ca6-8527-11ee-939d-92fbcf53809c.png

圖4: 三種Tokenization模式在一個(gè)Batch中的數(shù)據(jù)存在形式對比示意圖

在LLMs的預(yù)訓(xùn)練和微調(diào)過程中,分詞(Tokenization)是一個(gè)關(guān)鍵步驟,在這個(gè)步驟中輸入和輸出文本被分割成較小的單元以供后續(xù)使用。Tokenization與訓(xùn)練過程使用的損失函數(shù)一起定義了訓(xùn)練過程中數(shù)據(jù)的使用方式,因此在模型的有效性和訓(xùn)練效率上起著關(guān)鍵作用。在典型的SFT (Supervised Fine-Tuning) Tokenization方案中,同一batch中的樣本被統(tǒng)一對齊到模型的最大輸入長度(seq-length),對于長度不足的則使用額外的填充Tokens進(jìn)行填充,如圖 4(a)所示。然而,在實(shí)踐中,我們發(fā)現(xiàn)這種方法會導(dǎo)致產(chǎn)生大量的填充Tokens。例如,當(dāng)使用CodeFuse-13B(Di等,2023年)的Tokenizer處理35個(gè)下游任務(wù)數(shù)據(jù)時(shí),填充Tokens的平均比例為92.22%(seq-length為4096)。

這意味著有大量的Tokens僅用于對齊,而對訓(xùn)練過程沒有任何價(jià)值,這導(dǎo)致訓(xùn)練效率降低,且浪費(fèi)用于存儲離線Tokenization結(jié)果的存儲空間。為了解決這個(gè)問題,我們采用了兩種Tokenization模式,即動(dòng)態(tài)填充(Dynamic Padding)模式和打包(Pack)模式,并對其進(jìn)行了優(yōu)化。 在動(dòng)態(tài)填充模式中,每個(gè)GPU的micro batch窗口大小由其中的最大樣本長度確定。較短的樣本會使用額外的填充Tokens進(jìn)行填充,以對齊到該大小,如圖 4(b)所示。

盡管填充Tokens不會影響模型的訓(xùn)練效果,但它們會增加訓(xùn)練過程中的計(jì)算開銷,從而影響訓(xùn)練速度,而動(dòng)態(tài)填充模式有效地減少了填充Tokens的使用比例,從而加快了訓(xùn)練速度。根據(jù)我們的經(jīng)驗(yàn),與傳統(tǒng)的SFT Tokenization模式相比,這種方法可以實(shí)現(xiàn)大約兩倍的速度提升(實(shí)際的增幅取決于數(shù)據(jù)集)。需要注意的是,該模式僅適用于在線Tokenization場景。 與動(dòng)態(tài)填充模式通過減少了micro batch窗口大小來提高效率的角度不同,打包模式是從最大化模型允許的最大輸入窗口長度(seq-length)的利用率角度出發(fā),這種模式與Llama 2的SFT Tokenization模式(Touvron等,2023b年)相似。

在打包模式中,多個(gè)微調(diào)樣本按順序打包到一個(gè)長度為seq-length的窗口中,兩個(gè)相鄰樣本通過一個(gè)EOS Token分隔,如圖 4(c)所示。在圖中,圖 4(a)的樣本1-4被組合并依次放置在一個(gè)窗口中。如果一個(gè)樣本無法完全放入當(dāng)前窗口,它將被放置在下一個(gè)窗口,并用填充Tokens填充剩余的空間,例如,圖 4(c)中,樣本5被放置在第二個(gè)窗口中,并使用填充Tokens填充尾部空間,而樣本6則放置在第三個(gè)窗口中。與動(dòng)態(tài)填充模式相比,打包模式進(jìn)一步降低了的填充Tokens比例,從而可進(jìn)一步提高訓(xùn)練速度。我們的實(shí)踐經(jīng)驗(yàn)表明,在前面提到的35個(gè)任務(wù)中,該方法將填充Tokens的平均比例降低到不到10%,從而在保持訓(xùn)練效果的同時(shí)大幅提升了訓(xùn)練速度。需要強(qiáng)調(diào)的是,MFTCoder支持在線和離線的打包Tokenization場景,不僅服務(wù)于SFT階段,還適用于預(yù)訓(xùn)練階段。 04

PEFT高效微調(diào)

目前流行的開源LLMs通常包含數(shù)十億乃至上百億個(gè)參數(shù),而多任務(wù)學(xué)習(xí)場景又通常涉及大量的任務(wù),這意味著會有大量的微調(diào)樣本參與訓(xùn)練。如果我們選擇使用大量數(shù)據(jù)對這些大模型進(jìn)行全量微調(diào),將會面臨兩個(gè)挑戰(zhàn):首先,需要大量的存儲和計(jì)算資源;其次,在訓(xùn)練過程中可能面臨災(zāi)難性遺忘的風(fēng)險(xiǎn)。為了解決這些問題,MFTCoder采用了PEFT(Parameter-efficient fine-tuning)技術(shù)(Houlsby等,2019年),使得能夠在短時(shí)間內(nèi)以最小的資源需求實(shí)現(xiàn)高效的微調(diào)。

1d741724-8527-11ee-939d-92fbcf53809c.png

圖5: Lora核心思想示意

具體來說,MFTCoder支持兩種PEFT方法:Lora(Large-scale Language Model Low-Rank Adaptation)(Hu等,2021年)和QLora(Quantized Large-scale Language Model Low-Rank Adaptation)(Dettmers等,2023年)。 Lora的基本概念非常簡單,如圖 5所示。它會給原始模型添加一個(gè)旁路分支,在訓(xùn)練過程中,原始訓(xùn)練模型的參數(shù)W ∈ R(形狀為d x d)保持不變,只有旁路分支中的降維矩陣A ∈ R(形狀為d × r)和升維矩陣B ∈ R(形狀為r x d)的參數(shù)是可訓(xùn)練的。

訓(xùn)練完成后,矩陣乘積BA將被加到原始模型參數(shù)W中,從而得到新訓(xùn)練的模型。由于r相對于d的規(guī)模顯著縮小,可訓(xùn)練參數(shù)的數(shù)量因而大大減少。在Lora的基礎(chǔ)上,QLora采用了一種稱為NF4的新的高精度量化技術(shù),并引入了雙重量化來將預(yù)訓(xùn)練模型量化為4位(bits)。此外,它還引入了一組可學(xué)習(xí)的低秩適配器權(quán)重,通過優(yōu)化量化權(quán)重的梯度,對這些權(quán)重進(jìn)行微調(diào)。結(jié)果,QLoRA可以使用更少的GPU資源對較大的模型進(jìn)行微調(diào)。例如,MFTCoder可以在單張Nvidia A100卡(80GB顯存)上對70B模型進(jìn)行微調(diào)。

05

多任務(wù)均衡損失函數(shù)

作為一個(gè)多任務(wù)學(xué)習(xí)框架,MFTCoder面臨著任務(wù)間數(shù)據(jù)量不平衡、難易不一和收斂速度不同的重大挑戰(zhàn)。為了解決這些挑戰(zhàn),MFTCoder采用了一組專門設(shè)計(jì)的損失函數(shù),以緩解這些不平衡問題。 首先,為了解決數(shù)據(jù)量不平衡的問題,MFTCoder會確保在單個(gè)epoch內(nèi)所有任務(wù)的每一個(gè)樣本都被使用且只使用一次。為了避免模型偏向具有較多數(shù)據(jù)的任務(wù),我們在損失計(jì)算過程中引入了權(quán)重分配策略。

具體而言,我們支持兩種權(quán)重計(jì)算方案:一種基于任務(wù)樣本數(shù)量,另一種基于納入loss計(jì)算的的有效Tokens數(shù)量。前者更直接,但在處理樣本數(shù)量與有效Tokens數(shù)量具有極端差異的任務(wù)(例如"是"或"否"回答的二元分類任務(wù)或單項(xiàng)選擇考試任務(wù))時(shí)可能表現(xiàn)不佳。而另一方面,基于納入loss計(jì)算的有效Tokens數(shù)量的權(quán)重分配方案可以緩解這個(gè)問題。帶權(quán)重的損失函數(shù)具體如公式 (1)所示。在公式1中,N代表任務(wù)的總數(shù),M_i表示第i個(gè)任務(wù)的樣本數(shù)量,T_ij表示第i個(gè)任務(wù)的第j個(gè)樣本中的有效Token(即參與loss計(jì)算的Token)的數(shù)量,t_ijk表示第i個(gè)任務(wù)的第j個(gè)樣本的第k個(gè)有效Token。

1da0e8bc-8527-11ee-939d-92fbcf53809c.png

為了解決任務(wù)難易不一的問題,我們借鑒了Focal Loss的思想,并將其納入到MFTCoder中。我們實(shí)現(xiàn)了兩個(gè)不同層次的Focal Loss函數(shù),以適應(yīng)不同的細(xì)粒度。一個(gè)在樣本級別操作,如公式 (2)所示,另一個(gè)在任務(wù)級別操作,如公式 (3)所示。

1db7eba2-8527-11ee-939d-92fbcf53809c.png

為了解決收斂速度不一致的問題,我們借鑒了FAMO(Fast Adaptation via Meta-Optimization)方法(Liu等,2023年)的思想,并創(chuàng)新地將其應(yīng)用于計(jì)算validation loss。首先,我們假設(shè)每個(gè)任務(wù)(以索引i表示)都有自己的原始損失函數(shù)Li(θ)。在第t次迭代中,我們根據(jù)對應(yīng)任務(wù)的validation loss的梯度來更新每個(gè)任務(wù)的權(quán)重,目標(biāo)是最大化收斂速度最慢的任務(wù)的權(quán)重w_i,如公式 (4)所示。其中,g_t表示所有任務(wù)加權(quán)驗(yàn)證損失的梯度,ci(α, g_t)表示第i個(gè)任務(wù)驗(yàn)證損失的斜率(梯度),θ_t表示第t次迭代中網(wǎng)絡(luò)的參數(shù),α是學(xué)習(xí)率,ε是一個(gè)小常數(shù),用于防止除以零。此外,我們希望對如何實(shí)現(xiàn)收斂平衡進(jìn)行進(jìn)一步解釋。為了確保任務(wù)以相似的速度收斂,我們引入了一種動(dòng)態(tài)平衡機(jī)制。

在每次迭代中,我們根據(jù)任務(wù)的驗(yàn)證損失梯度更新任務(wù)特定的權(quán)重。該方法旨在給予收斂速度較慢的任務(wù)更多的關(guān)注,使其對整體優(yōu)化過程產(chǎn)生更大的影響。通過動(dòng)態(tài)調(diào)整任務(wù)權(quán)重,我們創(chuàng)造了一個(gè)平衡收斂的情景,所有任務(wù)以類似的速度向其最優(yōu)解進(jìn)展。這種機(jī)制有效地解決了不同收斂速度的問題,增強(qiáng)了MFTCoder框架的整體穩(wěn)定性和性能。

1dd12108-8527-11ee-939d-92fbcf53809c.png

通過結(jié)合這些不同的損失函數(shù),MFTCoder可有效地解決各種多任務(wù)場景的不同需求,并緩解現(xiàn)有大規(guī)模多任務(wù)學(xué)習(xí)研究中常遇到的任務(wù)數(shù)據(jù)不平衡、難易不一和收斂速度不一致等挑戰(zhàn)。MFTCoder作為一個(gè)靈活框架為這些問題提供了有效的解決方案,為開發(fā)更高效、更準(zhǔn)確的多任務(wù)模型提供了支持。

實(shí)驗(yàn)

在本節(jié)中,我們將使用MFTCoder進(jìn)行多組實(shí)驗(yàn)用于驗(yàn)證MFT方法的有效性和優(yōu)越性。具體而言,我們的目標(biāo)是回答以下三個(gè)研究問題:

RQ1:通過使用MFT方法對多個(gè)任務(wù)進(jìn)行微調(diào)得到的MFT模型是否優(yōu)于單獨(dú)對每個(gè)任務(wù)進(jìn)行微調(diào)而得到的SFT-S(單一任務(wù))模型?

RQ2:MFT模型是否優(yōu)于將多個(gè)任務(wù)組合并作為一個(gè)任務(wù)進(jìn)行微調(diào)而得到的SFT-Mixed(混合任務(wù))模型?

RQ3:在對未見任務(wù)的泛化能力上,MFT模型是否優(yōu)于SFT-Mixed模型?

接下來,我們將首先介紹實(shí)驗(yàn)設(shè)置。然后,我們將展示和深入探討實(shí)驗(yàn)結(jié)果。最后,我們將總結(jié)并回答本節(jié)中提出的研究問題。 01

實(shí)驗(yàn)設(shè)置

為了回答這三個(gè)研究問題,我們選擇了5個(gè)與代碼相關(guān)的下游任務(wù),并準(zhǔn)備了相應(yīng)的微調(diào)數(shù)據(jù),如表 1所示。表1展示了每個(gè)任務(wù)的目標(biāo)能力(第III列)和樣本數(shù)量(第IV列)。例如,CODECOMPLETION-TASK旨在提高模型的代碼補(bǔ)全能力,包括192,547個(gè)微調(diào)樣本。CODETRANS-TASK旨在增強(qiáng)模型的代碼翻譯能力,包含307,585個(gè)微調(diào)樣本。因此,我們共訓(xùn)練了7個(gè)模型(第I列),包括為每個(gè)下游任務(wù)單獨(dú)訓(xùn)練的SFT-S-*模型、5個(gè)任務(wù)數(shù)據(jù)混合為一的SFT-MIXED模型,以及使用MFT方法訓(xùn)練的MFT-5TASKS模型。

1e46ead2-8527-11ee-939d-92fbcf53809c.png

在實(shí)驗(yàn)中,除訓(xùn)練數(shù)據(jù)外,所有模型的配置都相同。所有模型的底座模型都是CodeLlama-13B-Python(Rozière等,2023年)。每個(gè)模型使用16張A100 GPU(80GB顯存),micro batch大小為8,全局batch大小為128進(jìn)行訓(xùn)練。使用Adam優(yōu)化器(Kingma和Ba,2017年),初始學(xué)習(xí)率為2e-4,最小學(xué)習(xí)率為1e-5。我們使用MFTCoder的QLora-INT4模式進(jìn)行微調(diào),微調(diào)參數(shù)比例均為2.52%,且可訓(xùn)練參數(shù)的位置和初始值也是相同的。

所有模型都采用數(shù)據(jù)均衡損失函數(shù)(即公式 (1))并使用打包Tokenization模式。值得注意的是,當(dāng)只有一個(gè)任務(wù)時(shí),這個(gè)損失函數(shù)與標(biāo)準(zhǔn)GPT模型預(yù)訓(xùn)練中使用的傳統(tǒng)損失函數(shù)一致。為了使得每個(gè)模型盡可能收斂完全,我們會在模型連續(xù)兩個(gè)Epoch的validation loss均高于它們前面緊鄰的一個(gè)Epoch的validation loss時(shí)終止模型訓(xùn)練,并選擇倒數(shù)第三個(gè)Epoch對應(yīng)的模型檢查點(diǎn)作為評測對象。 02

評測集

在本文中,我們使用了公開可得且具有代表性的代碼評測集進(jìn)行比較評估,包括:

HumanEval(Chen等,2021年)是一個(gè)廣泛使用的Python代碼補(bǔ)全評估數(shù)據(jù)集,由OpenAI的研究人員精心設(shè)計(jì)。

HumanEval-X(Zheng等,2023年)是通過翻譯方式將HumanEval擴(kuò)展成多種編程語言,實(shí)現(xiàn)了多語言代碼補(bǔ)全評估。

DS-1000(Lai等,2022年)側(cè)重于評估模型使用Python代碼進(jìn)行數(shù)據(jù)科學(xué)分析的能力,涵蓋了Numpy、Pandas、TensorFlow、Pytorch、Scipy、Sklearn和Matplotlib等重要庫。

MBPP(Austin等,2021年)包含1000個(gè)Python編程問題,通過眾包方式構(gòu)建,主要評估模型對基礎(chǔ)Python的掌握能力。在本研究中,我們從MBPP中選擇了ID為11-510的500個(gè)問題來評估模型基于文本描述生成代碼的能力。

CodeFuseEval(https://github.com/codefuse-ai/codefuse-evaluation),在HumanEval和HumanEval-X的基礎(chǔ)上,進(jìn)一步擴(kuò)展評測范圍,新增中文代碼補(bǔ)全(docstring為中文)、代碼翻譯和單測用例生成能力評估,對應(yīng)的子集分別稱為CodeFuseEval-CN、CodeFuseEval-CodeTrans和CodeFuseEval-UnitTest。

在以上評測集上,我們均采用“pass@1”作為本文中的評估指標(biāo)。

實(shí)驗(yàn)結(jié)果

接下來,我們將展示7個(gè)訓(xùn)練模型的評估結(jié)果。對于每個(gè)單一任務(wù)SFT-S-*模型,我們重點(diǎn)測試它們的特定目標(biāo)能力,例如,對于只用代碼補(bǔ)全數(shù)據(jù)集訓(xùn)練的SFT-S-CODECOMPLETION模型,我們只測試其在代碼補(bǔ)全上的表現(xiàn)。另一方面,對于SFT-MIXED模型和MFT-5TASKS模型,我們將評估它們在每個(gè)任務(wù)上的表現(xiàn),并將其與相應(yīng)的SFT-S-*模型進(jìn)行比較。具體而言,我們評估了7個(gè)模型在代碼補(bǔ)全、Text2Code、代碼注釋生成、代碼翻譯和單測用例生成等能力維度上的表現(xiàn)。 代碼補(bǔ)全 對于代碼補(bǔ)全任務(wù),我們使用了HumanEval和HumanEval-X評估數(shù)據(jù)集來評估模型的性能,采用pass@1作為評估指標(biāo)。我們評估了3個(gè)模型:SFT-S-CODECOMPLETION、SFT-MIXED和MFT-5TASKS。

這些模型在HumanEval數(shù)據(jù)集上的表現(xiàn)總結(jié)如表 2所示(第III列)。結(jié)果表明,使用MFT方法訓(xùn)練的MFT-5TASKS模型優(yōu)于其他兩個(gè)模型。相比于使用混合任務(wù)數(shù)據(jù)進(jìn)行微調(diào)的SFT-MIXED模型,其性能提高了2.44%。值得注意的是,SFT-MIXED模型的性能不如SFT-S-CODECOMPLETION模型,后者是針對代碼補(bǔ)全任務(wù)進(jìn)行單獨(dú)訓(xùn)練的。

1e957c38-8527-11ee-939d-92fbcf53809c.png

此外,我們還對3個(gè)模型在HumanEval-X數(shù)據(jù)集上進(jìn)行了多語言代碼補(bǔ)全能力評估,如表 3所示。MFT-5TASKS模型在Java和Golang上表現(xiàn)出優(yōu)異的性能,而SFT-MIXED模型在C++和JavaScript方面表現(xiàn)出色??傮w而言,MFT-5TASKS模型表現(xiàn)優(yōu)于其他2個(gè)模型,比SFT-MIXED模型上平均提高了1.22%。

1ebfa4b8-8527-11ee-939d-92fbcf53809c.png

總體而言,在代碼補(bǔ)全任務(wù)方面,使用MFT方法訓(xùn)練的模型優(yōu)于單獨(dú)進(jìn)行微調(diào)的模型和將多個(gè)任務(wù)混合進(jìn)行微調(diào)的模型。

Text2Code

為了評估模型根據(jù)描述生成代碼的能力,我們選擇了MBPP評估集,并使用pass@1作為評估指標(biāo)。我們在MBPP數(shù)據(jù)集上測試并對比了3個(gè)模型:SFT-S-TEXT2CODE、SFT-MIXED和MFT-5TASKS,如表 2所示(第IV列)。在這些模型中,MFT-5TASKS表現(xiàn)出最高的性能,比SFT-MIXED模型高出2.4%。同樣,在文本到代碼生成任務(wù)中,將多個(gè)任務(wù)混合進(jìn)行微調(diào)而得到的模型表現(xiàn)出較低的性能,不如這個(gè)任務(wù)單獨(dú)進(jìn)行微調(diào)得到的模型。

總體而言,在文本到代碼生成任務(wù)方面,使用MFT方法訓(xùn)練的模型優(yōu)于單獨(dú)進(jìn)行微調(diào)的模型和將多個(gè)任務(wù)混合進(jìn)行微調(diào)的模型。

代碼注釋生成

代碼注釋生成任務(wù)的目標(biāo)是使模型在不修改輸入代碼本身的要求下,為代碼添加必要的注釋,包括行注釋和接口注釋,使代碼更易讀和用戶友好。為了評估這個(gè)能力,我們基于500個(gè)MBPP測試集(id 11-510)構(gòu)建了一個(gè)評測集。對于評測集中的每個(gè)問題,我們讓SFT-S-CODECOMMENT、SFT-MIXED和MFT-5TASKS模型為其生成注釋。隨后,我們使用已經(jīng)被教導(dǎo)了好的代碼注釋標(biāo)準(zhǔn)的GPT-4作為裁判,來確定哪個(gè)模型表現(xiàn)最好,如果無法判別,則輸出UNKNOWN。

最后,我們統(tǒng)計(jì)了每個(gè)模型被確定為表現(xiàn)最好的問題的數(shù)量,并計(jì)算了相應(yīng)的比例,如表 4所示。可以看到,38.8%的問題被確定為MFT-5TASKS模型表現(xiàn)最好,超過第二名的SFT-MIXED模型7.4%和第三名的SFT-S-CODECOMMENT模型10.8%。另外,有1.8%的問題被GPT-4標(biāo)記為無法確定。

1ee95c7c-8527-11ee-939d-92fbcf53809c.png

總體而言,在生成代碼注釋任務(wù)上,使用MFT方法訓(xùn)練的模型展現(xiàn)出最佳性能。

代碼翻譯

代碼翻譯任務(wù)的目標(biāo)是將給定的源代碼片段準(zhǔn)確地翻譯成目標(biāo)語言中等效的代碼片段,即確保兩種實(shí)現(xiàn)具有相同的功能。在這里,我們利用CODEFUSEEVAL評測集的代碼翻譯子集,該子集支持Java、Python和C++之間的雙向翻譯評估。為了評估翻譯結(jié)果的準(zhǔn)確性和功能等效性,我們使用與源程序語義等效的測試用例用于驗(yàn)證結(jié)果代碼是否能夠成功運(yùn)行和通過,即符合pass@1標(biāo)準(zhǔn)。

3個(gè)模型的測試結(jié)果如表 5所示:MFT-5TASKS模型在Python到Java、Python到C++和C++到Java的翻譯中表現(xiàn)最好;SFT-MIXED模型在C++到Python的翻譯中表現(xiàn)出色,而SFT-S-CODETRANS模型在Java到Python和Java到C++的翻譯中表現(xiàn)最佳。總體而言,MFT-5TASKS模型展現(xiàn)出優(yōu)越的性能,比SFT-MIXED模型平均高出0.93%,比SFT-S-CODETRANS模型平均高出10.9%。

1f1228be-8527-11ee-939d-92fbcf53809c.png

總結(jié)而言,在代碼翻譯這個(gè)任務(wù)上,使用MFT方法訓(xùn)練的模型優(yōu)于其他兩種訓(xùn)練方法得到的模型。

單測用例生成

單測用例生成任務(wù)是通過訓(xùn)練模型為給定的代碼片段(如方法或類)生成一組單元測試用例,用以驗(yàn)證提供的代碼實(shí)現(xiàn)是否正確。我們選擇使用CODEFUSEEVAL評測集中的UNITTEST子集作為我們的測試數(shù)據(jù)集。同樣地,使用pass@1指標(biāo)作為評估指標(biāo),這意味著如果模型為輸入樣本(代碼片段)生成測試用例,并且輸入樣本通過了所有測試用例時(shí),正確生成樣本個(gè)數(shù)加1。在評估過程中同樣采用貪心解碼策略。

1f3768b8-8527-11ee-939d-92fbcf53809c.png

我們比較了3個(gè)模型在Python、Java和JavaScript上的單測用例生成能力,如表 6所示。結(jié)果表明,MFT-5TASKS模型在Python的單測用例生成方面優(yōu)于其他模型,比第二名的SFT-MIXED模型上高出5.73%,比第三名的SFT-S-UNITTEST模型領(lǐng)先10.19%。在JavaScript中,MFT-5TASKS模型也表現(xiàn)出色,領(lǐng)先其他模型7.93%。然而,在Java中,MFT-5TASKS模型的性能比SFT-S-UNITTEST高出5.37%,但比SFT-MIXED低5.44%??傮w而言,MFT-5TASKS模型依然現(xiàn)出最高的性能,相比SFT-MIXED模型平均提高了2.74%,相比SFT-S-UNITTEST模型提高了7.83%。

總結(jié)而言,使用MFT方法訓(xùn)練的模型表現(xiàn)優(yōu)于單一任務(wù)模型和混合任務(wù)模型。

在未見任務(wù)上的泛化表現(xiàn)

除了評估模型在具有訓(xùn)練數(shù)據(jù)的任務(wù)上的表現(xiàn)來回答RQ1和RQ2之外,本文也測試并回答了MFT模型是否在未見任務(wù)上表現(xiàn)出比混合任務(wù)模型更好的泛化能力(即RQ3)。為了回答這一問題,文章選擇了Text-to-SQL生成任務(wù)作為測試目標(biāo)。這個(gè)任務(wù)的數(shù)據(jù)不包含在7個(gè)現(xiàn)有模型的訓(xùn)練中。此外,這個(gè)任務(wù)與現(xiàn)有的5個(gè)下游任務(wù)有著明顯的代碼相關(guān)性,但又有所不同。 文章選擇了兩個(gè)評估指標(biāo),BLEU分?jǐn)?shù)和SQL語句的邏輯準(zhǔn)確性。

BLEU評估生成的輸出與參考答案之間的文本相似度,另一方面,邏輯準(zhǔn)確性指標(biāo)用于應(yīng)對含義正確但SQL語句表達(dá)不同的情況。具體來說,邏輯準(zhǔn)確性衡量數(shù)據(jù)集中生成的SQL語句在句法上正確且在語義上與參考答案相等的測試樣本的比例。

1f562db6-8527-11ee-939d-92fbcf53809c.png

文章選擇了5個(gè)代表性的Text2SQL數(shù)據(jù)集,包括WikiSQL(Zhong等,2017年)、Spider(Yu等,2019b年)、CSpider(Min等,2019年)、CoSQL(Yu等,2019a年)和BirdSQL(Li等,2023d年),并從每個(gè)數(shù)據(jù)集中隨機(jī)抽取了200個(gè)示例進(jìn)行評估。測試用例示例如表 7所示,其中第一行展示了類似于OpenAI ChatML格式的微調(diào)數(shù)據(jù)格式。對于每個(gè)抽樣出來的數(shù)據(jù)集,文章均測試了SFT-MIXED和MFT-5TASKS模型的邏輯準(zhǔn)確性和BLEU分?jǐn)?shù),如表 8所示。根據(jù)表8,MFT-5TASKS模型在每個(gè)數(shù)據(jù)集上的BLEU分?jǐn)?shù)都高于SFT-MIXED模型,平均高出2.78倍。這表明MFT-5TASKS生成的結(jié)果與參考答案的文本更相似。這種相似性在表 7中也可以觀察到,MFT-5TASKS模型生成更干凈的結(jié)果,而SFT-MIXED模型則提供更多的解釋(這在某些情況下可能更受歡迎)。此外,MFT-5TASKS在邏輯準(zhǔn)確性方面表現(xiàn)更好,整體準(zhǔn)確性比SFT-MIXED模型高出2.18倍,并在WikiSQL數(shù)據(jù)集上高出4.67倍。

1f84bb54-8527-11ee-939d-92fbcf53809c.png

從數(shù)值上看,MFT-5TASKS相對于SFT-MIXED表現(xiàn)出更好的性能,表明MFT訓(xùn)練的模型在未見任務(wù)上具有更強(qiáng)的泛化能力,而這個(gè)任務(wù)在訓(xùn)練過程中是未見的。

04

實(shí)驗(yàn)總結(jié)

本文選擇了與代碼相關(guān)的5個(gè)下游任務(wù),總共訓(xùn)練了7個(gè)模型,包括針對每個(gè)任務(wù)單獨(dú)進(jìn)行微調(diào)的SFT-S-*模型、使用所有任務(wù)數(shù)據(jù)混合進(jìn)行微調(diào)的SFT-MIXED模型,以及使用MFT方法訓(xùn)練的MFT-5TASKS模型。文章比較和測試了每個(gè)模型在其目標(biāo)能力方面的性能。此外,文章還對比評估了MFT方法和混合SFT方法在未見任務(wù)上的泛化性能。結(jié)論總結(jié)如下:

使用MFT方法訓(xùn)練的模型優(yōu)于針對每個(gè)任務(wù)單獨(dú)進(jìn)行微調(diào)的模型,對RQ1給出了肯定的回答。

使用MFT方法訓(xùn)練的模型優(yōu)于使用多個(gè)任務(wù)混合進(jìn)行微調(diào)的模型,對RQ2給出了肯定的回答。

使用MFT方法訓(xùn)練的模型相比于使用多個(gè)任務(wù)混合進(jìn)行微調(diào)的SFT模型,在新的未見任務(wù)上表現(xiàn)出更強(qiáng)的泛化能力。 ?

MFTCoder應(yīng)用

鑒于MFT訓(xùn)練方法的優(yōu)異表現(xiàn),我們已經(jīng)將MFTCoder用于適配當(dāng)前主流的開源LLMs,包括QWen、Baichuan 1/2、CodeGeex2、Llama 1/2、CodeLLama、StarCoder等。 MFTCoder支持Lora和QLora,這顯著減少了需要訓(xùn)練的模型訓(xùn)練參數(shù)數(shù)量。在適配這些模型并進(jìn)行微調(diào)的過程中,我們將可訓(xùn)練參數(shù)設(shè)置在總參數(shù)的0.1%到5%范圍內(nèi)。大量實(shí)踐表明,隨著可訓(xùn)練參數(shù)比例的增加,模型性能不會一直提升而是很快趨于飽和,實(shí)踐中觀察到可訓(xùn)練參數(shù)比例不超過5%通常即可實(shí)現(xiàn)接近全量微調(diào)的性能水平。另外,在這些微調(diào)過程中,我們會配置使用3到7個(gè)代碼相關(guān)的任務(wù)。我們通常對20B以下的模型使用Lora模式,而對20B以上的模型使用QLora模式。微調(diào)完成后,我們評測了這些模型代碼補(bǔ)全和Text2Code任務(wù)上的表現(xiàn),如表 9的第III列和第IV列所示。文章計(jì)算了MFT微調(diào)相對于基準(zhǔn)模型在HumanEval和MBPP評測集上的平均指標(biāo)提升幅度,如第5列所示,提升幅度從6.26%到12.75%不等,且在HumanEval上的提升幅度均超過MBPP上的幅度。

20034f5a-8527-11ee-939d-92fbcf53809c.png

此外,文章還評估了經(jīng)過MFTCoder微調(diào)的模型在多語言基準(zhǔn)測試HumanEval-X上的代碼補(bǔ)全性能,如表 10所示。值得注意的是,經(jīng)過微調(diào)的CodeFuse-CodeLLama-Python-MFT(34B)在四種語言(Java、C++、JavaScript和Golang)上的pass@1平均達(dá)到了56.88%。

2040a6de-8527-11ee-939d-92fbcf53809c.png

特別地,表 9還展示了一些代表性的經(jīng)過微調(diào)的開源模型(例如OctoPack和WizardCoder-Python)以及閉源模型(例如Claude2和GPT-4)在HumanEval和MBPP上的性能。值得注意的是,我們經(jīng)過微調(diào)的CodeFuse-CodeLLama-34B模型,在HumanEval上取得了pass@1 74.4%的成績,超過了表中列出的所有模型,包括GPT-4(67.00%,zero-shot, 2023年3月)。

對于這個(gè)模型,文章還在其他基準(zhǔn)測試中評估了它的表現(xiàn),包括多語言HUMANEVAL-X 、MBPP、DS-1000和CODEFUSEEVAL,并與GPT-3.5和GPT-4進(jìn)行了比較,如圖 6所示。CodeFuse-CodeLLama-34B在CODEFUSEEVAL-UNITTEST和HUMANEVAL上超越了GPT-4,在代碼翻譯能力上與其相當(dāng),但在中文代碼補(bǔ)全(CODEFUSEEVAL-CN)、多語言補(bǔ)全、數(shù)據(jù)科學(xué)分析(DS-1000)和文本到代碼生成(MBPP)能力方面略遜于GPT-4。然而,它在所有評估數(shù)據(jù)集上都不低于GPT-3.5。

2067ba58-8527-11ee-939d-92fbcf53809c.png

圖6: CodeFuse-CodeLLama-34B在多個(gè)代碼評測集上與GPT-3.5/GPT-4的表現(xiàn)對比雷達(dá)圖

此外,我們進(jìn)行了一項(xiàng)額外的評估,以評估使用MFTCoder和代碼相關(guān)數(shù)據(jù)微調(diào)后對模型在NLP任務(wù)上的性能影響。以CODEFUSE-QWEN-14B為案例,我們將其與基準(zhǔn)模型QWEN-14B和阿里云官方微調(diào)的QWEN-14B-CHAT進(jìn)行了NLP性能比較,如圖 7所示。顯然,CODEFUSE-QWEN-14B在NLP任務(wù)上的能力沒有下降,相反地,與其他兩個(gè)模型相比,它在語言(AFQMC, CHID, Wic, WSC)、推理(COPA, CMNLI, OCNLI, AX-b, AX-g, RTE)和理解能力(CSL, C3, EPRSTMT)方面表現(xiàn)出輕微的提升。

然而,與基準(zhǔn)模型QWEN-14B相比,其學(xué)科綜合能力(MMLU, C-Eval, ARC-c)略有下降,類似的下降現(xiàn)象也出現(xiàn)在QWEN-14B-CHAT模型上,細(xì)節(jié)數(shù)據(jù)如表 11所示。多個(gè)任務(wù)(包括Coding)總體平均,CodeFuse-QWen-14B相比Qwen-14B和QWen-14B-chat分別提升了2.56%和4.82%,而QWen-14B-chat相比QWen-14B降低了2.26%。

208e7e04-8527-11ee-939d-92fbcf53809c.png

圖7:CodeFuse-QWen-14B與Qwen-14B、QWen-14B-chat在NLP與Coding評測任務(wù)上的表現(xiàn)對比雷達(dá)圖

Table 11: Comparasion of CodeFuse-QWen-14B, QWen-14B and QWen-14B-chat on NLP tasks.

20cce0c2-8527-11ee-939d-92fbcf53809c.png

總結(jié)

本文介紹了MFTCoder,它將多任務(wù)學(xué)習(xí)引入到(代碼)大模型微調(diào)階段,通過設(shè)計(jì)或應(yīng)用多種均衡損失函數(shù)有效緩解多任務(wù)學(xué)習(xí)中數(shù)據(jù)量不均衡、難易不一、收斂速度不一致的挑戰(zhàn)性問題,大量實(shí)驗(yàn)結(jié)果表明,多任務(wù)微調(diào)的模型比每個(gè)下游任務(wù)單獨(dú)微調(diào)的模型和多任務(wù)數(shù)據(jù)混合為一后微調(diào)的模型表現(xiàn)更好。MFTCoder提供了高效的訓(xùn)練方案,包括高效的數(shù)據(jù)Tokenization模式和PEFT支持,并提供了高質(zhì)量的指令數(shù)據(jù)集構(gòu)建方案。此外,MFTCoder已經(jīng)適配了許多目前流行的開源大模型,其中以CodeLLama-34B-Python為底座,使用MFTCoder微調(diào)得到的CodeFuse-CodeLLama-34B模型在HumanEval數(shù)據(jù)集上取得了74.4%的pass@1得分,超過了GPT-4(67%, zero-shot, 2023年3月)。

具體參考論文: https://arxiv.org/pdf/2311.02303.pdf,以下是本文引用到的論文。

Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. 2023. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. arXiv:cs.LG/1910.10683

Armen Aghajanyan, Anchit Gupta, Akshat Shrivastava, Xilun Chen, Luke Zettlemoyer, and Sonal Gupta. 2021. Muppet: Massive Multi-task Representations with Pre-Finetuning. arXiv:cs.CL/2101.11038

Vamsi Aribandi, Yi Tay, Tal Schuster, Jinfeng Rao, Huaixiu Steven Zheng, Sanket Vaibhav Mehta, Honglei Zhuang, Vinh Q. Tran, Dara Bahri, Jianmo Ni, Jai Gupta, Kai Hui, Sebastian Ruder, and Donald Metzler. 2022. ExT5: Towards Extreme Multi-Task Scaling for Transfer Learning. arXiv:cs.CL/2111.10952

Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. 2021. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:cs.CL/2106.09685

Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, and Luke Zettlemoyer. 2023. QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:cs.LG/2305.14314

Yizhong Wang, Yeganeh Kordi, Swaroop Mishra, Alisa Liu, Noah A Smith, Daniel Khashabi, and Hannaneh Hajishirzi. 2022. Self-instruct: Aligning language model with self generated instructions.arXiv preprint arXiv:2212.10560(2022).

Suriya Gunasekar, Yi Zhang, Jyoti Aneja, Caio Ce?sar Teodoro Mendes, Allie Del Giorno, Sivakanth Gopi, Mojan Javaheripi, Piero Kauffmann, Gustavo de Rosa, Olli Saarikivi, et al. 2023. Textbooks Are All You Need.arXiv preprint arXiv:2306.11644(2023).

Guohao Li, Hasan Abed Al Kader Hammoud, Hani Itani, Dmitrii Khizbullin, and Bernard Ghanem. 2023c. CAMEL: Communicative Agents for "Mind" Exploration of Large Scale Language Model Society. arXiv:cs.AI/2303.17760

Peng Di, Jianguo Li, Hang Yu, Wei Jiang, Wenting Cai, Yang Cao, Chaoyu Chen, Dajun Chen, Hongwei Chen, Liang Chen, Gang Fan, Jie Gong, Zi Gong, Wen Hu, Tingting Guo, Zhichao Lei, Ting Li, Zheng Li, Ming Liang, Cong Liao, Bingchang Liu, Jiachen Liu, Zhiwei Liu, Shaojun Lu, Min Shen, Guangpei Wang, Huan Wang, Zhi Wang, Zhaogui Xu, Jiawei Yang, Qing Ye, Gehao Zhang, Yu Zhang, Zelin Zhao, Xunjin Zheng, Hailian Zhou, Lifu Zhu, and Xianying Zhu. 2023. CodeFuse-13B: A Pretrained Multi-lingual Code Large Language Model. arXiv:cs.SE/2310.06266

Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay Bashlykov, Soumya Batra, Prajjwal Bhargava, Shruti Bhosale, et al. 2023b. Llama 2: Open foundation and fine-tuned chat models.arXiv preprint arXiv:2307.09288(2023).

Neil Houlsby, Andrei Giurgiu, Stanislaw Jastrzebski, Bruna Morrone, Quentin de Laroussilhe, Andrea Gesmundo, Mona Attariyan, and Sylvain Gelly. 2019. Parameter-Efficient Transfer Learning for NLP. arXiv:cs.LG/1902.00751

Bo Liu, Yihao Feng, Peter Stone, and Qiang Liu. 2023. FAMO: Fast Adaptive Multitask Optimization. arXiv:cs.LG/2306.03792

Baptiste Rozie?re, Jonas Gehring, Fabian Gloeckle, Sten Sootla, Itai Gat, Xiaoqing Ellen Tan, Yossi Adi, Jingyu Liu, Tal Remez, Je?re?my Rapin, et al. 2023. Code llama: Open foundation models for code.arXiv preprint arXiv:2308.12950(2023).

Diederik P. Kingma and Jimmy Ba. 2017. Adam: A Method for Stochastic Optimization. arXiv:cs.LG/1412.6980

Qinkai Zheng, Xiao Xia, Xu Zou, Yuxiao Dong, Shan Wang, Yufei Xue, Zihan Wang, Lei Shen, Andi Wang, Yang Li, Teng Su, Zhilin Yang, and Jie Tang. 2023. CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X. InKDD.

Yuhang Lai, Chengxi Li, Yiming Wang, Tianyi Zhang, Ruiqi Zhong, Luke Zettlemoyer, Scott Wen tau Yih, Daniel Fried, Sida Wang, and Tao Yu. 2022. DS-1000: A Natural and Reliable Benchmark for Data Science Code Generation.ArXivabs/2211.11501 (2022).

Jacob Austin, Augustus Odena, Maxwell Nye, Maarten Bosma, Henryk Michalewski, David Dohan, Ellen Jiang, Carrie Cai, Michael Terry, Quoc Le, et al. 2021. Program Synthesis with Large Language Models.arXiv preprint arXiv:2108.07732(2021).

Mark Chen, Jerry Tworek, Heewoo Jun, Qiming Yuan, Henrique Ponde de Oliveira Pinto, Jared Kaplan, Harri Edwards, Yuri Burda, Nicholas Joseph, Greg Brockman, Alex Ray, Raul Puri and et al.. 2021. Evaluating Large Language Models Trained on Code. (2021). arXiv:cs.LG/2107.03374

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61969
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84078
  • GPT
    GPT
    +關(guān)注

    關(guān)注

    0

    文章

    347

    瀏覽量

    15182
  • ChatGPT
    +關(guān)注

    關(guān)注

    28

    文章

    1517

    瀏覽量

    6930
  • 大模型
    +關(guān)注

    關(guān)注

    2

    文章

    2136

    瀏覽量

    1980

原文標(biāo)題:干貨!MFTCoder論文多任務(wù)微調(diào)技術(shù)詳解

文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    第29章 STemWin多任務(wù)(uCOS-III)

    多任務(wù)系統(tǒng):一個(gè)任務(wù)調(diào)用emWin29. 3 多任務(wù)系統(tǒng):多個(gè)任務(wù)調(diào)用emWin29. 4 總結(jié)29.1 單任務(wù)系統(tǒng)(超級循環(huán)) 工程代碼
    發(fā)表于 10-15 15:28

    調(diào)變技術(shù)多任務(wù)技術(shù)有什么不同?

    調(diào)變技術(shù)是什么?多任務(wù)技術(shù)是什么?調(diào)變技術(shù)多任務(wù)技術(shù)有什么不同?
    發(fā)表于 05-19 07:17

    【6.2】技術(shù)解讀框架、場景案例解讀

    `技術(shù)解讀框架、場景案例解讀)`
    發(fā)表于 06-04 17:12

    基于 stm32 的 FreeRTOS 的詳細(xì)移植步驟及其多任務(wù)應(yīng)用 精選資料分享

    閃爍(變化)一次 LED ;task2,每間隔 2000ms ,向串口發(fā)送一次指令數(shù)據(jù) “helloworld!" ;task3,每間隔 5000ms ,從 AHT20 采集一次溫濕度數(shù)據(jù)(不考慮硬件情況,僅寫出整個(gè)多任務(wù)框架模擬代碼)。下載 FreeRTOS 的源碼。
    發(fā)表于 08-03 07:21

    多任務(wù)系統(tǒng)與單任務(wù)系統(tǒng)分別是指什么

    多任務(wù)與單任務(wù)所謂"單任務(wù)系統(tǒng)"是指該系統(tǒng)不能支持多任務(wù)并發(fā)操作,宏觀串行地執(zhí)行一個(gè)任務(wù)。而多任務(wù)
    發(fā)表于 12-22 07:20

    多任務(wù)編程多任務(wù)處理是指什么

    嵌入式Linux應(yīng)用編程-多任務(wù)編程多任務(wù)處理是指用戶可在同一時(shí)間內(nèi)運(yùn)行多個(gè)應(yīng)用程序,每個(gè)正在執(zhí)行的應(yīng)用程序被稱為一個(gè)任務(wù)。Linux就是一個(gè)支持多任務(wù)的操作系統(tǒng),比起單
    發(fā)表于 12-22 08:30

    keil下的FreeRtos多任務(wù)程序?qū)W習(xí)

    ;;task3,每間隔5000ms,從AHT20采集一次溫濕度數(shù)據(jù)(不考慮硬件情況,僅寫出整個(gè)多任務(wù)框架模擬代碼)手動(dòng)移
    發(fā)表于 02-21 06:14

    基于任務(wù)鏈的實(shí)時(shí)多任務(wù)軟件可靠性建模

    提出了以實(shí)時(shí)多任務(wù)系統(tǒng)中的任務(wù)鏈為組件,任務(wù)鏈運(yùn)行時(shí)間比例作為組件的權(quán)重系數(shù),建立實(shí)時(shí)多任務(wù)軟件的可靠性建模方法。該方法符合實(shí)時(shí)多任務(wù)系統(tǒng)應(yīng)
    發(fā)表于 03-03 11:47 ?16次下載

    基于消息驅(qū)動(dòng)的多任務(wù)操作機(jī)制

    本文對多任務(wù)操作機(jī)制與傳統(tǒng)的單任務(wù)操作機(jī)制進(jìn)行了比較,分析了多任務(wù)系統(tǒng)中數(shù)據(jù)交換的方法,特別是目前最為流行的用消息驅(qū)動(dòng)方式實(shí)現(xiàn)的系統(tǒng)。結(jié)合程控交換機(jī)軟件的實(shí)際,文
    發(fā)表于 05-14 16:56 ?0次下載

    基于C51多任務(wù)編程思想

    基于C51多任務(wù)編程思想
    發(fā)表于 10-16 10:02 ?34次下載
    基于C51<b class='flag-5'>多任務(wù)</b>編程思想

    基于Protothread的實(shí)時(shí)多任務(wù)系統(tǒng)設(shè)計(jì)

    產(chǎn)品的競爭力。本文介紹采用Protothread在非常小的系統(tǒng)開銷下實(shí)現(xiàn)實(shí)時(shí)多任務(wù)系統(tǒng)的方法。 關(guān)鍵詞 Protothread 實(shí)時(shí) 多任務(wù) 線程模型 嵌入式程序框架一般類似于程序1所示結(jié)構(gòu):系統(tǒng)中有3個(gè)
    發(fā)表于 11-04 10:57 ?9次下載

    stm32基于FreeRTOS的多任務(wù)程序

    :task1,每間隔500ms閃爍(變化)一次LED;task2,每間隔2000ms,向串口發(fā)送一次指令數(shù)據(jù)“helloworld!";task3,每間隔5000ms,從AHT20采集一次溫濕度數(shù)據(jù)(不考慮硬件情況,僅寫出整個(gè)多任務(wù)框架模擬代碼)。實(shí)驗(yàn)步驟1.FreeRT
    發(fā)表于 12-07 10:36 ?14次下載
    stm32基于FreeRTOS的<b class='flag-5'>多任務(wù)</b>程序

    一個(gè)大規(guī)模多任務(wù)學(xué)習(xí)框架μ2Net

    這種方法可以提高每個(gè)任務(wù)的質(zhì)量,并在收斂時(shí)間、訓(xùn)練實(shí)例數(shù)量、能源消耗等方面提高模型效率。本文提出的機(jī)器學(xué)習(xí)問題框架,可以視作標(biāo)準(zhǔn)多任務(wù)和持續(xù)學(xué)習(xí)形式化的概括和綜合。
    的頭像 發(fā)表于 07-21 10:19 ?1286次閱讀

    PicoSem:Arduino框架下的Raspberry多任務(wù)

    電子發(fā)燒友網(wǎng)站提供《PicoSem:Arduino框架下的Raspberry多任務(wù).zip》資料免費(fèi)下載
    發(fā)表于 06-13 09:21 ?1次下載
    PicoSem:Arduino<b class='flag-5'>框架</b>下的Raspberry<b class='flag-5'>多任務(wù)</b>

    Arduino上的多任務(wù)處理

    電子發(fā)燒友網(wǎng)站提供《Arduino上的多任務(wù)處理.zip》資料免費(fèi)下載
    發(fā)表于 06-14 11:05 ?0次下載
    Arduino上的<b class='flag-5'>多任務(wù)</b>處理