成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

調(diào)LLaMA類模型沒那么難,LoRA將模型微調(diào)縮減到幾小時(shí)

人工智能 新聞
LoRA 微調(diào)方法,隨著大模型的出現(xiàn)而走紅。

最近幾個(gè)月,ChatGPT 等一系列大語言模型(LLM)相繼出現(xiàn),隨之而來的是算力緊缺日益嚴(yán)重。雖然人人都想打造專屬于自己的大模型,但是能負(fù)擔(dān)得起上億參數(shù)模型訓(xùn)練的機(jī)構(gòu)卻寥寥無幾。

在快速發(fā)展的人工智能領(lǐng)域,以高效和有效的方式使用大型語言模型正變得越來越重要。

LoRA(Low-Rank Adaption,低秩自適應(yīng)) 作為微調(diào) LLMs 一種比較出圈的技術(shù),其額外引入了可訓(xùn)練的低秩分解矩陣,同時(shí)固定住預(yù)訓(xùn)練權(quán)重,從而大大減少了下游任務(wù)的可訓(xùn)練參數(shù)數(shù)量。

本文中,來自 Lightning AI 首席人工智能教育家 Sebastian Raschka 將帶你了解如何以高效的方式用 LoRA 來微調(diào) LLM。下面是全文內(nèi)容。

為什么要進(jìn)行微調(diào)?

預(yù)訓(xùn)練大語言模型通常被稱為基礎(chǔ)模型,這樣稱呼的原因是:大語言模型在各種任務(wù)中表現(xiàn)良好,可以將它們用作對(duì)目標(biāo)任務(wù)進(jìn)行微調(diào)的基礎(chǔ)。正如 Sebastian Raschka 在上一篇博文《Understanding Parameter-Efficient Finetuning of Large Language Models: From Prefix Tuning to LLaMA-Adapters》中所討論的,微調(diào)能夠使模型適應(yīng)目標(biāo)域和目標(biāo)任務(wù)。盡管如此,大模型在計(jì)算上的成本可能非常昂貴 —— 模型越大,更新其網(wǎng)絡(luò)層的成本就越高。

如果不想將網(wǎng)絡(luò)中所有的層都進(jìn)行更新,可以使用諸如前綴微調(diào)和適配器之類的高效調(diào)參方法。如今,有一種更流行的微調(diào)技術(shù):Hu 等人提出的低秩自適應(yīng)(LoRA)。

什么是 LoRA?它是如何工作的?它與其他流行的微調(diào)方法相比如何?本文將回答所有這些問題。

圖片

提高權(quán)重更新效率

論文《 LoRA: Low-Rank Adaptation of Large Language Models》提出將權(quán)重變化 ΔW 分解為秩較低的表示。(LoRA 不會(huì)直接分解矩陣,而是通過反向傳播來學(xué)習(xí)分解的矩陣)。

在仔細(xì)研究 LoRA 之前,我們先簡(jiǎn)要解釋一下規(guī)則微調(diào)期間的訓(xùn)練程序。首先是權(quán)重變化 ΔW。假設(shè) W 表示給定神經(jīng)網(wǎng)絡(luò)層中的權(quán)重矩陣。然后,使用常規(guī)反向傳播,我們可以獲得權(quán)重更新 ΔW,它通常被計(jì)算為損失乘以學(xué)習(xí)率的負(fù)梯:

圖片

然后,得到 ΔW 后,原始權(quán)重按如下公式更新:W'=W+ΔW。如下圖所示(為了簡(jiǎn)單起見,省略了偏置矢量)。

或者,我們可以保持權(quán)重更新矩陣分離,并按如下公式計(jì)算輸出:h=Wx+ΔWx:

圖片

其中 x 表示輸入,如下所示:

圖片

當(dāng)在神經(jīng)網(wǎng)絡(luò)中訓(xùn)練全連接(即 dense)層時(shí),如上所示,權(quán)重矩陣通常具有全秩,這意味著矩陣不具有任何線性相關(guān)(即冗余)的行或列。相比之下,與全秩相比,低秩意味著矩陣具有冗余的行或列。

因此,盡管預(yù)訓(xùn)練模型的權(quán)重是滿秩矩陣,但根據(jù) Aghajanyan 等人的說法,LoRA 的作者指出預(yù)訓(xùn)練的大型語言模型在適應(yīng)新任務(wù)時(shí)具有較低的內(nèi)在維度。

