当前位置: 首页 > news >正文

2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models

2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models


Paper: https://arxiv.org/abs/2106.09685
Code: https://github.com/microsoft/LoRA

大型语言模型的LoRA低秩自适应

自然语言处理的一个重要范式包括对通用领域数据的大规模预训练和对特定任务或领域的适应。当预训练更大的模型时,完全微调(重新训练所有模型参数)变得不那么可行。以 GPT-3 175B 为例,部署微调模型的独立实例,每个实例都有 175B 参数,成本高得令人望而却步 因此, 作者提出了低秩自适应(Low-Rank Adaptation,简称LoRA),它冻结了预训练模型的权重,并将可训练的秩分解矩阵注入到Transformer架构的每一层中,大大减少了下游任务的可训练参数数量。与使用 Adam 微调的 GPT-3 175B 相比,LoRA 可以将可训练参数的数量减少 10,000 倍,将 GPU 内存需求减少 3 倍。LoRA 在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上的模型质量与微调相当或更好,尽管可训练参数更少、训练吞吐量更高,并且与适配器不同,没有额外的推理延迟。
LoRA用来降低大语言模型下游任务训练的算力及内存资源需求量,降低预训练大模型产品化落地的成本。

LoRA基本思想

  1. 在原始PLM旁边增加一个旁路,做一个降维再升维的操作,来模拟所谓的intrinsic rank。
  2. 训练的时候固定PLM的参数,只训练降维矩阵A与升维矩阵B。
  3. 而模型的输入输出维度不变,输出时将BA与PLM的参数叠加。用随机高斯分布初始化A,用0矩阵初始化B,保证训练的开始此旁路矩阵依然是0矩阵。


下面是参数的更新表示:
其中,预训练的矩阵为 W 0 ∈ R d × k W_0 \in \mathbb{R}^{d \times k} W0Rd×k,它的更新表示为:

W 0 + Δ W = W 0 + B A , B ∈ R d × r , A ∈ R r × k W_0+\Delta W=W_0+B A, B \in \mathbb{R}^{d \times r}, A \in \mathbb{R}^{r \times k} W0+ΔW=W0+BA,BRd×r,ARr×k
其中秩 r < < m i n ( d , k ) r << min(d,k) r<<min(d,k)
对于 h = W 0 x h=W_0x h=W0x ,它的前向计算变为:
h = W 0 x + Δ W x = W 0 x + B A x = ( W 0 + B A ) x h=W_0 x+\Delta W x=W_0 x+B A x=\left(W_0+B A\right) x h=W0x+ΔWx=W0x+BAx=(W0+BA)x
这种方式类似与残差连接,同时使用这个旁路的更新来模拟full finetuning的过程。

参考

https://zhuanlan.zhihu.com/p/514033873

http://www.lryc.cn/news/215526.html

相关文章:

  • dockefile
  • rpc入门笔记 0x02 protobuf的杂七杂八
  • keepalived与nginx与MySQL
  • Pod基础概念
  • WebDAV之π-Disk派盘 + 一叶日记
  • 在IDEA运行spark程序(搭建Spark开发环境)
  • 无穷级数例子
  • C++构造函数和析构函数详解
  • MySQL数据库干货_16—— SQL99标准中的查询
  • LLM大语言模型训练中常见的技术:微调与嵌入
  • 每日一练 | 网络工程师软考真题Day47
  • Kafka - 监控工具 Kafka Eagle:实时洞察Kafka集群的利器
  • infercnv hpc东南服务器 .libpath 最终使用monocle2环境安装
  • 【音视频 | Ogg】RFC3533 :Ogg封装格式版本 0(The Ogg Encapsulation Format Version 0)
  • Hadoop时代落幕,开源大数据将何去何从?
  • 作为一名程序员面临哪些挑战?应该如何应对?
  • flink的安装与使用(ubuntu)
  • 容器:软件性能测试的最佳环境
  • 【Qt控件之QMovie】详解
  • Star History 九月开源精选 |开源 GitHub Copilot 替代
  • 【Rabbit MQ】Rabbit MQ 消息的可靠性 —— 生产者和消费者消息的确认,消息的持久化以及消费失败的重试机制
  • C++设计模式_25_Interpreter 解析器
  • 能源化工过程-故障诊断数据集初探-田纳西-伊斯曼过程数据集
  • 【Linux】安装配置解决CentosMobaXterm的使用及Linux常用命令以及命令模式
  • 一台服务器安装两个mysql、重置数据库用于测试使用
  • JS动态转盘可手动设置份数与概率(详细介绍)
  • 在k8s中,etcd有什么作用?
  • conda配置虚拟环境相关记录
  • 数据库的本质永远都不会改变基础语句(第二十二课)
  • Object转List<>,转List<Map<>>