優(yōu)雅談大模型:一文讀懂LoRA/DoRA/MoRA
Microsoft于2021年推出的LoRA是一種經濟型微調模型參數的方法?,F在大模型的參數規(guī)模動不動都在10億級別以上,微調大模型(微調這里代表著SFT,例如讀者將某個大模型拿到自身領域,想使用自身領域的知識再次訓練和精校大模型,就屬于模型微調的領域。)的全面微調模式下,需要調整所有的參數,因此所需要的資源和時間巨大。
LoRA提出了一種微訓練模型的新方法,在凍結大部分的模型參數之余,僅僅更新額外的部分參數。同時它的性能與“微調大模型的全部參數”相似,但是能夠將訓練參數的數量減少了10,000倍,GPU內存需求減少了3倍。這以為著在消費級的GPU也可以運行這種計算和內存效率更高的新方法。
1.LoRA
在學習完“神經網絡與矩陣”的時候,讀者都可以知道神經網絡都可以用矩陣來表示。LoRA 假設微調期間的權重更新可以很好地近似于低秩矩陣。LoRA不會更新全權重矩陣W,而是將更新分解為兩個較小的矩陣A和B。
上圖左側為原始論文的配圖,右圖為另外的視角。舉個例子,若原始權重W為d*k的格式,那么一共存在4096(d)×4096(k)=16,777,216個參數。
這時候LoRA使用A(d*r)和B(r*k)來代表權重更新,因為A和B的矩陣相乘也是d*k維度的。假設r為8,則LoRA需要更新的權重參數為4096×8+ 8×4096 =65,536個參數。<一下子要更新的模型參數下降了N倍!>
具體的訓練過程是這樣的,將原來的矩陣參數固定,然后利用新的數據繼續(xù)訓練大模型,而這個訓練過程僅僅更新A和B矩陣。在推理使用的時候,將原來的矩陣W和(A*B)相加。下圖為可視化版本:
r如何選擇,什么的數值是合理的?原始的論文在某些模型上給出了實驗的結果,一般而言都是r=4或者r=8,當然這個超參數還是需要具體場景具體分析。
從先期的實驗數據而言,LoRA的效果還是不錯的。然而LoRA最主要的問題在于矩陣被投影到更小的維度上,因此在此過程中肯定會丟失一些信息。
在各種方法和基礎模型中,LoRA在減少訓練參數和性能保障之間的確表現優(yōu)異。
伴隨著量化技術,可以將量化引入LoRA,因此誕生了QLoRA。例如神經網絡的權重存儲為32位浮點數(FP32)。量化可以將其轉換為較低精度的點,例如16位或者8位(UINT-8或INT8)。
2.DoRA
權重分解低秩適應 (DoRA) 將預先訓練的權重分解為兩個分量:幅度和方向。如下圖所示,原來參數矩陣W的維度依舊是d*k,新增了一個幅度向量m(1*k)。
上圖綠色部分為需要被訓練,而藍色部分的參數表示在微調訓練中是被凍結的。DoRA在訓練A和B矩陣的時候,還是利用了LoRA的辦法。然而新增了幅度M向量。
可以將矩陣的每列都看成向量,每列的權重矩陣都可以用大小和方向表示。例如可以將[2.0, 3.0]分解為0.5*[4, 6]。在進行完全微調時,梯度更新只是改變了列向量的方向,而幅度卻保持幾乎恒定。
下圖為可視化的過程:
DoRA將列向量分解為2個分量可以更加靈活地更新方向分量,這更接近于完全微調。
3.MoRA
MoRA 的概念類似于 LoRA,但不是將權重矩陣分解為更小的維度,而是將其分解為小的方形矩陣。
例如,如果原始權重層具有4096×4096~= 16M參數,則r=8的LoRA具有4096×8 + 8×4096=65,536參數。使用MoRA可以將維度減小到r=256,即256×256=65,536。在這兩種情況下,需要訓練和更新的參數是相同的,然而研究人員聲稱與LoRA相比具有更高的學習代表性。
根據這篇2024年5月的論文,LoRA的局限性之一是無法記住大量數據。“對于LoRA觀察到的這種限制,一個合理的解釋可能是它對低秩更新的依賴。低秩更新矩陣 ?W ,很難估計FFT中的全秩更新,尤其是在需要記憶特定領域知識的持續(xù)預訓練等內存密集型任務中。
為了論證這個觀點,研究人員研究了LoRA和FFT在通過微調記憶新知識方面的差異。為了避免利用 LLM 的原始知識,研究人員隨機生成10K對通用唯一標識符 (UUID),每對包含兩個具有32個十六進制值的UUID。該任務要求LLM根據輸入的UUID生成相應的UUID。例如,給定一個UUID,比如“205f3777-52b6-4270-9f67-c5125867d358”,模型應該根據10K個訓練對生成相應的UUID。這個任務也可以看作是一個問答任務,而完成它所必需的知識完全來自訓練數據集,而不是LLM本身。
實驗的結果輔證了研究人員的說法。MoRA的損失收斂得很快。 |
怎么說呢,小編認為還是需要再實戰(zhàn)中多做檢驗。下圖為完整的可視化過程。
? ?
本文轉載自 ??魯班模錘??,作者: 龐德公
