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

大量實驗結(jié)果顯示,相較于單獨對單個任務(wù)進行微調(diào)或者多任務(wù)混合為一后進行微調(diào),我們的多任務(wù)微調(diào)方法表現(xiàn)更優(yōu)。此外,MFTCoder具備高效訓(xùn)練特征,包括提供高效的數(shù)據(jù)Tokenization模式和支持PEFT微調(diào),能有效提升微調(diào)訓(xùn)練速度并降低對資源的需求。 MFTCoder已適配支持了多個主流開源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論文做一個詳細(xì)技術(shù)解讀。

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


?

引言

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

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

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

總體而言,多任務(wù)學(xué)習(xí)允許模型共同學(xué)習(xí)多個相關(guān)的任務(wù),從共享的知識中受益,提高性能,增強泛化能力,并應(yīng)對數(shù)據(jù)稀缺性。 盡管多任務(wù)學(xué)習(xí)很重要,但在自然語言處理領(lǐng)域,只有少數(shù)幾項現(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)域,但本文我們重點關(guān)注代碼大模型,這是考慮到代碼領(lǐng)域的下游任務(wù)往往更具相關(guān)性,這也是MFTCoder命名的來源。我們強調(diào),MFTCoder可以簡單地擴展到任意一組相關(guān)的NLP任務(wù)。為了提高MFTCoder的效率,我們采用了包括LoRA(Hu等,2021年)和QLoRA(Dettmers等,2023年)在內(nèi)的參數(shù)高效的微調(diào)技術(shù)。實驗結(jié)果表明,使用MFT方法訓(xùn)練的多任務(wù)模型在性能上優(yōu)于單獨為每個任務(wù)進行微調(diào)或合并多個任務(wù)的數(shù)據(jù)進行微調(diào)而得到的模型。我們進一步適配并驗證了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)。 文章主要貢獻總結(jié)如下:

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

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

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

方法

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è)計。

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

數(shù)據(jù)集構(gòu)建與高效訓(xùn)練)拆分完后,下一步便是為每個任務(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è)計)針對多任務(wù)學(xué)習(xí)領(lǐng)域普遍存在的任務(wù)間數(shù)據(jù)量不均衡、難易不一及收斂速度不一致的挑戰(zhàn),MFTCoder引入或調(diào)整不同的損失函數(shù)以實現(xiàn)任務(wù)平衡。

多模型適配)鑒于不同的大型模型具有不同的優(yōu)勢和能力,為支持按需選擇適合的模型底座進行微調(diào)以實現(xiàn)最佳性能,MFTCoder已適配了若干主流的開源LLMs,包括LLama,LLama 2,CodeLLama,Qwen,Baichuan 1/2,ChatGLM 2,CodeGeeX 2,GPT-NEOX,CodeFuse-13B,StarCoder,AntLLM等。同時也在持續(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ā),進一步將Self-Instruct技術(shù)應(yīng)用于為下游代碼相關(guān)任務(wù)生成高質(zhì)量的代碼練習(xí)數(shù)據(jù)集。 在具體實現(xiàn)方面,我們有兩個選擇。

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

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

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

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

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

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

