【论文精读】Lora

news/2024/11/28 19:40:03/文章来源:https://www.cnblogs.com/rh-li/p/18575034

【论文精读】

Lora:Low-rank adaptation of large language models

论文地址:Lora:Low-rank adaptation of large language models

年份:2021

引用量:8000+

关键词:LLM的高效微调

目录
  • 【论文精读】
  • Lora:Low-rank adaptation of large language models
    • 1. 背景
    • 2. Lora方法
    • 3. 实验
      • 3.1 实验设置
      • 3.2 与其他的微调方法进行对比:
      • 3.3 在四个模型上进行了实验
      • 3.4 消融实验
    • 4. 待更新:为什么\(\Delta W\)是低秩的?

1. 背景

现在,LLM训练的主要方法是:首先在通用任务上进行大规模的预训练,然后对预训练好的模型进行微调,以便更好的适应下游任务。

那么如何对模型进行微调呢?

一个简单的想法是:使用特定的任务,对模型的全部参数进行微调。这种方法叫做全量微调。

但是,LLM的参数量非常大,以GPT3为例,GPT3拥有大约175B个参数,如果对GPT3进行全量微调的话,这个成本太高了,令人无法接受。

因此,就提出了各种各样的方法来优化微调过程,这些优化方法统称为高效微调。

本文提出的Lora就是高效微调方法的一种,也是近年来最知名的一种。

2. Lora方法

Lora的基本思想是什么呢?

假设预训练后,模型的参数矩阵是$W_0\in\mathbb{R}^{d\times d} \(,在微调过程中,梯度是\)\Delta W \in\mathbb{R}^{d\times d} \(,那么在微调后,模型的参数矩阵变为\)W_0+\Delta W$。

作者认为,实际上,\(\Delta W\)的秩是很低的,因此,可以把\(\Delta W\)分解成两个低维的矩阵,即 \(\Delta W = BA\),其中\(B\in \mathbb{R}^{d\times r},A\in \mathbb{R}^{r\times d}\),且\(r\ll d\)

那么,微调时只需要分别更新\(B,A\)两个矩阵,最后再计算二者的乘积\(BA\),就可以得到梯度\(\Delta W\)

这样一来,直接更新\(\Delta W\)时,需要更新的参数有\(d^2\)个;但是将\(\Delta W\)分解为\(B,A\)的乘积后,只需要更新$d\times r + r \times d = 2rd \(个参数。由于\)r\ll d$,因此\(2rd\ll d^2\),大大减少了参数量。

还是以GPT3-175B为例,当\(d=12288\)时,令\(r\)等于1或者2,就能达到很好的微调效果。


若模型的输入为\(x\),前向传播后,模型的输出为\(h = W_0x\),那么在梯度更新之后,模型的输出为

\[h = (W_0+\Delta W) x = (W_0 + BA)x = W_0 x + BAx \]

在微调开始时,将\(A\)初始化为随机高斯分布,将\(B\)初始化为零矩阵。此外,我们在梯度\(BA\)前乘一个缩放因子\(\frac{\alpha}{r}\),其中\(\alpha\)是常数,\(r\)\(B\)\(A\)的维度。这种缩放机制的好处是,当我们需要改变\(r\)的值时,不必频繁地调整其他超参数。

并且,对于Transformer结构的LLM,在使用Lora进行微调时,作者冻结了其中MLP层的参数,仅仅对Attention层的参数进行了微调。


可以用一张图来表示Lora的计算过程

Figure 1

3. 实验

结论:实验结果表明,使用LoRA方法进行微调,比起其他微调方法,不仅参数量更少,而且在多数任务上得分更高

3.1 实验设置

  • 为了简单起见,在绝大多数实验中,作者使用Lora对Attention层中的\(W_q\),\(W_v\)进行微调,其他的参数保持冻结状态。

