今天小编分享的科学经验:参数少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
— 完 —
投稿请发邮件到:
标题注明【投稿】,告诉我们:
你是谁,从哪来,投稿内容
附上论文 / 项目主页链接,以及联系方式哦
我们会(尽量)及时回复你
点这里关注我,记得标星哦~
一键三连「分享」、「点赞」和「在看」
科技前沿进展日日相见 ~
>