不是大模型全局微調(diào)不起,只是LoRA更有性價比,教程已經(jīng)準(zhǔn)備好了
增加數(shù)據(jù)量和模型的參數(shù)量是公認的提升神經(jīng)網(wǎng)絡(luò)性能最直接的方法。目前主流的大模型的參數(shù)量已擴展至千億級別,「大模型」越來越大的趨勢還將愈演愈烈。
這種趨勢帶來了多方面的算力挑戰(zhàn)。想要微調(diào)參數(shù)量達千億級別的大語言模型,不僅訓(xùn)練時間長,還需占用大量高性能的內(nèi)存資源。
為了讓大模型微調(diào)的成本「打下來」,微軟的研究人員開發(fā)了低秩自適應(yīng)(LoRA)技術(shù)。LoRA 的精妙之處在于,它相當(dāng)于在原有大模型的基礎(chǔ)上增加了一個可拆卸的插件,模型主體保持不變。LoRA 隨插隨用,輕巧方便。
對于高效微調(diào)出一個定制版的大語言模型來說,LoRA 是最為廣泛運用的方法之一,同時也是最有效的方法之一。
如果你對開源 LLM 感興趣,LoRA 是值得學(xué)習(xí)的基本技術(shù),不容錯過。
來自威斯康星大學(xué)麥迪遜分校的數(shù)據(jù)科學(xué)教授 Sebastian Raschka 也對 LoRA 進行了全方位探索。在機器學(xué)習(xí)領(lǐng)域探索多年,他非常熱衷于拆解復(fù)雜的技術(shù)概念。在經(jīng)歷數(shù)百次實驗后,Sebastian Raschka 總結(jié)出了使用 LoRA 微調(diào)大模型的經(jīng)驗,并發(fā)布在 Ahead of AI 雜志上。
在保留作者原意的基礎(chǔ)上,機器之心對這篇文章進行了編譯:
上個月,我分享了一篇有關(guān) LoRA 實驗的文章,主要基于我和同事在 Lightning AI 共同維護的開源 Lit-GPT 庫,討論了我從實驗中得出的主要經(jīng)驗和教訓(xùn)。此外,我還將解答一些與 LoRA 技術(shù)相關(guān)的常見問題。如果你對于微調(diào)定制化的大語言模型感興趣,我希望這些見解能夠幫助你快速起步。
簡而言之,我在這篇文章中討論的主要要點包含:
- 雖然 LLM 訓(xùn)練(或者說在 GPU 上訓(xùn)練出的所有模型)有著不可避免的隨機性,但多 lun 訓(xùn)練的結(jié)果仍非常一致。
- 如果受 GPU 內(nèi)存的限制,QLoRA 提供了一種高性價比的折衷方案。它以運行時間增長 39% 的代價,節(jié)省了 33% 的內(nèi)存。
- 在微調(diào) LLM 時,優(yōu)化器的選擇不是影響結(jié)果的主要因素。無論是 AdamW、具有調(diào)度器 scheduler 的 SGD ,還是具有 scheduler 的 AdamW,對結(jié)果的影響都微乎其微。
- 雖然 Adam 經(jīng)常被認為是需要大量內(nèi)存的優(yōu)化器,因為它為每個模型參數(shù)引入了兩個新參數(shù),但這并不會顯著影響 LLM 的峰值內(nèi)存需求。這是因為大部分內(nèi)存將被分配用于大型矩陣的乘法,而不是用來保留額外的參數(shù)。
- 對于靜態(tài)數(shù)據(jù)集,像多輪訓(xùn)練中多次迭代可能效果不佳。這通常會導(dǎo)致過擬和,使訓(xùn)練結(jié)果惡化。
- 如果要結(jié)合 LoRA,確保它在所有層上應(yīng)用,而不僅僅是 Key 和 Value 矩陣中,這樣才能最大限度地提升模型的性能。
- 調(diào)整 LoRA rank 和選擇合適的 α 值至關(guān)重要。提供一個小技巧,試試把 α 值設(shè)置成 rank 值的兩倍。
- 14GB RAM 的單個 GPU 能夠在幾個小時內(nèi)高效地微調(diào)參數(shù)規(guī)模達 70 億的大模型。對于靜態(tài)數(shù)據(jù)集,想要讓 LLM 強化成「全能選手」,在所有基線任務(wù)中都表現(xiàn)優(yōu)異是不可能完成的。想要解決這個問題需要多樣化的數(shù)據(jù)源,或者使用 LoRA 以外的技術(shù)。
另外,我將回答與 LoRA 有關(guān)的十個常見問題。
如果讀者有興趣,我會再寫一篇對 LoRA 更全面的介紹,包含從頭開始實現(xiàn) LoRA 的詳細代碼。今天本篇文章主要分享的是 LoRA 使用中的關(guān)鍵問題。在正式開始之前,我們先來補充一點基礎(chǔ)知識。
LoRA 簡介
由于 GPU 內(nèi)存的限制,在訓(xùn)練過程中更新模型權(quán)重成本高昂。
例如,假設(shè)我們有一個 7B 參數(shù)的語言模型,用一個權(quán)重矩陣 W 表示。在反向傳播期間,模型需要學(xué)習(xí)一個 ΔW 矩陣,旨在更新原始權(quán)重,讓損失函數(shù)值最小。
權(quán)重更新如下:W_updated = W + ΔW。
如果權(quán)重矩陣 W 包含 7B 個參數(shù),則權(quán)重更新矩陣 ΔW 也包含 7B 個參數(shù),計算矩陣 ΔW 非常耗費計算和內(nèi)存。
由 Edward Hu 等人提出的 LoRA 將權(quán)重變化的部分 ΔW 分解為低秩表示。確切地說,它不需要顯示計算 ΔW。相反,LoRA 在訓(xùn)練期間學(xué)習(xí) ΔW 的分解表示,如下圖所示,這就是 LoRA 節(jié)省計算資源的奧秘。
如上所示,ΔW 的分解意味著我們需要用兩個較小的 LoRA 矩陣 A 和 B 來表示較大的矩陣 ΔW。如果 A 的行數(shù)與 ΔW 相同,B 的列數(shù)與 ΔW 相同,我們可以將以上的分解記為 ΔW = AB。(AB 是矩陣 A 和 B 之間的矩陣乘法結(jié)果。)
這種方法節(jié)省了多少內(nèi)存呢?還需要取決于秩 r,秩 r 是一個超參數(shù)。例如,如果 ΔW 有 10,000 行和 20,000 列,則需存儲 200,000,000 個參數(shù)。如果我們選擇 r=8 的 A 和 B,則 A 有 10,000 行和 8 列,B 有 8 行和 20,000 列,即 10,000×8 + 8×20,000 = 240,000 個參數(shù),比 200,000,000 個參數(shù)少約 830 倍。
當(dāng)然,A 和 B 無法捕捉到 ΔW 涵蓋的所有信息,但這是 LoRA 的設(shè)計所決定的。在使用 LoRA 時,我們假設(shè)模型 W 是一個具有全秩的大矩陣,以收集預(yù)訓(xùn)練數(shù)據(jù)集中的所有知識。當(dāng)我們微調(diào) LLM 時,不需要更新所有權(quán)重,只需要更新比 ΔW 更少的權(quán)重來捕捉核心信息,低秩更新就是這么通過 AB 矩陣實現(xiàn)的。
LoRA 的一致性
雖然 LLM,或者說在 GPU 上被訓(xùn)練的模型的隨機性不可避免,但是采用 LoRA 進行多次實驗,LLM 最終的基準(zhǔn)結(jié)果在不同測試集中都表現(xiàn)出了驚人的一致性。對于進行其他比較研究,這是一個很好的基礎(chǔ)。
請注意,這些結(jié)果是在默認設(shè)置下,使用較小的值 r=8 獲得的。實驗細節(jié)可以在我的另一篇文章中找到。
文章鏈接:https://lightning.ai/pages/community/lora-insights/
QLoRA 計算 - 內(nèi)存權(quán)衡
QLoRA 是由 Tim Dettmers 等人提出的量化 LoRA 的縮寫。QLoRA 是一種在微調(diào)過程中進一步減少內(nèi)存占用的技術(shù)。在反向傳播過程中,QLoRA 將預(yù)訓(xùn)練的權(quán)重量化為 4-bit,并使用分頁優(yōu)化器來處理內(nèi)存峰值。
我發(fā)現(xiàn)使用 LoRA 時可以節(jié)省 33% 的 GPU 內(nèi)存。然而,由于 QLoRA 中預(yù)訓(xùn)練模型權(quán)重的額外量化和去量化,訓(xùn)練時間增加了 39%。
默認 LoRA 具有 16 bit 浮點精度:
- 訓(xùn)練時長:1.85 小時
- 內(nèi)存占用:21.33GB
具有 4 位正常浮點數(shù)的 QLoRA
- 訓(xùn)練時長為:2.79h
- 內(nèi)存占用為:14.18GB
此外,我發(fā)現(xiàn)模型的性能幾乎不受影響,這說明 QLoRA 可以作為 LoRA 訓(xùn)練的替代方案,更進一步解決常見 GPU 內(nèi)存瓶頸問題。
學(xué)習(xí)率調(diào)度器
學(xué)習(xí)率調(diào)度器會在整個訓(xùn)練過程中降低學(xué)習(xí)率,從而優(yōu)化模型的收斂程度,避免 loss 值過大。
余弦退火(Cosine annealing)是一種遵循余弦曲線調(diào)整學(xué)習(xí)率的調(diào)度器。它以較高的學(xué)習(xí)率作為起點,然后平滑下降,以類似余弦的模式逐漸接近 0。一種常見的余弦退火變體是半周期變體,在訓(xùn)練過程中只完成半個余弦周期,如下圖所示。
在實驗中,我在 LoRA 微調(diào)腳本中添加了一個余弦退火調(diào)度器,它顯著地提高了 SGD 的性能。但是它對 Adam 和 AdamW 優(yōu)化器的增益較小,添加之后幾乎沒有什么變化。
在下一節(jié)中,將討論 SGD 相對于 Adam 的潛在優(yōu)勢。
Adam vs SGD
Adam 和 AdamW 優(yōu)化器在深度學(xué)習(xí)中很受歡迎。如果我們正在訓(xùn)練一個 7B 參數(shù)的模型,那使用 Adam 就能夠在訓(xùn)練的過程中跟蹤額外的 14B 參數(shù),相當(dāng)于在其他條件不變的情況下,模型的參數(shù)量翻了一番。
SGD 不能在訓(xùn)練過程中跟蹤附加的參數(shù),所以相比于 Adam,SGD 在峰值內(nèi)存方面有什么優(yōu)勢呢?
在我的實驗中,使用 AdamW 和 LoRA(默認設(shè)置 r=8)訓(xùn)練一個 7B 參數(shù)的 Llama 2 模型需要 14.18 GB 的 GPU 內(nèi)存。用 SGD 訓(xùn)練同一模型需要 14.15 GB 的 GPU 內(nèi)存。相比于 AdamW,SGD 只節(jié)省了 0.03 GB 的內(nèi)存,作用微乎其微。
為什么只節(jié)省了這么一點內(nèi)存呢?這是因為使用 LoRA 時,LoRA 已經(jīng)大大降低了模型的參數(shù)量。例如,如果 r=8,在 7B 的 Llama 2 模型的所有 6,738,415,616 個參數(shù),只有 4,194,304 個可訓(xùn)練的 LoRA 參數(shù)。
只看數(shù)字,4,194,304 個參數(shù)可能還是很多,但是其實這么多參數(shù)僅占用 4,194,304 × 2 × 16 位 = 134.22 兆位 = 16.78 兆字節(jié)。(我們觀察到了存在 0.03 Gb = 30 Mb 的差異,這是由于在存儲和復(fù)制優(yōu)化器狀態(tài)時,存在額外的開銷。) 2 代表 Adam 存儲的額外參數(shù)的數(shù)量,而 16 位指的是模型權(quán)重的默認精度。
如果我們把 LoRA 矩陣的 r 從 8 拓展到 256,那么 SGD 相比 AdamW 的優(yōu)勢就會顯現(xiàn):
- 使用 AdamW 將占用內(nèi)存 17.86 GB
- 使用 SGD 將占用 14.46 GB
因此,當(dāng)矩陣規(guī)模擴大時,SGD 節(jié)省出的內(nèi)存將發(fā)揮重要作用。由于 SGD 不需要存儲額外的優(yōu)化器參數(shù),因此在處理大模型時,SGD 相比 Adam 等其他優(yōu)化器可以節(jié)省更多的內(nèi)存。這對于內(nèi)存有限的訓(xùn)練任務(wù)來說是非常重要的優(yōu)勢。
迭代訓(xùn)練
在傳統(tǒng)的深度學(xué)習(xí)中,我們經(jīng)常對訓(xùn)練集進行多次迭代,每次迭代稱為一個 epoch。例如,在訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)時,通常會運行數(shù)百個 epoch。那么,多輪迭代訓(xùn)練對于指令微調(diào)也有效果嗎?
答案是否定的,當(dāng)我將數(shù)據(jù)量為 50k 的 Alpaca 示例指令微調(diào)數(shù)據(jù)集的迭代次數(shù)增加一倍,模型的性能下降了。
因此,我得出的結(jié)論是,多輪迭代可能不利于指令微調(diào)。我在 1k 的示例 LIMA 指令微調(diào)集中也觀察到了同樣的狀況。模型性能的下降可能是由過擬合造成的,具體原因仍需進一步探索。
在更多層中使用 LoRA
下表顯示了 LoRA 僅對選定矩陣(即每個 Transformer 中的 Key 和 Value 矩陣)起效的實驗。此外,我們還可以在查詢權(quán)重矩陣、投影層、多頭注意力模塊之間的其他線性層以及輸出層啟用 LoRA。
如果我們在這些附加層上加入 LoRA,那么對于 7B 的 Llama 2 模型,可訓(xùn)練參數(shù)的數(shù)量將從 4,194,304 增加到 20,277,248,增加五倍。在更多層應(yīng)用 LoRA,能夠顯著提高模型性能,但也對內(nèi)存空間的需求量更高。
此外,我只對(1)僅啟用查詢和權(quán)重矩陣的 LoRA,(2)啟用所有層的 LoRA,這兩種設(shè)置進行了探索,在更多層的組合中使用 LoRA 會產(chǎn)生何種效果,值得深入研究。如果能知道在投影層使用 LoRA 對訓(xùn)練結(jié)果是否有益,那么我們就可以更好地優(yōu)化模型,并提高其性能。
平衡 LoRA 超參數(shù):R 和 Alpha
正如提出 LoRA 的論文中所述,LoRA 引入了一個額外的擴展系數(shù)。這個系數(shù)用于在前向傳播過程中將 LoRA 權(quán)重應(yīng)用于預(yù)訓(xùn)練之中。擴展涉及之前討論過的秩參數(shù) r,以及另一個超參數(shù) α(alpha),其應(yīng)用如下:
正如上圖中的公式所示,LoRA 權(quán)重的值越大,影響就越大。
在之前的實驗中,我采用的參數(shù)是 r=8,alpha=16,這導(dǎo)致了 2 倍的擴展。在用 LoRA 為大模型減重時,將 alpha 設(shè)置為 r 的兩倍是一種常見的經(jīng)驗法則。但我很好奇這條規(guī)則對于較大的 r 值是否仍然適用。
我還嘗試了 r=32, r=64, r=128, and r=512,但為了清晰起見省略了此過程,不過 r=256 時,的確效果最佳。事實上,選擇 alpha=2r 確實提供了最優(yōu)結(jié)果。
在單個 GPU 上訓(xùn)練 7B 參數(shù)模型
LoRA 允許我們在單個 GPU 上微調(diào) 7B 參數(shù)規(guī)模的大語言模型。在這個特定情況下,采用最佳設(shè)置過的 QLoRA(r=256,alpha=512),使用 AdamW 優(yōu)化器處理 17.86 GB(50k 訓(xùn)練樣例)的數(shù)據(jù)在 A100 上大約需要 3 個小時(此處為 Alpaca 數(shù)據(jù)集)。
在本文的其余部分中,我將回答你可能遇到的其他問題。
10 個問題
Q1: 數(shù)據(jù)集有多重要?
數(shù)據(jù)集至關(guān)重要。我使用的是包含 50k 訓(xùn)練示例的 Alpaca 數(shù)據(jù)集。我選擇 Alpaca 是因為它非常流行。由于本文篇幅已經(jīng)很長,所以在更多數(shù)據(jù)集上的測試結(jié)果本文暫不討論。
Alpaca 是一個合成數(shù)據(jù)集,按照如今的標(biāo)準(zhǔn),它可以已經(jīng)有點落伍了。數(shù)據(jù)質(zhì)量非常關(guān)鍵。例如,在六月份,我在一篇文章中討論了 LIMA 數(shù)據(jù)集,這是一個僅由一千個示例組成的精選數(shù)據(jù)集。
文章鏈接:https://magazine.sebastianraschka.com/p/ahead-of-ai-9-llm-tuning-and-dataset
正如提出 LIMA 的論文的標(biāo)題所說:對于對齊來說,少即是多,雖然 LIMA 的數(shù)據(jù)量少于 Alpaca,但根據(jù) LIMA 微調(diào)出的 65B Llama 模型優(yōu)于 Alpaca 的結(jié)果。采用同樣的配置 (r=256, alpha=512) ,在 LIMA 上,我獲得了與數(shù)據(jù)量級是其 50 倍大的 Alpaca 類似的模型表現(xiàn)。
Q2:LoRA 是否適用于域自適應(yīng)?
對于這個問題,我目前還沒有一個明確的答案。根據(jù)經(jīng)驗,知識通常是從預(yù)訓(xùn)練數(shù)據(jù)集中提取的。通常情況下,語言模型通常會從預(yù)訓(xùn)練數(shù)據(jù)集中吸收知識,而指令微調(diào)的作用主要是幫助 LLM 更好地遵循指令。
既然算力緊張是限制大語言模型訓(xùn)練的關(guān)鍵因素,LoRA 也可以被用于在特定領(lǐng)域的專用數(shù)據(jù)集,進一步預(yù)訓(xùn)練現(xiàn)有的預(yù)訓(xùn)練 LLM。
另外,值得注意的是,我的實驗中包括兩個算術(shù)基準(zhǔn)測試。在這兩個基準(zhǔn)測試中,使用 LoRA 進行微調(diào)的模型表現(xiàn)明顯比預(yù)訓(xùn)練的基礎(chǔ)模型差。我推測這是由于 Alpaca 數(shù)據(jù)集沒有缺少相應(yīng)的算術(shù)示例,導(dǎo)致模型「忘記了」算術(shù)知識。我們還需要進一步的研究來確定模型是「忘記」了算術(shù)知識,還是它對相應(yīng)指令停止了響應(yīng)。然而,在這里可以得出一條結(jié)論:「在微調(diào) LLM 時,讓數(shù)據(jù)集包含我們所關(guān)心的每個任務(wù)的示例是一個好主意?!?/span>
Q3: 如何確定最佳 r 值?
對于這個問題,目前我還沒有比較好的解決方法。最佳 r 值的確定,需要根據(jù)每個 LLM 和每個數(shù)據(jù)集的具體情況,具體問題具體分析。我推測 r 值過大將導(dǎo)致過擬和,而 r 值過小,模型可能無法捕捉數(shù)據(jù)集中多樣化的任務(wù)。我懷疑數(shù)據(jù)集中的任務(wù)類型越多,所需 r 值就越大。例如,如果我僅需要模型執(zhí)行基本的兩位數(shù)算術(shù)運算,那么一個很小的 r 值可能就已經(jīng)滿足需要了。然而,這只是我的假設(shè),需要進一步的研究來驗證。
Q4:LoRA 是否需要為所有層啟用?
我只對(1)僅啟用查詢和權(quán)重矩陣的 LoRA,(2)啟用所有層的 LoRA,這兩種設(shè)置進行了探索。在更多層的組合中使用 LoRA 會產(chǎn)生何種效果,值得深入研究。如果能知道在投影層使用 LoRA 對訓(xùn)練結(jié)果是否有益,那么我們就可以更好地優(yōu)化模型,并提高其性能。
如果我們考慮各種設(shè)置 (lora_query, lora_key, lora_value, lora_projection, lora_mlp, lora_head),就有 64 種組合可供探索。
Q5: 如何避免過擬和?
一般來說,較大的 r 更可能導(dǎo)致過擬合,因為 r 決定著可訓(xùn)練參數(shù)的數(shù)量。如果模型存在過擬合問題,首先要考慮降低 r 值或增加數(shù)據(jù)集大小。此外,可以嘗試增加 AdamW 或 SGD 優(yōu)化器的權(quán)重衰減率,或者增加 LoRA 層的 dropout 值。
我在實驗中沒有探索過 LoRA 的 dropout 參數(shù)(我使用了 0.05 的固定 dropout 率),LoRA 的 dropout 參數(shù)也是一個有研究價值的問題。
Q6: 還有其他優(yōu)化器作為選擇嗎?
今年五月發(fā)布的 Sophia 值得嘗試,Sophia 是一種用于語言模型預(yù)訓(xùn)練的可拓展的隨機二階優(yōu)化器。根據(jù)以下這篇論文:《Sophia: A Scalable Stochastic Second-order Optimizer for Language Model Pre-training》,與 Adam 相比,Sophia 的速度快兩倍,還能獲得更優(yōu)的性能。簡而言之,Sophia 和 Adam 一樣,都通過梯度曲率而不是梯度方差來實現(xiàn)歸一化。
論文鏈接:https://arxiv.org/abs/2305.14342
Q7: 還有影響內(nèi)存使用的其他因素嗎?
除了精度和量化設(shè)置、模型大小、batch size 和可訓(xùn)練 LoRA 參數(shù)數(shù)量之外,數(shù)據(jù)集也會影響內(nèi)存使用。
Llama 2 的 塊大小為 4048 個 token,這代表著 Llama 可以一次處理包含 4048 個 token 的序列。如果對后來的 token 加上掩碼,訓(xùn)練序列就將變短,可以節(jié)省大量的內(nèi)存。例如 Alpaca 數(shù)據(jù)集相對較小,最長的序列長度為 1304 個 token。
當(dāng)我嘗試使用最長序列長度達 2048 個 token 的其他數(shù)據(jù)集時,內(nèi)存使用量會從 17.86 GB 飆升至 26.96 GB。
Q8:與全微調(diào)、RLHF 相比,LoRA 有哪些優(yōu)勢?
我沒有進行 RLHF 實驗,但我嘗試了全微調(diào)。全微調(diào)至少需要 2 個 GPU,每個 GPU 占用 36.66 GB,花費了 3.5 個小時才完成微調(diào)。然而,基線測試結(jié)果不好,可能是過擬合或次超優(yōu)參數(shù)導(dǎo)致的。
Q9:LoRA 的權(quán)重可以組合嗎?
答案是肯定的。在訓(xùn)練期間,我們將 LoRA 權(quán)重和預(yù)訓(xùn)練權(quán)重分開,并在每次前向傳播時加入。
假設(shè)在現(xiàn)實世界中,存在一個具有多組 LoRA 權(quán)重的應(yīng)用程序,每組權(quán)重對應(yīng)著一個應(yīng)用的用戶,那么單獨儲存這些權(quán)重,用來節(jié)省磁盤空間是很有意義的。同時,在訓(xùn)練后也可以合并預(yù)訓(xùn)練權(quán)重與 LoRA 權(quán)重,以創(chuàng)建一個單一模型。這樣,我們就不必在每次前向傳遞中應(yīng)用 LoRA 權(quán)重。
weight += (lora_B @ lora_A) * scaling
我們可以采用如上所示的方法更新權(quán)重,并保存合并的權(quán)重。
同樣,我們可以繼續(xù)添加很多個 LoRA 權(quán)重集:
weight += (lora_B_set1 @ lora_A_set1) * scaling_set1
weight += (lora_B_set2 @ lora_A_set2) * scaling_set2
weight += (lora_B_set3 @ lora_A_set3) * scaling_set3
...
我還沒有做實驗來評估這種方法,但通過 Lit-GPT 中提供的 scripts/merge_lora.py 腳本已經(jīng)可以實現(xiàn)。
腳本鏈接:https://github.com/Lightning-AI/lit-gpt/blob/main/scripts/merge_lora.py
Q10:逐層最優(yōu)秩自適應(yīng)表現(xiàn)如何?
為了簡單起見,在深度神經(jīng)網(wǎng)絡(luò)中我們通常將為每層設(shè)置相同的學(xué)習(xí)率。學(xué)習(xí)率是我們需要優(yōu)化的超參數(shù),更進一步,我們可以為每一層選擇不同的學(xué)習(xí)率(在 PyTorch 中,這不是非常復(fù)雜的事)。
然而在實踐中很少這樣做,因為這種方法增加了額外的成本,并且在深度神經(jīng)網(wǎng)絡(luò)中還有很多其他參數(shù)可調(diào)。類似于為不同層選擇不同的學(xué)習(xí)率,我們也可以為不同層選擇不同的 LoRA r 值。我還沒有動手嘗試,但有一篇詳細介紹這種方法的文獻:《LLM Optimization: Layer-wise Optimal Rank Adaptation (LORA)》。理論上,這種方法聽起來很有希望,為優(yōu)化超參數(shù)提供了大量的拓展空間。
論文鏈接:https://medium.com/@tom_21755/llm-optimization-layer-wise-optimal-rank-adaptation-lora-1444dfbc8e6a