論文閱讀_代碼生成模型_CodeLlama

英文名稱: Code Llama: Open Foundation Models for Code
中文名稱: Code Llama:開放基礎(chǔ)代碼模型
鏈接: https://arxiv.org/abs/2308.12950
代碼: https://github.com/facebookresearch/codellama
作者: Baptiste Rozière, Jonas Gehring, Fabian Gloeckle, Sten Sootla, Itai Gat, Xiaoqing Ellen Tan, Yossi Adi, Jingyu Liu, Romain Sauvestre, Tal Remez, Jérémy Rapin, Artyom Kozhevnikov, Ivan Evtimov, Joanna Bitton, Manish Bhatt, Cristian Canton Ferrer, Aaron Grattafiori, Wenhan Xiong, Alexandre Défossez, Jade Copet, Faisal Azhar, Hugo Touvron, Louis Martin, Nicolas Usunier, Thomas Scialom, Gabriel Synnaeve
機(jī)構(gòu): Meta AI
日期: 2023-08-24
引用次數(shù): 319

1 讀后感

Code Llama 是一個(gè)基于 llama2 模型進(jìn)行訓(xùn)練得到的代碼生成大模型。又針對(duì)代碼填充、長(zhǎng)上下文等特殊條件以及人類通常用法進(jìn)行了優(yōu)化,因此它集成了 llama2 對(duì)自然語言的理解,并針對(duì)代碼生成場(chǎng)景進(jìn)行了優(yōu)化。

除了調(diào)用推理,我們一般主要利用微調(diào)模型來進(jìn)行改進(jìn)模型效果,因此選擇一個(gè)好的基礎(chǔ)模型作為工作基礎(chǔ)非常重要,Code Llama 是當(dāng)前代碼生成模型中比較推薦的基礎(chǔ)模型。

論文結(jié)構(gòu)針對(duì)幾項(xiàng)主要貢獻(xiàn)進(jìn)行了層層深入的討論。在整理時(shí),我把實(shí)現(xiàn)部分歸納了一下,把同一主題的內(nèi)容放在一起了。

2 摘要

目標(biāo):發(fā)布 Code Llama 代碼模型系列,基于 Llama 2 開發(fā),提供了在開放模型中最先進(jìn)的性能、填充能力、支持大型輸入上下文,并具有 zero-shot 指令跟隨能力,用于編程任務(wù)。

方法:提供多個(gè)版本以覆蓋各種應(yīng)用場(chǎng)景:基礎(chǔ)模型(Code Llama)、Python 專業(yè)化模型(Code Llama-Python)和指令引導(dǎo)模型(Code Llama-Instruct),分別具有 7B、13B 和 34B 參數(shù)。

結(jié)論:這些模型在性能、填充能力、支持大型輸入上下文以及 zero-shot 指令跟隨能力方面表現(xiàn)出色。

3 引言

主要貢獻(xiàn)

  • 基于 llama2 訓(xùn)練:所有 Code Llama 模型都使用 Llama2 模型權(quán)重進(jìn)行初始化,實(shí)驗(yàn)證明它優(yōu)于僅在代碼上訓(xùn)練的相同架構(gòu)。
  • 代碼填充:生成代碼時(shí),需要考慮整個(gè)周圍上下文的同時(shí)填充代碼的缺失部分,因此通過多任務(wù)目標(biāo)訓(xùn)練模型,包括自回歸和因果填充預(yù)測(cè)。
  • 長(zhǎng)上下文:將最大上下文長(zhǎng)度從 4,096 token 擴(kuò)展到 100,000 個(gè) token。
  • 指令微調(diào):在專有 Instruct 數(shù)據(jù)的混合上進(jìn)行了進(jìn)一步微調(diào),以提高安全性和實(shí)用性。

4 Code Llama 實(shí)現(xiàn)

4.1 發(fā)布了三個(gè)版本

  • Code Llama:基礎(chǔ)模型。
  • Code Llama - Python:用于 Python 版本。
  • Code Llama - Instruct:引導(dǎo)微調(diào)版本。