低內(nèi)在維度意味著數(shù)據(jù)可以由低維度空間有效地表示或近似,同時(shí)保留其大部分基本信息或結(jié)構(gòu)。換句話說,這意味著可以將適應(yīng)任務(wù)的新權(quán)重矩陣分解為低維(較小)矩陣,而不會(huì)丟失太多重要信息。

例如,假設(shè) ΔW 是 A×B 維權(quán)重矩陣的權(quán)重更新矩陣,這個(gè)權(quán)重更新矩陣可以分解為兩個(gè)較小的矩陣:ΔW=W_A W_B,其中 W_A 是 A×r 維矩陣,W_B 是 r×B 維矩陣。在這里,我們保持原始權(quán)重 W 凍結(jié),并且只訓(xùn)練新的矩陣 W_A 和 W_B。如下圖所示。

圖片

選擇秩

上圖中的 r 是超參數(shù),指定用于自適應(yīng)的低秩矩陣的秩。r 越小,低秩矩陣越簡(jiǎn)單,在自適應(yīng)過程中需要學(xué)習(xí)的參數(shù)越少,訓(xùn)練就更快,計(jì)算需求會(huì)相應(yīng)的減少。然而,r 變小的弊端是,低秩矩陣捕獲任務(wù)特定信息的能力降低。這可能導(dǎo)致較低的自適應(yīng)質(zhì)量,并且與較高的 r 相比,模型在新任務(wù)上可能表現(xiàn)不佳。總之,在 LoRA 中確定 r 的取值,需要在模型復(fù)雜性、自適應(yīng)能力和擬合不足或擬合過度的風(fēng)險(xiǎn)之間進(jìn)行權(quán)衡。因此,重要的是用不同的 r 值進(jìn)行實(shí)驗(yàn),以找到正確的平衡,從而在新任務(wù)中滿足所需的性能。

 LoRA 實(shí)戰(zhàn)

LoRA 的使用很直接,可以將其視為 LLM 中全連接層的前向傳遞修正版。偽代碼如下所示:

圖片

在上面的偽代碼中,alpha 是一個(gè)縮放因子,用于調(diào)整組合結(jié)果的大小(原始模型輸出加上低秩自適應(yīng))。這平衡了預(yù)訓(xùn)練模型的知識(shí)和新的任務(wù)特定適應(yīng) —— 默認(rèn)情況下,alpha 通常設(shè)置為 1。還要注意,當(dāng) W_A 被初始化為小的隨機(jī)權(quán)重時(shí),W_B 被初始化為 0,從而使得

圖片

,這意味著需要從原始權(quán)重開始訓(xùn)練。

參數(shù)效率

接下來說一說最棘手的問題:如果引入新的權(quán)重矩陣,參數(shù)如何才能有效?新的矩陣 W_A 和 W_B 可以非常小。例如,假設(shè) A=100,B=500,那么 ΔW 的大小為 100×500=50000。如果將其分解為兩個(gè)較小的矩陣,一個(gè) 100×5 維矩陣 W_A 和一個(gè) 5×500 維矩陣 W_B。這兩個(gè)矩陣總共只有 5×100+5×500=3000 個(gè)參數(shù)。

 減少推理開銷

在實(shí)踐中,如果在如上所示的訓(xùn)練后保持原始權(quán)重 W 以及矩陣 W_A 和 W_B 處于分離狀態(tài),推理過程中就會(huì)額外產(chǎn)生效率損失,因?yàn)橐肓祟~外的計(jì)算步驟。相反可以在訓(xùn)練后通過 W’=W+W_A?W_B 更新權(quán)重,這類似于前面提到的 W’=W+ΔW。

然而,保持權(quán)重矩陣 W_A 和 W_B 分離也可能有些優(yōu)勢(shì)。例如,假設(shè)希望保留預(yù)訓(xùn)練的模型作為各種客戶的基礎(chǔ)模型,并且希望從基礎(chǔ)模型開始為每個(gè)客戶創(chuàng)建一個(gè)微調(diào)的 LLM。在這種情況下,就不需要為每個(gè)客戶存儲(chǔ)完整的權(quán)重矩陣 W’。不然存儲(chǔ)模型的所有權(quán)重 W’=W+W_A W_B 對(duì)于 LLM 來說可能非常大,因?yàn)?LLM 通常具有數(shù)十億到數(shù)萬億的權(quán)重參數(shù)。因此,可以保留原始模型 W,只需要存儲(chǔ)新的輕量級(jí)矩陣 W_A 和 W_B。

用具體的數(shù)字來說明的話,一個(gè)完整的 7B LLaMA checkpoint 需要 23 GB 的存儲(chǔ)容量,而選擇 r=8 的秩,則 LoRA 權(quán)重可以小到 8 MB。

 實(shí)踐效果

