什么情況需要微調(diào)定制屬于自己的大模型

背景

我們?nèi)粘KJ(rèn)識的「大模型」都是經(jīng)過微調(diào)之后得到的。大模型只是一個「文本續(xù)寫的模型」。在未經(jīng)過任何微調(diào)或者基于人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)之前,模型只能實現(xiàn)基本的文本接龍,并沒有直接理解用戶任何指令或意圖的能力。

下面是開源大模型零一萬物 Yi-34b 未經(jīng)過微調(diào)之前,模型的輸出:


上面的輸出其實從語法結(jié)構(gòu)什么來說都是對的,但是它的輸出并不是「對話」,而是像繼續(xù)編寫某個文本里的片段。

經(jīng)過 Chat 數(shù)據(jù)微調(diào)訓(xùn)練之后,模型才學(xué)會如何和人類進(jìn)行正常交流:


用來微調(diào)的 Chat 對話模型使用的訓(xùn)練數(shù)據(jù)為下圖所示,由符合預(yù)期的「一問一答」數(shù)據(jù)組成:

社區(qū)上的大模型,無論是 GPT 還是開源大模型,基本都遵循先進(jìn)行預(yù)訓(xùn)練然后微調(diào),得到一個對話或者其他用途的模型。

什么是預(yù)訓(xùn)練?

在預(yù)訓(xùn)練階段,模型通過學(xué)習(xí)大量的數(shù)據(jù)來提取特征、理解語義和推理能力,從而對通識知識,代碼知識獲得一般性認(rèn)識。質(zhì)量較高的預(yù)訓(xùn)練數(shù)據(jù)可以增強(qiáng)模型的泛化能力,減少在后續(xù)特定任務(wù)上的訓(xùn)練調(diào)優(yōu)時間和資源消耗。

  • 預(yù)訓(xùn)練是一種無監(jiān)督學(xué)習(xí)方式,是指使用隨機(jī)文本片段在大規(guī)模數(shù)據(jù)集上對神經(jīng)網(wǎng)絡(luò)模型進(jìn)行初始訓(xùn)練,以便模型能夠?qū)W習(xí)廣泛的特征和知識。

  • 預(yù)訓(xùn)練使用的訓(xùn)練數(shù)據(jù)格式,「只有輸出」,沒有輸入的標(biāo)簽。大模型使用這種大量沒有標(biāo)記的數(shù)據(jù)來自己學(xué)習(xí)訓(xùn)練數(shù)據(jù)中數(shù)據(jù)的規(guī)律(中英文語法,代碼語法,通識知識等)

預(yù)訓(xùn)練適合什么場景?

  • 從 0 開始訓(xùn)練一個新的通用大模型。

  • 基座大模型 LLaMA2 中文數(shù)據(jù)非常少,只占 0.13%,有必要使用更多比例中文數(shù)據(jù)繼續(xù)預(yù)訓(xùn)練使大模型學(xué)會中文表達(dá)。

  • 基座大模型 LLaMA2 模型代碼內(nèi)容的占比同樣也不高(4%),使用預(yù)訓(xùn)練添加更多比例的代碼數(shù)據(jù),強(qiáng)化大模型代碼能力(Code LLaMA代碼模型)

  • 出了一門新的編程語言,為了讓模型能夠?qū)W到最新的編程語言結(jié)構(gòu),可以考慮預(yù)訓(xùn)練。

什么是微調(diào)?

  • 微調(diào)使用 「一問一答」的格式,即有標(biāo)注的訓(xùn)練數(shù)據(jù),在基于原有模型參數(shù)上,來讓模型更清楚地知道什么樣的輸入下他應(yīng)該給予什么樣的輸出,按照訓(xùn)練數(shù)據(jù)里的模式進(jìn)行學(xué)習(xí)。

