参数少80%,效果仍超LoRA!上交大&上海AI Lab推出高效微调框架FLoRA

Huiser 投稿
量子位 | 公众号 QbitAI

为了让大模型在特定任务、场景下发挥更大作用,LoRA这样能够平衡性能和算力资源的方法正在受到研究者们的青睐。

然而,以LoRA为代表的众多低秩微调方法(包括DoRA, MoRA, AdaLoRA等衍生方法)仍存在一个问题:

它们通常通常都更适合Linear层,Embedding层这类“直入直出”的低维度张量,忽略了对更高维度甚至N维张量的考虑。

尽管这些方法可以通过一定方式将高维度张量转化为2D张量来微调参数,如LoRA将Conv2D卷积层参数所具有的四维张量dd9c3fda7306b96838b7bc0c2f528b31.png转化为二维张量7a755b660f1c651e5136e91f5c5cf875.png。但其存在两方面的挑战:

  1. 这种将卷积核076e76f4edba551eb4ae4b7d8a8e49e6.png拆开分别reshape到7c2b2ff65942cdfdffe2bd4e9d112e21.pngb245986eec61bd541c8c8f7d4a10b6c5.png维度上的方法虽然避免了参数的大规模增加,但是破坏了卷积核本身的结构特性。这对于密集预测类任务所需要的局部归纳偏置是一种负向影响。

  2. 随着张量维度的升高,reshape为二维的方式会造成急剧的参数量增加,背离了参数高效微调方法的初衷。

d8ac04954098f341c902048a59d59490.png

为了解决以上两个问题,来自上海交通大学、上海AI Lab的研究人员提出了FLoRA方法(flora意为植物群,具有广泛的寓意)。

以视觉任务为例,FLoRA能在比LoRA少80%参数的情况下,取得与之一致的效果。

820e0d8f3abcc0c60001c95ebe592eee.jpeg

作者认为,各维度参数的调整应该通过一个全局的低秩核心空间的子空间来进行,低秩核心空间本身则保留了原参数不同维度之间存在的拓扑关系以及交互性

具体来说,作者通过应用Tucker分解来实现对低秩核心空间的构建,完成了以统一视角来推导N维张量低秩微调方法的适配,使得低秩微调方法扩大到如Conv2D层, Embedding层,Linear层等各类常见层上。同时,作者发现通过调整不同的参数,FLoRA可以退化为多个不同的低秩微调方法。

适合N维张量的参数高效微调

当前LoRA类方法为什么会破坏结构

卷积具有局部学习的归纳偏置。若设置一个d7c05e0bbca3bf19c9171d9447031fae.png57b5dfdbf0dbd0bb15ee8e34ed412ddb.pngfc02f87ce4d7d65464cd7ebeeff4fc48.png的卷积层,其参数形状应该为[10,1,3,3],后两维[3,3]构成了一个具有正方形结构的滤波器。

在按照6c6717bd1a235e70ee5dc794b8c849c3.png方式进行拆分过程中,既有permute的操作,也有reshape的操作,此时原本相邻的滤波器被打散。这增加了可学习参数来建模出原本的局部特性的难度。

为什么LoRA不把参数拆成beb84107cc5664a6759d46d82f5214c9.png来避免破坏结构?

在卷积结构中,一层网络的参数41607c70a9720c41070bb0ab58752526.png具有四个维度。

若按照688d8a8f9fd38b14baaee70588bebdcb.png方式将参数拆成对应LoRA中AB的形式,则应该为02b17b795d5416bd98a68070a9ed920b.png以及4c81bfb0f46902a94dc95f51b5a7c7d8.png

若按照7326fd2cec24f7f2e82a6b3379a8beb7.png方式将参数拆成对应LoRA中AB的形式,则应该为ae20408976d2239fbfcf0d648dbdf38b.png068b934ceb652c04a8b73b1ab18fcd17.png

前者参数量为ac7e151c8ff6eba5afa931629849e5a3.png,后者参数量为8eba731fc39db8942162bc2c4703691f.png

0dba63bd65350585e951309d4e469148.png时,分别为ea4b428411aa051ee9447daf198339d2.pnge0e32aeba9aa6a78675f8fb9d45871a1.png,一般而言,f2db89df57e13cd42c8366c6613751f4.png>>2b56252d068ad895499d8308232fb8f6.pnga640f11b1c743a1101997a8996e6af49.png方式会引入超大量的参数。因此转而使用后者是一种以结构完整性换参数量的折中。