3.2 与其他的微调方法进行对比:

  • 全量微调(\(FT\)

    在微调过程中,所有模型参数都进行梯度更新。一种简单的变体是仅更新某些层而冻结其他层,例如可以仅仅调整最后两层\(FT^{top2}\)

  • \(BitFit\):仅仅调整偏置(bias),冻结其他所有参数。

  • 前缀Embedding微调\(PreEmbed\):在输入文本前添加一串特殊标记作为"前缀"。这些标记不具有实际含义,而是充当可训练的参数。微调时,只需要对前缀进行训练。推理时,我们将训练好的前缀添加到新的输入中,模型就能输出满足特定任务需求的结果。

  • 前缀层微调\(PreLayer\):前缀层微调不仅为输入添加前缀,还直接为每个Transformer层添加单独的前缀。具体来说,在普通的前缀微调中,前缀仅在输入时起作用;而在前缀层微调中,当数据流经模型的每一层时,都会遇到专门为该层设计的前缀参数。在推理时,新的输入会依次通过这些带有专属前缀的层,从而得到更精准的任务输出。

  • 适配器微调:最早的设计(\(Adapter^H\))是在每个注意力模块和MLP模块后添加适配器层。后来的研究者提出了多种改进版本:\(Adapter^L\)\(Adapter^P\)仅在MLP模块后添加适配器,而\(Adapter^D\)则通过选择性地删除一些适配器层来进一步提升效率。

3.3 在四个模型上进行了实验

  1. \(\mathrm{RoBERTa}_{base},\mathrm{RoBERTa}_{large}\)

    \(\mathrm{RoBERTa}\)\(\mathrm{BERT}\)的升级版。作者从 HuggingFace Transformers 库中获取预训练好的 \(\mathrm{RoBERTa}_{base}\)(1.25 亿参数)和 \(\mathrm{RoBERTa}_{large}\)(3.55 亿参数),并比较不同高效微调方法在 GLUE 基准任务上的性能。为了确保公平比较,在与适配器比较时,作者对 LoRA 的评估方式进行了两个关键更改。首先,对所有任务使用相同的批量大小,并使用长度为 128 的序列以匹配适配器baseline。其次,对于 MRPC、RTE 和 STS - B 任务,我们将模型初始化为预训练模型,而不是像全量微调baseline那样初始化为已经适应 MNLI 任务的模型。

  2. \(\mathrm{DeBERTa}\)

    \(\mathrm{DeBERTa}\)也是 BERT 的一个变体。作者主要比较了在GLUE上,LoRA 是否与完全微调的\(\mathrm{DeBERTa}\ XXL\)(15 亿参数)的性能相匹配。

Table 2

  1. \(\mathrm{GPT-2}_{medium},\mathrm{GPT-2}_{large}\)

    在表明 LoRA 可以成为自然语言理解(NLU)中全量微调的替代方案之后,作者希望回答: LoRA 在自然语言生成(NLG)模型(如 GPT - 2 中型和大型)上是否仍然占优。由于空间限制,表 3 仅展示在端到端自然语言生成挑战(E2E NLG Challenge)上的结果。

    Table 3

  2. \(\mathrm{GPT-3} \ \ 175B\)

    如表 4 所示,对于\(\mathrm{GPT-3} \ \ 175B\),LoRA 在三个数据集上都达到或超过了全量微调baseline。

    Table 4

    请注意,并非所有方法都能从更多的可训练参数中单调受益,如图 2 所示。作者观察到,当使用超过 256 个特殊标记进行前缀嵌入调优或超过 32 个特殊标记进行前缀层调优时,性能会显著下降。作为对比,当可训练参数增加时,Lora表现出了更强的可扩展性。

    Figure 2

3.4 消融实验

作者在\(\mathrm{GPT-3}\)上进行了消融实验,实验表明:

  1. 在固定训练参数量的前提下,不断调整训练的矩阵以及\(r\)的大小,最终发现,同时训练Attention层中的所有权重矩阵得分最高。

image-20241122111806289

  1. 不固定训练参数量,直接调整\(r\)的大小,发现\(r=2,4\)时得分较高。

image-20241122111825190

4. 待更新:为什么\(\Delta W\)是低秩的?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/843023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-0xGame-WEB方向全题解

0xGame Round1 ez_rce 源码: from flask import Flask, request import subprocessapp = Flask(__name__)@app.route("/") def index():return open(__file__).read()@app.route("/calc", methods=[POST]) def calculator():expression = request.form.ge…

【开发】计算机延迟指标全解析:深入理解系统性能瓶颈

在计算机的世界里,“速度”一直是我们不懈追求的目标。从早期的计算机到如今的高性能设备,每一次技术进步都伴随着对速度的极致渴望。无论是处理器的运算速度,还是数据的传输与存储速度,都直接影响着我们使用计算机的体验。那你是否曾好奇,计算机中的“快”究竟是如何衡量…

SKILL脚本的加密与解密及使用

SKILL脚本一般是用.il 和 .ile 结尾的文件,一般设置为 .ile 结尾的文件是加密的,调用的时候需要密码。 SKILL脚本的加密: 用encrypt函数加密脚本,格式如下: encrypt("/apps/SC/skill-script/migrateDesign/MigrateDesign.il" "/apps/SC/skill-script/migr…

家具组装的智慧引导:智能工具与产品说明书的高效协作

在家具市场中,消费者在购买家具后往往需要自行组装。然而,传统的产品说明书往往存在信息表述不清、步骤繁琐等问题,给消费者的组装过程带来诸多不便。为了帮助消费者更轻松地完成家具组装,将HelpLook与家具产品的产品说明书相结合,成为了一个切实可行的解决方案。一、家具…

为何不呢?

你很强吗? 你很菜吗? 你紧张吗? 你会输吗? 你能别挂分吗? 你可以别焦虑吗? 你能对得起父母吗? 你能对得起自己吗? 你对自己有自信吗? 你能保持头脑清醒吗? 你能做到不留遗憾吗? 你能把该拿的分都拿到吗? 你能真正的投入到比赛中吗? 你能把自己的水平发挥出来吗? …

三角比简介 (单位圆,弧度,毕达哥拉斯三角恒等式的证明)

定理直角三角形的三角比倒数三角比 我们还要考虑这3个 1. 2. 3. 例子: 单位圆 -0.5是cos,0.87是sin 弧度简介 弧度和度数 例子: 度数到弧度(弧数到度数) 例子: 弧度角和象限 毕达哥拉斯三角恒等式的证明 例子:逆时针方向: 通常表示正角。 顺时针方向: 通常表示负角…

20222407 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1 本周内容总结 使用了Metasploit框架,其是一个功能强大的渗透测试框架。在使用的过程当中,Metasploit 提供了种类繁多的攻击模块,涵盖了远程代码执行、服务拒绝、提权等多种攻击方式,支持对多种 操作系统和应用程序进行测试。除了漏洞利用,它还具备强大的后…

Mac打开指定路径的文件夹

访达中cmd+shift+G直接输入路径终端输入 open . 直接打开当前文件夹作者:iBrake出处:http://www.cnblogs.com/Brake/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

20222404 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 总结一下本周学习内容 了解了信息搜集在网络攻防中的重要性, 认识不同的信息搜集方法如WHOIS 查询、DNS 查询(dig、nslookup 等) 了解一些查询工具:dig 工具、nslookup 基于网络的信息搜集可以使用nmap,可使用端口、SYN、UDP等不通类型扫描。 2.实验过程 2.1获…

浅谈AXI协议及搭建自己的AXI IP核-01(协议解读)

一、什么是AXI协议? AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,AMBA包括以下几个部分:Advanced High-performance Bus (AHB):高性能总线,用于连接高性能主设备…

哈希表篇

哈希表 有效的字母异位词/*** 242. 有效的字母异位词 字典解法* 时间复杂度O(m+n) 空间复杂度O(1)*/ class Solution {public boolean isAnagram(String s, String t) {int[] record = new int[26];for (int i = 0; i < s.length(); i++) {record[s.charAt(i) - a]++; /…