大模型先通過預(yù)訓(xùn)練學(xué)習(xí)基礎(chǔ)知識,再通過微調(diào)讓模型學(xué)會基于它通過預(yù)訓(xùn)練已經(jīng)學(xué)會的知識,學(xué)習(xí)如何去根據(jù)用戶指令輸出正確適當(dāng)?shù)膬?nèi)容。

我能用微調(diào)定制什么?

  • 設(shè)置風(fēng)格、語氣、格式等定性方面:

    • 場景舉例:創(chuàng)建一個語音對話機(jī)器人,不通過提示詞的方式,每次讓模型輸出的內(nèi)容盡可能精簡如50字以內(nèi)。

    • 大模型智能Code Review,通過打標(biāo)過的優(yōu)質(zhì)數(shù)據(jù)使得大模型 Review 的結(jié)果輸出更加有效和高質(zhì)量。

  • 提高生成預(yù)期輸出的可靠性:

    • 將天氣查詢的需求轉(zhuǎn)換為 JSON 請求參數(shù),通過大量示例作為微調(diào)訓(xùn)練數(shù)據(jù)提升輸出 JSON 的信息抽取的效果,并降低輸出非法 JSON 內(nèi)容的概率。

    • 要求大模型只輸出代碼塊,即使通過提示詞告訴模型只能一次性輸出代碼塊且不添加任何解釋,但大模型偶爾也會輸出解釋和多個代碼塊。此時用一些少量微調(diào)數(shù)據(jù)可以改善這些問題。

  • 提升效果

    • 使用大模型生成 Pandas 數(shù)據(jù)分析和可視化代碼。大模型本身理解 Pandas 代碼的編寫,但是編寫準(zhǔn)確率在一些場景下可能不是特別高,通過一系列經(jīng)過打標(biāo)正確的訓(xùn)練數(shù)據(jù)提升大模型理解用戶需求編寫 Pandas 代碼的效果和正確率。
  • 比較復(fù)雜的,有大量任務(wù)說明的提示詞。

    • 比如將用戶的一段描述轉(zhuǎn)換為一個甚至多個接口請求參數(shù),需要在提示詞里添加大量說明文檔和樣例。
  • 減少 Token 占用

    • 就像上面的例子,在提示詞里添加大量文檔說明,使用按 Token 計費的模型如 GPT4 會顯得很貴。同時較少的 Token 能獲得更快的推理速度。

可以使用微調(diào)來讓大模型新增知識嗎?

不推薦,在需要有可信依據(jù)的場景上,比如構(gòu)建智能客服機(jī)器人,通常會使用 RAG 的方式配合向量搜索等方式從文檔庫搜尋與用戶詢問問題最為相關(guān)的內(nèi)容,并將匹配到的文檔段落作為知識內(nèi)容添加到提示詞中,大模型使用提示詞中的知識來回答用戶的問題。

微調(diào)改善的是大模型在某種模式下的表現(xiàn)(如風(fēng)格,準(zhǔn)確度,幻覺問題等)。雖然微調(diào)也能一定程度上記憶新增的知識,但由于微調(diào)是改變模型的參數(shù)結(jié)構(gòu),使得模型在生成新 token 時輸出與訓(xùn)練數(shù)據(jù)模式更相似的內(nèi)容。從輸出準(zhǔn)確度上來說是不如在提示詞中添加的知識內(nèi)容。

微調(diào)方式

