LoRA (低秩自適應- arxiv.org/abs/2106.09685) 是一種經濟高效微調大型語言模型(LLM) 的流行技術。但2024 年湧現出大量新的參數高效微調技術,各種LoRA 替代方案層出不窮:SVF、SVFT、MiLoRA、PiSSA、LoRA-XS ?…… 其中大多數都基於我非常喜歡的一種矩陣技術:奇異值分解(SVD)。讓我們深入探討。
LoRA 的最初見解是,微調模型的所有權重是過度操作。相反,LoRA 凍結模型,只訓練一對小的低秩“適配器”矩陣。請參見下面的插圖(其中W 是Transformer LLM 中任何權重矩陣)。
由於需要計算和存儲的梯度要少得多,因此可以節省內存和計算週期。例如,這是一個使用LoRA 微調以模擬海盜說話方式的Gemma 8B 模型:只有2200 萬個參數可訓練,85 億個參數保持凍結狀態。
LoRA 非常流行。它甚至已作為單行API 進入Keras 等主流ML 框架:
<code>gemma.backbone.enable_lora(rank=8)</code>
但是LoRA 是最好的嗎?研究人員一直在努力改進該公式。實際上,選擇較小的“適配器”矩陣的方法有很多種。由於它們大多數巧妙地利用了矩陣的奇異值分解(SVD),讓我們暫停一下,進行一些數學運算。
SVD 是理解矩陣結構的一個好工具。該技術將矩陣分解為三個:W = USV T ,其中U 和V 是正交的(即基變換),S 是排序的奇異值的對角矩陣。這種分解總是存在的。
在“教科書式”SVD 中,U 和V 是方陣,而S 是一個矩形矩陣,對角線上是奇異值,後面是零。實際上,您可以使用方陣S 和矩形U 或V——參見圖片——截斷的部分只是乘以零。這種“經濟型”SVD 是常用庫(例如numpy.linalg.svd)中使用的。
那麼我們如何利用這一點更有效地選擇要訓練的權重呢?讓我們快速瀏覽五種最近基於SVD 的低秩微調技術,並附帶註釋說明。
LoRA 最簡單的替代方法是對模型的權重矩陣使用SVD,然後直接微調奇異值。奇怪的是,這是最新的技術,稱為SVF,發表在Transformers² 論文中(arxiv.org/abs/2501.06252v2)。
SVF 在參數方面比LoRA 經濟得多。此外,它使微調模型具有可組合性。有關這方面的更多信息,請參見此處我的Transformers² 說明,但是組合兩個SVF 微調模型只是一個加法運算:
如果您需要更多可訓練參數,SVFT 論文(arxiv.org/abs/2405.19597) 探討了多種方法,首先是在對角線上添加更多可訓練權重。
它還評估了其他多種替代方案,例如將它們隨機分散到“M”矩陣中。
更重要的是,SVFT 論文證實,擁有比對角線更多的可訓練值是有用的。請參見下面的微調結果。
接下來是幾種將奇異值分成兩組“大”和“小”的技術。但在我們繼續之前,讓我們暫停一下,進行更多SVD 數學運算。
SVD 通常被視為分解成三個矩陣W=USV T ,但它也可以被認為是許多秩1 矩陣的加權和,由奇異值加權:
如果您想證明這一點,請一方面使用USV T形式和矩陣乘法的公式來表達單個矩陣元素W jk ,另一方面使用Σ s i u i v i T形式,使用S 是對角線的事實進行簡化,並註意它是一樣的。
在此表示中,很容易看出您可以將總和分成兩部分。並且由於您可以始終對奇異值進行排序,因此您可以將其分成“大”和“小”奇異值。
回到三矩陣形式W=USV T ,這就是分割的樣子:
基於此公式,兩篇論文探討瞭如果您只調整大的奇異值或只調整小的奇異值會發生什麼,即PiSSA 和MiLoRA。
PiSSA(主奇異值和奇異向量自適應,arxiv.org/abs/2404.02948)聲稱您應該只調整大的主值。機制如下所示:
摘自論文:“PiSSA 旨在通過調整主要奇異分量來近似完全微調,這些分量被認為捕捉了權重矩陣的本質。相反,MiLoRA 旨在適應新任務,同時最大限度地保留基礎模型的知識。”
PiSSA 論文還有一個有趣的發現:完全微調容易過度擬合。使用低秩微調技術,您可能會在絕對值上獲得更好的結果。
另一方面,MiLoRA(次要奇異分量LoRA arxiv.org/abs/2406.09044)聲稱您應該只調整小的主值。它使用與PiSSA 類似的機制:
令人驚訝的是,MiLoRA 似乎佔據了上風,至少在微調數學數據集時是這樣,這些數據集可能與原始預訓練相當一致。可以說,PiSSA 應該更適合將LLM 的行為從其預訓練中進一步彎曲。
最後,我想提到LoRA-XS (arxiv.org/abs/2405.17604)。與PiSSA 非常相似,但機制略有不同。它還顯示出比LoRA 少得多的參數也能獲得良好的結果。
該論文提供了數學解釋,說明在兩種情況下這種設置是“理想的”:
在我看來,兩者都值得懷疑,所以我不會詳細介紹數學。一些結果:
根本假設似乎是奇異值分為“大”和“小”兩種,但事實是這樣嗎?我在Colab 上快速檢查了Gemma2 9B。底線:99% 的奇異值在0.1 – 1.1 範圍內。我不確定將它們分成“大”和“小”是否有意義。
還有許多其他參數高效的微調技術。值得一提的是:
我的結論:為了超越具有10 倍參數的LoRA 標準,我喜歡Transformers² 的SVF 的簡單性。如果您需要更多可訓練權重,SVFT 是一種簡單的擴展。兩者都使用所有奇異值(全秩,無奇異值修剪),並且仍然很便宜?。祝您微調愉快!
注意:所有插圖均由作者創作或從arxiv.org 論文中提取,用於評論和討論。
以上是您是否仍在使用Lora來微調LLM?的詳細內容。更多資訊請關注PHP中文網其他相關文章!