為了解決固定模板導(dǎo)致的多樣性減少問題,并確保準(zhǔn)確的提示描述,我們利用Camel的任務(wù)Prompt細(xì)化功能來獲取精確且多樣的任務(wù)Prompt。每個任務(wù)Prompt用于生成與相應(yīng)種子相關(guān)的一組指令(例如與二叉搜索樹相關(guān)的練習(xí)問題)。使用ChatGPT,我們生成相應(yīng)的指令解決方案。最后,我們將指令及其相應(yīng)的解決方案組裝和去重,以獲得一個練習(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模式在一個Batch中的數(shù)據(jù)存在形式對比示意圖

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

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

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

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

PEFT高效微調(diào)

目前流行的開源LLMs通常包含數(shù)十億乃至上百億個參數(shù),而多任務(wù)學(xué)習(xí)場景又通常涉及大量的任務(wù),這意味著會有大量的微調(diào)樣本參與訓(xùn)練。如果我們選擇使用大量數(shù)據(jù)對這些大模型進行全量微調(diào),將會面臨兩個挑戰(zhàn):首先,需要大量的存儲和計算資源;其次,在訓(xùn)練過程中可能面臨災(zāi)難性遺忘的風(fēng)險。為了解決這些問題,MFTCoder采用了PEFT(Parameter-efficient fine-tuning)技術(shù)(Houlsby等,2019年),使得能夠在短時間內(nèi)以最小的資源需求實現(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所示。它會給原始模型添加一個旁路分支,在訓(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)重進行微調(diào)。結(jié)果,QLoRA可以使用更少的GPU資源對較大的模型進行微調(diào)。例如,MFTCoder可以在單張Nvidia A100卡(80GB顯存)上對70B模型進行微調(diào)。

05

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

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

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

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

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

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

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

在每次迭代中,我們根據(jù)任務(wù)的驗證損失梯度更新任務(wù)特定的權(quán)重。該方法旨在給予收斂速度較慢的任務(wù)更多的關(guān)注,使其對整體優(yōu)化過程產(chǎn)生更大的影響。通過動態(tài)調(diào)整任務(wù)權(quán)重,我們創(chuàng)造了一個平衡收斂的情景,所有任務(wù)以類似的速度向其最優(yōu)解進展。這種機制有效地解決了不同收斂速度的問題,增強了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作為一個靈活框架為這些問題提供了有效的解決方案,為開發(fā)更高效、更準(zhǔn)確的多任務(wù)模型提供了支持。

實驗

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

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

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

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

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

實驗設(shè)置

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

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

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

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

評測集

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

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

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

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

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

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

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

實驗結(jié)果

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

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

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

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

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

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

Text2Code

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

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

代碼注釋生成

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

最后,我們統(tǒng)計了每個模型被確定為表現(xiàn)最好的問題的數(shù)量,并計算了相應(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)語言中等效的代碼片段,即確保兩種實現(xiàn)具有相同的功能。在這里,我們利用CODEFUSEEVAL評測集的代碼翻譯子集,該子集支持Java、Python和C++之間的雙向翻譯評估。為了評估翻譯結(jié)果的準(zhǔn)確性和功能等效性,我們使用與源程序語義等效的測試用例用于驗證結(jié)果代碼是否能夠成功運行和通過,即符合pass@1標(biāo)準(zhǔn)。

3個模型的測試結(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)最佳??傮w而言,MFT-5TASKS模型展現(xiàn)出優(yōu)越的性能,比SFT-MIXED模型平均高出0.93%,比SFT-S-CODETRANS模型平均高出10.9%。

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

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

單測用例生成

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

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

我們比較了3個模型在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%。總體而言,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)。這個任務(wù)的數(shù)據(jù)不包含在7個現(xiàn)有模型的訓(xùn)練中。此外,這個任務(wù)與現(xiàn)有的5個下游任務(wù)有著明顯的代碼相關(guān)性,但又有所不同。 文章選擇了兩個評估指標(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個代表性的Text2SQL數(shù)據(jù)集,包括WikiSQL(Zhong等,2017年)、Spider(Yu等,2019b年)、CSpider(Min等,2019年)、CoSQL(Yu等,2019a年)和BirdSQL(Li等,2023d年),并從每個數(shù)據(jù)集中隨機抽取了200個示例進行評估。測試用例示例如表 7所示,其中第一行展示了類似于OpenAI ChatML格式的微調(diào)數(shù)據(jù)格式。對于每個抽樣出來的數(shù)據(jù)集,文章均測試了SFT-MIXED和MFT-5TASKS模型的邏輯準(zhǔn)確性和BLEU分?jǐn)?shù),如表 8所示。根據(jù)表8,MFT-5TASKS模型在每個數(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ù)上具有更強的泛化能力,而這個任務(wù)在訓(xùn)練過程中是未見的。

04

實驗總結(jié)

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

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

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

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

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ù)量。在適配這些模型并進行微調(diào)的過程中,我們將可訓(xùn)練參數(shù)設(shè)置在總參數(shù)的0.1%到5%范圍內(nèi)。大量實踐表明,隨著可訓(xùn)練參數(shù)比例的增加,模型性能不會一直提升而是很快趨于飽和,實踐中觀察到可訓(xùn)練參數(shù)比例不超過5%通常即可實現(xiàn)接近全量微調(diào)的性能水平。另外,在這些微調(diào)過程中,我們會配置使用3到7個代碼相關(guān)的任務(wù)。我們通常對20B以下的模型使用Lora模式,而對20B以上的模型使用QLora模式。微調(diào)完成后,我們評測了這些模型代碼補全和Text2Code任務(wù)上的表現(xiàn),如表 9的第III列和第IV列所示。文章計算了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上的代碼補全性能,如表 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月)。

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

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

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

此外,我們進行了一項額外的評估,以評估使用MFTCoder和代碼相關(guān)數(shù)據(jù)微調(diào)后對模型在NLP任務(wù)上的性能影響。以CODEFUSE-QWEN-14B為案例,我們將其與基準(zhǔn)模型QWEN-14B和阿里云官方微調(diào)的QWEN-14B-CHAT進行了NLP性能比較,如圖 7所示。顯然,CODEFUSE-QWEN-14B在NLP任務(wù)上的能力沒有下降,相反地,與其他兩個模型相比,它在語言(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所示。多個任務(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è)計或應(yīng)用多種均衡損失函數(shù)有效緩解多任務(wù)學(xué)習(xí)中數(shù)據(jù)量不均衡、難易不一、收斂速度不一致的挑戰(zhàn)性問題,大量實驗結(jié)果表明,多任務(wù)微調(diào)的模型比每個下游任務(wù)單獨微調(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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4333

    瀏覽量

    62720
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

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

    關(guān)注

    0

    文章

    354

    瀏覽量

    15419
  • ChatGPT
    +關(guān)注

    關(guān)注

    29

    文章

    1563

    瀏覽量

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

    關(guān)注

    2

    文章

    2477

    瀏覽量

    2828

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

    多任務(wù)系統(tǒng):一個任務(wù)調(diào)用emWin29. 3 多任務(wù)系統(tǒng):多個任務(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ù)(不考慮硬件情況,僅寫出整個多任務(wù)框架模擬代碼)。下載 FreeRTOS 的源碼。
    發(fā)表于 08-03 07:21

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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