一文讀遍 LoRA 家族:大語言模型高效訓練的"秘密武器"
在大語言模型(LLMs)的訓練領域,Low - Rank Adaptation(LoRA)技術堪稱一項重大突破。它就像給模型訓練開啟了一條 “高速通道”,讓我們能更高效地為特定任務訓練大語言模型。如今,LoRA 在眾多應用場景中廣泛使用,并且引發(fā)了一系列改進研究,催生出了許多變體,這些變體從不同角度優(yōu)化 LoRA,提升訓練速度、性能,或者兩者兼得。今天,咱們就來深入了解一下 LoRA 及其家族成員的奧秘。
1. LoRA:基礎概念與核心優(yōu)勢
LoRA 的核心做法是在預訓練權(quán)重矩陣 W 旁邊添加兩個較小的可訓練矩陣 A 和 B,同時不改變 W 的參數(shù)。想象一下,預訓練的權(quán)重矩陣 W 是一個經(jīng)驗豐富的 “老將”,已經(jīng)具備了很多通用知識,但在應對特定任務時還不夠完美。這時,矩陣 A 和 B 就像是兩個靈活的 “小助手”,在不打擾 “老將” 的情況下,通過自身的訓練,為模型在特定任務上提供額外助力。
假設原始參數(shù)矩陣 W 的大小是 d x d,矩陣 A 的大小是 r x d,矩陣 B 的大小是 d x r,這里的 r 比 d 小很多(比如通常取 r=16) ,r 被稱為秩。訓練時,輸入數(shù)據(jù)在經(jīng)過 W 的同時也會經(jīng)過 A 和 B,B 的輸出會與 W 的輸出相加,以此來影響模型的最終預測結(jié)果。并且,A 和 B 的添加可以應用于神經(jīng)網(wǎng)絡內(nèi)部的多個層,而不只是在模型的最后添加一層。
在初始化時,矩陣 A 被賦予均值為零、有一定方差的隨機值,矩陣 B 則被初始化為全零矩陣。這樣的初始化方式能確保在訓練初期,LoRA 矩陣不會對原始 W 的輸出產(chǎn)生隨機干擾,只有在 A 和 B 的參數(shù)朝著理想方向調(diào)整后,才會逐步對原始輸出起到補充優(yōu)化作用 。與傳統(tǒng)的微調(diào)方法相比,LoRA 最大的優(yōu)勢就是大幅減少了需要訓練的參數(shù)數(shù)量,卻能達到相當?shù)男阅鼙憩F(xiàn)。
2. LoRA+:優(yōu)化學習率,提升訓練效率
LoRA + 在 LoRA 的基礎上,為矩陣 A 和 B 引入了不同的學習率。在大多數(shù)神經(jīng)網(wǎng)絡訓練中,通常會對所有權(quán)重矩陣采用相同的學習率。然而,LoRA + 的研究者發(fā)現(xiàn),對于 LoRA 中的適配器矩陣(即 A 和 B)而言,這種單一學習率并非最優(yōu)選擇。
從理論上講,當模型的神經(jīng)元數(shù)量增多,模型變得更 “寬” 時,基于神經(jīng)網(wǎng)絡初始化的一些數(shù)值特性,將矩陣 B 的學習率設置得比矩陣 A 高很多,能夠提升訓練效率。直觀地理解,矩陣 B 初始化為零,它就像一張 “白紙”,可以接受更大的更新步長來快速學習;而矩陣 A 是隨機初始化的,更新時需要更謹慎。
實際驗證也表明,將矩陣 B 的學習率設置為矩陣 A 的 16 倍時,在像 RoBERTa 或 Llama - 7b 這樣的模型訓練中,不僅能使模型準確率有大約 2% 的小幅度提升,還能將訓練時間縮短一半。
3. VeRA:減少參數(shù),借助隨機投影 “四兩撥千斤”
VeRA(Vector - based Random Matrix Adaptation)另辟蹊徑,它不再訓練矩陣 A 和 B,而是將它們初始化為共享的隨機權(quán)重矩陣,同時添加兩個新的向量 d 和 b 進行訓練。這一做法可能讓人疑惑:不訓練 A 和 B,它們能發(fā)揮什么作用呢?
這背后涉及到隨機投影的研究。在大型神經(jīng)網(wǎng)絡中,其實只有一小部分權(quán)重對模型在特定任務上的行為和性能起到關鍵作用?;谶@個原理,VeRA 通過在隨機初始化的矩陣后添加投影向量 d 和 b,實現(xiàn)了與調(diào)整矩陣中稀疏參數(shù)類似的效果。而且,與原始 LoRA 不同,VeRA 中的矩陣 B 不再初始化為零,而是和矩陣 A 一樣隨機初始化。
以給 GPT - 3 引入秩為 16 的 LoRA 層為例,使用傳統(tǒng) LoRA 方法會有 7550 萬個參數(shù),而 VeRA 僅需 280 萬個參數(shù),參數(shù)減少了 97%。在 GLUE 或 E2E 等常見基準測試中,VeRA 模型的性能僅略低于完全微調(diào)的模型或使用原始 LoRA 技術的模型。
4. LoRA - FA:凍結(jié)矩陣 A,簡化訓練
LoRA - FA(LoRA with Frozen - A)和 VeRA 的思路有些相似,它在初始化后凍結(jié)矩陣 A,讓 A 充當隨機投影的角色,只訓練矩陣 B。矩陣 B 的初始化方式和原始 LoRA 一樣,為零矩陣。通過這種方式,LoRA - FA 將需要訓練的參數(shù)數(shù)量減少了一半,同時在性能上與普通 LoRA 相當。
5. LoRA - drop:智能篩選,減少不必要訓練
在神經(jīng)網(wǎng)絡中,雖然添加 LoRA 矩陣比微調(diào)整個模型成本低,但添加的 LoRA 適配器越多,訓練成本依然會增加。LoRA - drop 就像是一個 “智能篩選器”,它引入一種算法來判斷哪些層值得用 LoRA 進行增強,哪些層則不需要。
具體操作分兩步:第一步,先從數(shù)據(jù)集中采樣一個子集,用這個子集訓練 LoRA 適配器幾次,然后計算每個 LoRA 適配器的重要性,計算方式是B x A x x(其中 x 是輸入),這個結(jié)果代表了 LoRA 適配器對凍結(jié)層輸出的改變程度,值越大說明對凍結(jié)層行為影響越大,也就越重要;第二步,根據(jù)計算出的重要性,選擇最重要的 LoRA 層??梢酝ㄟ^設定閾值,累加重要性值達到閾值時確定所選層,也可以直接選取前 n 個重要性最高的層。確定好要訓練的層后,再用整個數(shù)據(jù)集對這些層進行完整訓練,其他層則固定為一組共享參數(shù),不再訓練。實驗表明,與訓練所有 LoRA 層相比,LoRA - drop 在準確率上僅有微小變化,但由于減少了訓練參數(shù)數(shù)量,大大降低了計算時間。
6. AdaLoRA:動態(tài)調(diào)整矩陣秩,精準分配資源
AdaLoRA(Adaptive LoRA)的獨特之處在于能夠動態(tài)調(diào)整 LoRA 矩陣的秩。在實際應用中,并非所有層都需要添加相同規(guī)模的 LoRA 矩陣,有些層對模型性能的影響更大,需要更高的秩來進行更精細的調(diào)整。
AdaLoRA 通過考慮 LoRA 矩陣的奇異值來判斷其重要性。簡單來說,矩陣乘法可以看作是對向量應用一個函數(shù),當我們想減少矩陣參數(shù)又希望函數(shù)行為改變盡可能小時,可以通過計算矩陣的特征值(奇異值是特征值的平方根)來決定保留哪些行。對于那些只捕獲少量方差、對函數(shù)貢獻不大的行,可以將其設置為零,從而縮小矩陣的秩。
與 LoRA - drop 不同,AdaLoRA 不是完全舍棄某些層的適配器,而是根據(jù)情況降低一些層適配器的秩,使得不同的適配器可以有不同的秩。并且,AdaLoRA 在計算時不會每次都顯式計算奇異值(因為計算成本高),而是通過奇異值分解來獲取奇異值。同時,它不僅考慮奇異值,還會結(jié)合損失對某些參數(shù)的敏感度來綜合判斷。在許多場景下,同樣的總參數(shù)數(shù)量,AdaLoRA 通過更合理地分配可訓練參數(shù),比標準 LoRA 方法獲得了更好的分數(shù)。
7. DoRA:分解權(quán)重,更接近微調(diào)效果
DoRA(Weight - Decomposed Low - Rank Adaption)基于一種新穎的思路:將每個矩陣分解為幅度和方向兩個部分。就像在二維空間中,一個向量既可以用坐標表示,也可以用長度(幅度)和角度(方向)來描述。DoRA 將這種分解方式應用于描述模型訓練步驟中權(quán)重更新的矩陣,無論是傳統(tǒng)微調(diào)訓練的模型還是使用 LoRA 適配器訓練的模型。
研究發(fā)現(xiàn),微調(diào)訓練和 LoRA 訓練在幅度和方向變化的關系上存在差異。微調(diào)訓練中,方向和幅度更新之間存在較小的負相關,而 LoRA 訓練中則是較強的正相關。DoRA 通過將預訓練矩陣 W 分解為大小為 1 x d 的幅度向量 m 和方向矩陣 V,分別對它們進行獨立訓練。方向矩陣 V 像標準 LoRA 方法一樣,通過 B x A 進行增強,幅度向量 m 則直接進行訓練。這樣,DoRA 在訓練時能夠更靈活地調(diào)整幅度和方向,使兩者關系更接近微調(diào)訓練。在多個基準測試中,DoRA 的準確率超過了 LoRA,這表明它通過分解權(quán)重更新,在使用 LoRA 較小參數(shù)空間的同時,實現(xiàn)了更接近微調(diào)的訓練效果。
8. Delta - LoRA:更新預訓練權(quán)重,突破性能瓶頸
在 LoRA 中,為了避免高昂的計算成本,預訓練矩陣 W 是不被調(diào)整的,這就導致了較小的矩陣 A 和 B 在學習下游任務時能力有限,使得 LoRA 訓練的模型性能往往低于微調(diào)模型。Delta - LoRA 則打破了這個限制,它提出通過 A x B 在連續(xù)時間步的梯度來更新矩陣 W 。
9. 總結(jié)
LoRA 及其一系列變體從不同維度對大語言模型的訓練進行了優(yōu)化。
- LoRA 通過添加低秩矩陣 A 和 B 開啟了高效訓練的大門;
- LoRA + 優(yōu)化學習率提升訓練效率;
- VeRA 和 LoRA - FA 減少參數(shù)數(shù)量;
- LoRA - drop 智能篩選訓練層;
- AdaLoRA 動態(tài)調(diào)整矩陣秩;
- DoRA 分解權(quán)重使訓練更接近微調(diào);
- Delta - LoRA 更新預訓練權(quán)重突破性能瓶頸。
本文轉(zhuǎn)載自?????鴻煊的學習筆記????,作者: 鴻煊