Tucker分解实现N维张量的低秩微调

Tucker分解是一种矩阵分解方法。对于具有N维的张量798c9e53f03618de57d15be09bcae23c.png, Tucker分解可以将其表示为一个核张量(Core Tensor)与沿着每一维度得到的矩阵a37227f30eed09827d4767f0d4539e18.png的乘积,其中Jn为第n维的通道大小。可以写为:

3e962917978a864f99e9b6600d28b956.png

其中493de1662cc88b7be37b4e37ab02d05b.png为模乘,表示一个张量(tensor)和一个矩阵(matrix)的乘法。

在Tucker分解中,核张量代表了不同维度之间的交互,而矩阵a20d9315c3076695966ef0ed7081433c.png则类似于每一个维度的主成分。通过这种形式,依靠核张量去学习不同维度之间的关系,依靠各维度矩阵学习本维度的内在特性,可以在保留N维张量拓扑结构的基础上更好的优化学习过程。

基于以上对Tucker分解的介绍,作者便将这种分解方式引入到参数高效微调中。具体来说,相比于LoRA中

95901953d912f4e0dda4aa40c894560b.png

其中265a59f54ecd4f8fe14b9661d5f5717e.png

FLoRA将N维张量分解统一设计为:

其中881936878e1aad7f363403a7d7e18717.png为核张量,s为可调的scale系数,b7e7cb78fabacc0d2198aa15867ba134.png为第n维的低秩矩阵,这里的Jn就是低秩r,且Jn<<In

对应于具有4个维度的卷积核参数20bce53a0644c9cf5000b13bc6338a37.png,则有

c18271099da432d194491a608a6d3830.png

其中e6d291e35ed41daf1905c1c0a942156c.pngb8134336fc3e989de060e242a56e03df.pngad08c602e2f7379deb347848db022fa5.png以及5fa108bdce5d082073218094c4e9ad66.png

r3和r4一般取相同的比卷积核大小k更小的值。根据上式,作者认为在卷积参数微调中具有一个卷积核心(Convolution Core),而FLoRA负责找到了这个核心的值并且配置了不同维度的权重值。与LoRA相比,在相近参数量上FLoRA允许设置更大的秩r,在同等秩的情况下,FLoRA大大降低了参数量。

举例:若k=3,r3=r4=2, r1=r2=r=32, din=256, dout=512,

FLoRA的参数量为:

a7ab7f89f60e5c1a4e42503d4b4c24e4.jpeg

LoRA的参数量为:f1ca77bbc8cb67acde719f1a7d847703.jpeg

若FLoRA达到与LoRA相同的参数量,则r=70。

对应于具有2个维度的线性层参数5683263568c234f56a175e3f8456ed72.png,则有

0a6bd8171378813d1e779f7bb4647a8f.png

其中d4c4856d0a714ec8f91c386a1c4f7ee9.png51e5d53b8abd74fcf3836edeb5851779.png9b504f83a542ae01087818e5e0ac7c4e.png。与4维的卷积核参数类比,这里的G便是对应的线性核心。

参考上边的例子,同等r的情况下,FLoRA参数量为b35483d66261cbd0dbccfb8f9732bd9c.jpeg,相比LoRA仅多出0c9cf0f5ff1d8f30994430a1d5e4282a.png% 的参数,对应该例子为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一致的效果。实验结果说明了通过引入核张量来建模维度关系,从而避免破坏拓扑结构的方式是利于多维度参数微调的,并且可以取得很好的效果。

670ba98d186918003f2fd89e9dbf0d30.jpeg

在语言任务上作者也相应的做了一些实验,并且在所有的可调参数规模下都实现了明显的性能增长。

49b40b1f6e4837d9067583492be44e7f.jpeg

在多模态任务上作者也基于llava-v1.5-7b做了visual instruct tuning的测评。同样显示出了比LoRA更好的效果。

e6925b5bd127e123b2f86e6bda52d994.jpeg

作者也做了扩散模型的微调,并给出了生成结果的对比。

bee1c2687b2ee14b5a50a843ee8e3f70.jpeg

对于FLoRA和LoRA相比在训练时间与显存开销上的区别,作者也给出了数据说明。

7f10bee6aa374d9fb8a3cee0e6abc26a.jpeg

更多内容可以查看论文原文,作者反馈:核心实现代码以及不同任务完整代码也即将于近期陆续开源。

论文地址:

https://arxiv.org/abs/2405.14739

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值