LoRA 在實(shí)踐中有多好,與完全微調(diào)和其他參數(shù)有效方法相比如何?根據(jù) LoRA 的論文,在幾個(gè)特定任務(wù)的基準(zhǔn)測(cè)試中,使用 LoRA 的模型的建模性能略好于使用 Adapters、prompt tuning 或 prefix tuning 的模型。通常,LoRA 的性能甚至比微調(diào)所有層更好,如下面 LoRA 論文的注釋表所示。

圖片

值得注意的是,LoRA 與其他微調(diào)方法正交,這意味著它也可以與 Adapters 或 prefix tuning 相結(jié)合。

LoRA & LLaMA

現(xiàn)在,讓我們使用 LoRA 來微調(diào) Meta 提出的 LLaMA 模型。

除了用于訓(xùn)練和運(yùn)行 LLaMA 本身的代碼(使用原始的 Meta-LLaMA 權(quán)重)外,還包含用于使用 LLaMA Adapter 和 LoRA 微調(diào) LLaMA 的代碼。

作者建議使用以下操作方法文件:

  • 下載預(yù)訓(xùn)練的權(quán)重:https://github.com/Lightning-AI/lit-llama/blob/main/howto/download_weights.md
  • 使用 LoRA 進(jìn)行微調(diào):https://github.com/Lightning-AI/lit-llama/blob/main/howto/finetune_lora.md
  • 使用適配器進(jìn)行微調(diào):https://github.com/Lightning-AI/lit-llama/blob/main/howto/finetune_adapter.md(可選,用于比較研究)

下一節(jié)將比較 7B LLaMA 基礎(chǔ)模型與使用 LoRA 和 LLaMA Adapter 微調(diào)的 7B LLaMA 基礎(chǔ)模型。(請(qǐng)注意,需要具有至少 24 GB RAM 的 GPU)。

計(jì)算性能基準(zhǔn)

本節(jié)中,作者將比較 LLaMA 7B 基礎(chǔ)模型與使用 LoRA 和 LLaMA Adapter 微調(diào)的基礎(chǔ)模型的計(jì)算性能。

微調(diào)數(shù)據(jù)集是 Alpaca 52k 指令數(shù)據(jù)集,其結(jié)構(gòu)如下:

圖片

數(shù)據(jù)集是按照 Self-Instruct 論文中描述的方法生成的,由 49759 個(gè)訓(xùn)練樣本和 2000 個(gè)驗(yàn)證樣本組成。Self-Instruct 的流程可總結(jié)為 4 個(gè)步驟:

  • 種子任務(wù)池,包含一組人工編寫的指令(本例中為 175 條)和樣本指令;
  • 使用預(yù)訓(xùn)練的 LLM(如 GPT-3)來確定任務(wù)類別;
  • 給定新指令,讓預(yù)訓(xùn)練的 LLM 生成響應(yīng)結(jié)果;
  • 在將響應(yīng)結(jié)果添加到任務(wù)池之前,先收集、剪枝和篩選響應(yīng)結(jié)果。

圖片

Alpaca 52k 數(shù)據(jù)集是使用上述 Self-Instruct 程序收集的。但是,也可以使用(或?qū)⑵渑c)替代數(shù)據(jù)集進(jìn)行比較。例如,一個(gè)有趣的候選數(shù)據(jù)集是最近發(fā)布的開源 databricks-doolly-15k 數(shù)據(jù)集,該數(shù)據(jù)集包含 databricks 員工編寫的約 15k 條指令 / 響應(yīng)微調(diào)記錄。Lit LLaMA 存儲(chǔ)庫(kù)包含一個(gè)數(shù)據(jù)集制備腳本,可以選擇使用 Dolly 15k 數(shù)據(jù)集。

給定以下超參數(shù)設(shè)置(塊大小、批大小和 LoRA 的 r),Adapter 和 LoRA 都可以以 bfloat-16 的混合精度,在具有 24 Gb RAM 的單個(gè) GPU 上微調(diào) 7B 參數(shù)的 LLaMA 基本模型。

LoRA

圖片

LaMA Adapter

圖片

如果代碼將來發(fā)生變化,GitHub 上會(huì)同步更新代碼(帶有超參數(shù)設(shè)置)。

