今天小編分享的科學經驗:參數少80%,效果仍超LoRA!上交大&上海AI Lab推出高效微調框架FLoRA,歡迎閱讀。
為了讓大模型在特定任務、場景下發揮更大作用,LoRA這樣能夠平衡性能和算力資源的方法正在受到研究者們的青睐。
然而,以 LoRA 為代表的眾多低秩微調方法(包括 DoRA, MoRA, AdaLoRA 等衍生方法)仍存在一個問題:
它們通常通常都更适合 Linear 層,Embedding 層這類 " 直入直出 " 的低維度張量,忽略了對更高維度甚至 N 維張量的考慮。
盡管這些方法可以通過一定方式将高維度張量轉化為 2D 張量來微調參數,如 LoRA 将 Conv2D 卷積層參數所具有的四維張量
轉化為二維張量
。但其存在兩方面的挑戰:
這種将卷積核拆開分别 reshape 到,維度上的方法雖然避免了參數的大規模增加,但是破壞了卷積核本身的結構特性。這對于密集預測類任務所需要的局部歸納偏置是一種負向影響。
随着張量維度的升高,reshape 為二維的方式會造成急劇的參數量增加,背離了參數高效微調方法的初衷。
為了解決以上兩個問題,來自上海交通大學、上海 AI Lab 的研究人員提出了FLoRA 方法(flora 意為植物群,具有廣泛的寓意)。
以視覺任務為例,FLoRA 能在比 LoRA 少 80% 參數的情況下,取得與之一致的效果。
作者認為,各維度參數的調整應該通過一個全局的低秩核心空間的子空間來進行,低秩核心空間本身則保留了原參數不同維度之間存在的拓撲關系以及互動性。
具體來說,作者通過應用 Tucker 分解來實現對低秩核心空間的構建,完成了以統一視角來推導 N 維張量低秩微調方法的适配,使得低秩微調方法擴大到如 Conv2D 層, Embedding 層,Linear 層等各類常見層上。同時,作者發現通過調整不同的參數,FLoRA 可以退化為多個不同的低秩微調方法。
适合 N 維張量的參數高效微調當前 LoRA 類方法為什麼會破壞結構
卷積具有局部學習的歸納偏置。若設定一個
,
,的卷積層,其參數形狀應該為 [ 10,1,3,3 ] ,後兩維 [ 3,3 ] 構成了一個具有正方形結構的濾波器。
在按照
方式進行拆分過程中,既有 permute 的操作,也有 reshape 的操作,此時原本相鄰的濾波器被打散。這增加了可學習參數來建模出原本的局部特性的難度。
為什麼 LoRA 不把參數拆成
來避免破壞結構?
在卷積結構中,一層網絡的參數
具有四個維度。
若按照
方式将參數拆成對應 LoRA 中 AB 的形式,則應該為
以及
。
若按照
方式将參數拆成對應 LoRA 中 AB 的形式,則應該為
和
。
前者參數量為
,後者參數量為
。
當時,分别為
和,一般而言,
>>
,
方式會引入超大量的參數。因此轉而使用後者是一種以結構完整性換參數量的折中。
Tucker 分解實現 N 維張量的低秩微調
Tucker 分解是一種矩陣分解方法。對于具有 N 維的張量
, Tucker 分解可以将其表示為一個核張量(Core Tensor)與沿着每一維度得到的矩陣
的乘積,其中 Jn 為第 n 維的通道大小。可以寫為:
其中為模乘,表示一個張量(tensor)和一個矩陣(matrix)的乘法。
在 Tucker 分解中,核張量代表了不同維度之間的互動,而矩陣則類似于每一個維度的主成分。通過這種形式,依靠核張量去學習不同維度之間的關系,依靠各維度矩陣學習本維度的内在特性,可以在保留 N 維張量拓撲結構的基礎上更好的優化學習過程。
基于以上對 Tucker 分解的介紹,作者便将這種分解方式引入到參數高效微調中。具體來說,相比于 LoRA 中
其中
。
FLoRA 将 N 維張量分解統一設計為 :
其中
為核張量,s 為可調的 scale 系數,
為第 n 維的低秩矩陣,這裡的 Jn 就是低秩 r,且 Jn<<In。
對應于具有 4 個維度的卷積核參數
,則有
其中
,
,以及
。
r3 和 r4 一般取相同的比卷積核大小 k 更小的值。根據上式,作者認為在卷積參數微調中具有一個卷積核心(Convolution Core),而 FLoRA 負責找到了這個核心的值并且配置了不同維度的權重值。與 LoRA 相比,在相近參數量上 FLoRA 允許設定更大的秩 r,在同等秩的情況下,FLoRA 大大降低了參數量。
舉例:若 k=3,r3=r4=2, r1=r2=r=32, din=256, dout=512,
FLoRA 的參數量為:
LoRA 的參數量為:
若 FLoRA 達到與 LoRA 相同的參數量,則 r=70。
對應于具有 2 個維度的線性層參數
,則有
,
其中
,
,
。與 4 維的卷積核參數類比,這裡的 G 便是對應的線性核心。
參考上邊的例子,同等 r 的情況下,FLoRA 參數量為
,相比 LoRA 僅多出
% 的參數,對應該例子為 4.17%。
在實際應用中,由于核張量的存在,等效的 r1,r2 可以小于 LoRA 的 r,從而實現同等規模甚至更少的參數量情況下,效果與 LoRA 一致甚至更好。
在 LoRA 中,s 的取值由 r 和另一超參 r_alpha 決定,通常固定 s=2。
在 FLoRA 中,該值以超參形式設定為一個固定值,不需要引入 r_alpha,本質上 s 代替了 r_alpha,因此相比 LoRA 沒有引入額外數量的超參。
對于 s 的選取,作者在實驗過程中發現對于不同大小規模的參數量以及不同類型的模型(即不同維度的參數空間),取值不一,但呈現出了一定的特點。對于卷積模型來說,s 的取值在一定範圍内越大越好,在以 ConvNext-L 為 backbone 來微調時設定為 4;對于線性模型來說,s 的取值盡量較小,在微調 InternViT-6B 和 LLaVA-7B 時,s 的值設定為 0.04。
實驗
作者分别在視覺任務,語言任務,多模态任務上做了實驗,涵蓋了 2 種類型模型(Conv 與 ViT),4 種參數規模(DeBERTav3-base: 184M,ConvNeXt-large: 196M, InternViT-6B, LLava-v1.5-7B),涉及 18 個數據集。
實驗結果表明,FLoRA 在各種視覺任務上都取得了明顯的性能提升,甚至在比 LoRA 少 80% 參數的情況下,依然可以取得和 LoRA 一致的效果。實驗結果說明了通過引入核張量來建模維度關系,從而避免破壞拓撲結構的方式是利于多維度參數微調的,并且可以取得很好的效果。
在語言任務上作者也相應的做了一些實驗,并且在所有的可調參數規模下都實現了明顯的性能增長。
在多模态任務上作者也基于 llava-v1.5-7b 做了 visual instruct tuning 的測評。同樣顯示出了比 LoRA 更好的效果。
作者也做了擴散模型的微調,并給出了生成結果的對比。
對于 FLoRA 和 LoRA 相比在訓練時間與顯存開銷上的區别,作者也給出了數據說明。
更多内容可以查看論文原文,作者反饋:核心實現代碼以及不同任務完整代碼也即将于近期陸續開源。
論文地址:
https://arxiv.org/abs/2405.14739
— 完 —
投稿請發郵件到:
标題注明【投稿】,告訴我們:
你是誰,從哪來,投稿内容
附上論文 / 項目主頁鏈接,以及聯系方式哦
我們會(盡量)及時回復你
點這裡關注我,記得标星哦~
一鍵三連「分享」、「點贊」和「在看」
科技前沿進展日日相見 ~
>