Transformers参数高效微调之LoRA

简介

LoRA: Low-Rank Adaptation of Large Language Models是微软研究人员为处理微调大语言模型的问题而引入的一项新技术。具有数十亿个参数的强大模型(例如 GPT-3)为了适应特定任务或领域而进行微调的成本非常高。LoRA 建议冻结预先训练的模型权重并注入可训练层 (秩分解矩阵) 在每个变压器块中.这大大减少了可训练参数的数量和 GPU 内存要求,因为不需要为大多数模型权重计算梯度。研究人员发现,通过专注于大语言模型的Transformer注意力块,LoRA的微调质量与完整模型微调相当,同时速度更快需要的计算更少。

LoRA概念

比如你有一个装满乐高积木的大盒子。
这个大盒子里有各种积木,你可以用它们建造房子、汽车、太空飞船等等。
但因为这个盒子又大又重,搬运起来很麻烦。而且,大多数时候你并不需要用到所有积木来完成你的建造任务。
于是,你挑出一小盒你最喜欢、最常用的积木。这小盒子更轻便,便于携带,虽然不如大盒子功能全面,但它足够用来完成大多数你想建造的东西。
在这个比喻中,大盒子的乐高积木就像一个大型语言模型(如 GPT-4):
功能强大,可以处理很多任务,但也需要巨大的计算资源。
而小盒子的乐高积木就像 LoRA(低秩适应):
这是经过特定任务适配后,更小、更轻量化的模型版本。虽然功能不如完整模型全面,但更高效,也更容易使用。

什么是 LoRA(低秩适应)?
LoRA 的全称是 “Low-Rank Adaptation”(低秩适应)。
“低秩”(Low-Rank)是一个数学术语,用来描述生成这种更小、更轻量模型的方法。
你可以把“低秩”理解为只阅读一本书中标注的重点部分。
而“全秩”(Full-Rank)就像是把整本书从头到尾全部读完(全参训练)。

LoRA原理

在这里插入图片描述
这张图是网上实现LoRA原理图

简单理解:在模型的Linear层的旁边,增加一个“旁支”,这个“旁支”的作用,就是代替原有的参数矩阵W进行训练(左侧部分)。

通过图我们来直观地理解一下这个过程,输入xxx,具有维度ddd,举个例子,在普通的transformer模型中,这个xxx可能是embedding的输出,也有可能是上一层transformer layer的输出,而ddd一般就是768(大多数Bert的输出维度是768)。按照原本的路线,它应该只走左边的部分,也就是原有的模型部分。

而在LoRA的策略下,增加了右侧的“旁支”,也就是先用一个Linear层A,将数据从ddd维降到rrr维,这个rrr也就是LORA的秩,是LoRA中最重要的一个超参数。一般会远远小于ddd (见的比较多的是4、8),尤其是对于现在的大模型,ddd已经不止是768或者1024,例如LLaMA-7B,每一层transformer有32个head,这样一来ddd就达到了4096.

接着再用第二个Linear层B,将数据从rr

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值