在大模型預(yù)訓(xùn)練參數(shù)上進(jìn)行參數(shù)微調(diào)訓(xùn)練,有三種方式:

  • 全參數(shù)微調(diào),即完全監(jiān)督微調(diào),在所有參數(shù)層上根據(jù)標(biāo)注數(shù)據(jù)去調(diào)整原始預(yù)訓(xùn)練模型中的 QKV 參數(shù)層。

  • LoRA,即 LLM 的低秩適配(Low-Rank Adaptation),通過兩個較小的矩陣來擬合調(diào)整后的參數(shù)層,這個過程可以理解為 X + Z = Y ,其中 X 為原始參數(shù),Y 為訓(xùn)練之后的參數(shù),訓(xùn)練過程中就是尋找可以將 X 擬合為 Y 的 Z 矩陣。Z 矩陣由 兩個較小的 Wa 矩陣 和 Wb 矩陣組成。


  • QLoRA, 與 LoRA 方式類似,也是訓(xùn)練兩個擬合參數(shù)層來達(dá)到對原始模型的調(diào)整。區(qū)別在于為了節(jié)省訓(xùn)練硬件資源, QLoRA 會先將原始模型參數(shù)量化至 4-bit 并凍結(jié),然后添加一小組可學(xué)習(xí)的低秩適配器權(quán)重( Low-rank Adapter weights),這些權(quán)重通過量化權(quán)重的反向傳播梯度進(jìn)行調(diào)優(yōu),在量化之后的參數(shù)上進(jìn)行 LoRA 訓(xùn)練,這將大幅下降顯存的占用(33b 的模型 以 FP16 全量加載需消耗 80GB 顯存,量化至 4 bit之后模型加載僅需要 20 GB 左右顯存的占用)

  • 除了量化并凍結(jié)原始參數(shù),QLoRA 還支持分頁優(yōu)化器:使用NVIDIA統(tǒng)一內(nèi)存特性,將部分顯存溢出的部分 offload 到內(nèi)存中實現(xiàn)分頁,來進(jìn)一步避免 OOM 的問題。(即下圖紫色箭頭部分)


關(guān)于全量參數(shù)微調(diào) 和 LoRA 方式效果的對比,以下以 SQL 生成場景舉例,柱狀圖從深到淺依次是未經(jīng)過微調(diào)訓(xùn)練、LoRA 方式訓(xùn)練和全參數(shù)訓(xùn)練后模型生成的準(zhǔn)確度:



在 SQL 數(shù)據(jù)集上,根據(jù)模型大小和微調(diào)方法預(yù)測準(zhǔn)確率,LoRA微調(diào)模型的表現(xiàn)幾乎可與全參數(shù)微調(diào)模型相當(dāng)。需要注意的是,LoRA 微調(diào)的 13B 模型的表現(xiàn)略優(yōu)于全參數(shù)微調(diào)的 7B 模型。

關(guān)于 QLoRA 訓(xùn)練的效果:


從上圖中可以看到,在5-shot MMLU 場景下,QLoRA 效果與常規(guī) LoRA 效果接近,甚至能反超常規(guī) LoRA 微調(diào)效果。

關(guān)于資源消耗:


在上表中:

  • LLaMA-13B+LoRA(2M)表示使用 LLaMA-13B作為基本模型和 LoRA 訓(xùn)練方法在 200 萬指令數(shù)據(jù)上訓(xùn)練的模型。

  • 可以看到全量參數(shù)的訓(xùn)練時間約為 LoRA 方式的 2~3 倍。

  • 從效果上來看,LoRA 與全參數(shù)微調(diào)效果差距在1 ~ 9%左右。但是在特定場景上(math 數(shù)據(jù)集)僅相差 1% 左右,因此在垂直領(lǐng)域訓(xùn)練上 LoRA 能保持較好的效果,同時顯著降低訓(xùn)練時長。

以 6b 參數(shù)量的模型分別以不同方式啟動訓(xùn)練,顯存占用情況:


從上表中可以看到:

  • 全參數(shù)訓(xùn)練顯存占用約為 LoRA 的 4.5倍

  • 使用 QLoRA 方式顯存占用相對于 LoRA 又可以省一倍。

  • 6B 參數(shù)的微調(diào),一張 24G 顯存的顯卡運行LoRA微調(diào)綽綽有余。

因此,結(jié)合訓(xùn)練效果看,LoRA 或者 QLoRA 的高效微調(diào)的方式成本較低效果相對也較好,因此以LoRA 的方式來對基座模型進(jìn)行預(yù)訓(xùn)練是最為合適的。

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

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

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