Adapter 在 A100 上使用了大約 22 Gb 的空間,并在 162 分鐘內(nèi)完成了 62400 次迭代。同樣的迭代次數(shù)下,LoRA 使用了 21 Gb 的內(nèi)存,在 192 分鐘內(nèi)完成。總之,同樣基于 Lit-LLaMA 的 Adapter 和 LoRA 使用的 RAM 數(shù)量大致相同,訓(xùn)練時(shí)間大致相同。(請(qǐng)注意,這是在單個(gè) GPU 上進(jìn)行的,但如果有多個(gè) GPU,只需將設(shè)備參數(shù)更改為 > 1 即可利用額外的加速!)相比之下,完全微調(diào)(LLaMA 7B 由 32 個(gè) Transformer 塊和 3 個(gè)全連接的輸出層組成)需要至少 2 個(gè)具有至少 30Gb 的 GPU 和完全分片訓(xùn)練來分配權(quán)重。或者,可以使用 4 個(gè) GPU,每個(gè) GPU 的最大內(nèi)存使用量為 22 Gb。在 4 個(gè) GPU 上進(jìn)行訓(xùn)練,訓(xùn)練耗時(shí) 1956 分鐘。在單個(gè) GPU 上至少需要 6000 分鐘,這將比參數(shù)高效的 LLaMA Adapter 或 LoRA 代價(jià)昂貴 30-40 倍。

接下來,本文將介紹應(yīng)用不同微調(diào)策略后的模型輸出。

評(píng)估建模性能

有幾種度量標(biāo)準(zhǔn)可用于評(píng)估 LLM 生成的文本。例如,困惑度、BLEU 和 ROUGE 分?jǐn)?shù)是自然語言處理中用來評(píng)估 LLM 在各種任務(wù)中的表現(xiàn)的一些最常見的評(píng)估指標(biāo)。然而,所有這些指標(biāo)都有很大的缺點(diǎn),人工評(píng)估仍然是黃金標(biāo)準(zhǔn) —— 人工評(píng)估的缺點(diǎn)是創(chuàng)建成本高,難以自動(dòng)化。簡(jiǎn)單起見,本文只關(guān)注定性比較,看看各種模型產(chǎn)生的一些輸出。

為了對(duì)模型進(jìn)行定性比較,本文將使用 “請(qǐng)解釋權(quán)重衰減是如何工作的” 作為 prompt。

基準(zhǔn)模型

圖片

請(qǐng)解釋一下權(quán)重衰減是如何工作的…… 以及為什么它有時(shí)看起來有效,有時(shí)無效!

最簡(jiǎn)單地說,權(quán)重衰減從模型中刪除特征(作為特征重要性的函數(shù)),它也被稱為正則化。

推理時(shí)間 1:4.18 秒,11.95 個(gè) token / 秒

正如我們所看到的,模型開始通過附加 “… 以及為什么它有時(shí)看起來有效,有時(shí)不起作用!” 來補(bǔ)全 prompt。這是因?yàn)榛A(chǔ)模型只在下一個(gè)單詞預(yù)測(cè)任務(wù)中進(jìn)行了訓(xùn)練,沒有經(jīng)過專門的訓(xùn)練來處理指令。盡管如此,它試圖在下面進(jìn)一步解釋。這種解釋對(duì)正則化做出了一些正確的解釋,但它并沒有真正捕捉到權(quán)重衰減的關(guān)鍵機(jī)制。

LLaMA-Adapter

圖片

權(quán)重衰減是一種懲罰詞條字?jǐn)?shù)的方法。通過選擇單詞較少的句子,模型更有可能選擇那些可能提供重要信息的句子。

推理時(shí)間:總計(jì) 7.04 秒,14.21 個(gè) tokens/sec。

使用的內(nèi)存:13.56 GB。

這個(gè)解釋在語法上是合理的,但也不一定是我們想要的。

LoRA

圖片

權(quán)重衰減是機(jī)器學(xué)習(xí)模型中用于減少過擬合的算法參數(shù)。這是一個(gè)調(diào)整模型權(quán)重的過程,以減少模型中不太重要的特征的影響并防止過擬合。權(quán)重衰減是通過向權(quán)重添加少量噪聲來減少模型對(duì)訓(xùn)練數(shù)據(jù)的影響。這個(gè)過程鼓勵(lì)模型更多地關(guān)注對(duì)預(yù)測(cè)任務(wù)更重要的特征。

推理時(shí)間:總計(jì) 3.25 秒,30.76 個(gè) tokens/sec。

使用的內(nèi)存:27.65 GB。

