又一個針對LoRA的改進方法:
DyLoRA: Parameter-Efficient Tuning of Pretrained Models using Dynamic Search-Free Low Rank Adaptation
https://arxiv.org/pdf/2210.07558v2.pdf
https://github.com/huawei-noah/KD-NLP/tree/main/DyLoRA
Part1前言
LoRA存在的問題:
rank的值是固定的,訓練完成後不能修改。 優化rank的值需要大量的搜索和努力。
提出的方法:引入了一種動態低秩適應(Dy-LoRA)技術。通過對適配器模塊在訓練期間的不同秩所學到的表示進行排序,爲一系列的秩而不是單一的秩訓練LoRA塊。
主要貢獻:
動態LoRA:在LoRA的基礎上,我們開發了一種新的算法(DyLoRA),使其在推理時是動態的,而不會產生額外的費用。 無需搜索的LoRA:我們證明,通過在性能上做出可忽略不計的妥協,有可能避免爲LoRA選擇最佳秩的昂貴的搜索過程。
Part2介紹
在每一個LoRA模塊中,有一個向上投影和向下投影的矩陣。設我們想訓練LoRA模塊在的範圍內操作,其中和可以被視爲新的超參數。爲了使LoRA模塊在一系列的秩中工作,而不是單一的秩,我們需要確保增加或減少秩不會明顯阻礙模型的性能。實現這種行爲的一種方法是在LoRA模塊的訓練過程中對不同秩的信息內容進行排序。在這方面,在每個訓練步驟中,我們對進行抽樣。形成一個預先定義的分類分佈其(支持度爲Range[rmin, rmax]),並相應地截斷和矩陣。
和 是W的b截斷版本。
前向傳播計算時是這麼計算的:
損失的計算:
另外在訓練的時候增加了一個新的模塊:frozen,即只更新截斷塊中第b個相關的行或者列。
整個流程如下:
需要注意反向傳播時是否是更新整個截斷塊還是第b個行或列。
Part3實驗結果
首先是說明不同rank對結果的影響:
接着是該方法和其他方法的對比: