问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

通俗理解让凡人也能修仙的大模型微调技术Lora

创作时间:
作者:
@小白创作中心

通俗理解让凡人也能修仙的大模型微调技术Lora

引用
CSDN
1.
https://blog.csdn.net/xiangxueerfei/article/details/139348128

LORA的全称为 LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS LORA,即大语言模型的低秩适配。看到这里,相信你对LORA应该有了一个基本的了解。

为什么需要LORA?

因为成本问题。大模型参数都是7B,13B,70B甚至更大,拿人家的预训练模型想要微调一下来做自己的任务,往往需要大量的算力和存储资源,对于个人或小型团队来说,这是一笔不小的开支。于是LORA就提出了一个解决方案:模型原有的参数weights太大,训练不了就放那里吧,但是会额外的训练一个参数量更小的模块(或者说是模型),让这个更小的模块附加在原大模型上,当有输入input进来时,此时的输出就是原有模型和附加的小模块共同作用后的结果,如下图:

若原大模型的参数是W0,额外训练的模块的参数是△W,输入为x,那么此时的输出h就是

h = W0·X+△W·X = W0·X+BA·X

为什么LORA这样做可以?

因为:预训练模型拥有极小的内在维度(instrisic dimension),即存在一个极低维度的参数,微调它和在全参数空间中微调能起到相同的效果

极小的内在维度是什么?又没看懂吧,要不怎么说论文读起来就是有高级感呢!

其实说白了就是:大模型虽然有70亿参数(假设),但在做某一个(或一类)任务时,对输出结果有影响的参数可能只有1亿个,另外69亿个参数对结果基本没啥影响,也就是说在做这些任务时只有一小部分参数有用,大部分参数没用。这样的话,在微调模型的时候,只需要微调这1亿参数就可以了,上图中右侧的橘黄色部分就代表这1亿参数。如此一来,就将微调所需的算力和内存大大的减少了。

LORA实现原理

受instrisic dimension的启发,作者认为参数更新过程中也存在一个“内在秩”。对于预训练权重矩阵W0 (mxn),通过低秩分解来分解为两个矩阵A(mxr),B(rxn)。

(补充关于矩阵分解:对于一个mn的矩阵,若它的秩是r,则可以通过mr和r*n的矩阵近似表示)

也就是用新权重矩阵A和B来近似的表示了原权重矩阵W0,但是通过通过低秩分解大大降低了需要训练参数的数量。假设原矩阵W0为100100,那么参数量为10000,若选取W0的秩为10,那么△W=A+B=10010+10*100=2000,参数量减少了80%!

训练过程中冻结原权重矩阵W0,仅训练权重矩阵A和B中的参数,如下图中所示,蓝色部分会冻结,仅训练橘黄色部分。

此时的前向传播过程为:

h = W0·X+△W·X = W0·X+BA·X
  1. 原大模型的参数是W0,额外训练的模块的参数是△W,输入为x,矩阵A 为高斯随机初始化,矩阵B初始化为0,这样一开始△W=0,整个模型的输出与预训练模型一样,有利于模型的收敛。
  2. 里只对attention层中的参数进行矩阵分解,包括Wq,Wk,Wv,Wo
  3. 当r=d的时候,就相当于对所有参数进行微调
  4. 没有额外的inference延迟,因为最后计算的时候可以先让W0和△W相加,然后再乘x,与之前直接和x相乘的计算量差不多。h=(W0+BA)·X

矩阵分解的位置与秩的选择

矩阵分解的位置:

实验中只是对attention层中的参数进行了矩阵分解,发现在总参数量保持一致的情况下,同时施加在Wq,Wk,Wv,Wo这4个参数上时效果最好,单独施加效在某一个参数上时果最差。

秩的选择:

r取4能够得到较好的效果。作者也通过实验说明当r较小时与较大的r能够有很高的相似性,即使是在秩小到1或者2的时候,LORA的仍有不错的效果。

另外实验发现,△Wq具有比△Wv有更高的“内在秩”,当r= 64时,两次随机种子运行之间的标准化子空间相似性来进一步确认这一点,如下图所示,也就是说虽然Wq,Wk,Wv都很重要,但从实验来看,Wq更重要一些。

论文地址:
英文版:https://arxiv.org/pdf/2106.09685
中英对照版:https://zhuanlan.zhihu.com/p/683068027

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号