可以看到離期望的答案越來越近了;放到廣義線性模型中,這種解釋確實(shí)有意義,在廣義線性模型中,會(huì)強(qiáng)迫模型學(xué)習(xí)與輸入特征相乘結(jié)果較小的權(quán)重參數(shù)。在神經(jīng)網(wǎng)絡(luò)中,這通常會(huì)應(yīng)用于模型中的所有權(quán)重參數(shù)。

上面的 LoRA 方法目前來說使用的內(nèi)存最多。然而,如前所述,可以通過將 LoRA 權(quán)重與預(yù)訓(xùn)練的模型權(quán)重合并來減少這種內(nèi)存使用。

由于評(píng)估 LLM 本身就是一個(gè)大課題,因此這種定性概述只能反應(yīng)每個(gè)模型能力的一小部分。但這里的要點(diǎn)是,LoRA 可以用于以相對(duì)經(jīng)濟(jì)高效的方式在指令數(shù)據(jù)集上微調(diào) LLM。

結(jié)論

本文討論了低秩自適應(yīng)(LoRA),這是一種參數(shù)完全微調(diào)的有效替代方案。使用 LoRA,可以在幾個(gè)小時(shí)內(nèi)在單個(gè) GPU 上對(duì) LLaMA 等相對(duì)較大的模型進(jìn)行微調(diào),這使得它對(duì)那些不想在 GPU 資源上花費(fèi)數(shù)千美元的人特別有吸引力。LoRA 的特別之處在于,可以選擇性地將新的 LoRA 權(quán)重矩陣與原始的預(yù)訓(xùn)練權(quán)重合并,這樣在推理過程中就不會(huì)產(chǎn)生額外的開銷或復(fù)雜性。

隨著越來越多的 ChatGPT 或 GPT-4 開源替代品的出現(xiàn),在特定的目標(biāo)數(shù)據(jù)集或目標(biāo)上微調(diào)和定制這些 LLM 將在各個(gè)研究領(lǐng)域和行業(yè)變得越來越有吸引力。而 LoRA 等參數(shù)有效的微調(diào)技術(shù)使微調(diào)更具資源效率和可訪問性。Lit LLaMA 存儲(chǔ)庫(kù)中提供了諸如 LoRA 和 LLaMA Adapter 之類的參數(shù)高效微調(diào)技術(shù)。

責(zé)任編輯:張燕妮 來源: 機(jī)器之心
相關(guān)推薦

2021-07-01 07:34:09

LinuxIO模型

2023-08-08 12:55:30

強(qiáng)化學(xué)習(xí)訓(xùn)練

2019-11-12 13:30:07

開源技術(shù) 軟件

2024-11-01 12:10:57

2024-10-08 15:00:00

2013-03-26 10:10:38

服務(wù)器RubyGo

2014-11-03 18:22:53

2012-12-21 09:31:52

Windows 8

2024-10-31 10:41:01

2023-03-14 13:45:14

模型AI

2023-10-26 18:22:16

前端CSSFlex 布局

2023-06-08 11:27:10

模型AI

2023-09-18 11:25:00

2023-06-07 08:22:59

LLM微調(diào)技術(shù)

2024-06-06 08:25:30

2020-05-21 09:17:51

Vue 3Vue代碼

2015-08-24 14:36:53

2018-08-30 17:28:52

TCP三次握手HTTP

2024-04-30 10:40:11

2023-08-01 13:31:18

模型Alpacaicuna
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产电影一区二区三区爱妃记 | 久久精品视频免费观看 | 久久久久久国产精品免费免费狐狸 | 99精品视频免费在线观看 | 看一级毛片| 欧美极品一区二区 | 丁香综合| 日韩一级黄色毛片 | 精品福利在线 | www.亚洲一区二区 | 成人免费视频网 | 精品久久久久久久久久久久久 | a免费视频 | 日韩第一页 | a级片在线观看 | 欧美日韩一卡二卡 | 久久久久国产视频 | 日韩一区二区三区视频在线播放 | 国产激情网 | 精品久久精品 | 成人免费看片又大又黄 | 粉嫩一区二区三区四区公司1 | 成人高清在线视频 | 免费视频久久 | 日韩欧美天堂 | 天天久 | 黄色av网站在线观看 | 日韩成人在线看 | 在线啊v| 亚洲a级| 亚洲精品久久久久久一区二区 | 一本大道久久a久久精二百 国产成人免费在线 | av在线免费观看不卡 | 一级做a | 青青草原精品99久久精品66 | 欧美 日韩 国产 成人 | 国产伦一区二区三区久久 | 99这里只有精品 | 久久国产精品一区二区三区 | 日韩精品视频在线 | 亚洲电影一级片 |