4.2 訓(xùn)練數(shù)據(jù)

從 Llama 2 的 7B、13B 和 34B 版本開始,在初始階段使用 500B token 訓(xùn)練 Code Llama。

4.3 代碼填充

代碼填充的目標(biāo)是在給定周圍上下文情況下預(yù)測(cè)程序缺失部分。

使用因果掩蔽的概念來訓(xùn)練填充模型。將字符級(jí)別的訓(xùn)練文檔拆分為前綴、中間部分和后綴,拆分位置獨(dú)立于文檔長(zhǎng)度上的均勻分布進(jìn)行采樣。

4.4 長(zhǎng)上下文微調(diào)

提出了一個(gè)專用的長(zhǎng)上下文微調(diào)(LCFT)階段,模型支持 16,384 個(gè) token 的序列,高于 Llama 2 和初始代碼訓(xùn)練階段使用的 4,096 個(gè) token。對(duì)旋轉(zhuǎn)位置嵌入進(jìn)行優(yōu)化,將基周期從 10,000 增加到 1,000,000 以進(jìn)行微調(diào)。使模型支持處理更大的序列,并減少短距離注意力的傾向。

4.5 指令微調(diào)

使用三種不同類型的數(shù)據(jù)訓(xùn)練:

4.5.1 專有數(shù)據(jù)集

使用 Llama 2 論文中的指令調(diào)整數(shù)據(jù)集 “RLHF V5” 微調(diào)模型,通過人類反饋和人類反饋?zhàn)⑨尩膹?qiáng)化學(xué)習(xí)的幾個(gè)階段收集,它結(jié)合了數(shù)以千計(jì)的監(jiān)督微調(diào)示例,每個(gè)示例都包含用戶和工具之間的多輪對(duì)話。

4.5.2 自我指導(dǎo)

專有數(shù)據(jù)集包含幾個(gè)與代碼相關(guān)的任務(wù)示例。

使用執(zhí)行反饋來選擇數(shù)據(jù)來訓(xùn)練我們的指令模型,而不是人工反饋。我們按照以下方法構(gòu)建自學(xué)數(shù)據(jù)集,得到約 14,000 個(gè)問題 - 測(cè)試 - 解決方案三元組。

  1. 通過提示生成 62,000 個(gè)訪談式編程問題 Llama 2 70B。詳見附錄中圖 -9。
  2. 通過刪除完全重復(fù)的問題來消除重復(fù)問題集,從而產(chǎn)生約 52,000 個(gè)問題。
  3. 對(duì)于每個(gè)問題:
    • 通過提示 Code Llama 7B 生成單元測(cè)試(圖 10 中包含提示)。
    • 通過提示 Code Llama 7B 生成 10 個(gè) Python 解決方案(圖 11)。
    • 對(duì)十個(gè)解決方案運(yùn)行單元測(cè)試。將通過測(cè)試的第一個(gè)解決方案(及其相應(yīng)的問題和測(cè)試)添加到自指導(dǎo)數(shù)據(jù)集。

我們使用 Code Llama 7B 來生成測(cè)試和 Python 解決方案,因?yàn)樽髡甙l(fā)現(xiàn),在相同的計(jì)算預(yù)算下,它比使用 34B 模型為每個(gè)問題生成更少的解決方案更有效。

4.5.3 排演

為了防止模型在一般編碼和語言理解能力上倒退,Code Llama - Instruct 還使用來自代碼數(shù)據(jù)集(6%)和自然語言數(shù)據(jù)集(2%)的一小部分?jǐn)?shù)據(jù)進(jìn)行訓(xùn)練。

4.6 訓(xùn)練方法

具體參數(shù)請(qǐng)見論文原文:Training details 部分。

4.7 結(jié)果

主實(shí)驗(yàn)結(jié)果如下,后面還有一些消融實(shí)驗(yàn),用于展示文中幾種優(yōu)化的具體效果。

5 相關(guān)工作

相關(guān)工作中列出了其它主流的代碼生成工具,也可以看一下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容