文献阅读:LoRA: Low-Rank Adaptation of Large Language Models

news2025/3/3 18:02:41
  • 文献阅读:LoRA: Low-Rank Adaptation of Large Language Models
    • 1. 文章简介
    • 2. 方法介绍
    • 3. 实验 & 结论
      • 1. 基础实验
        • 1. Bert系列模型
        • 2. GPT系列模型
      • 2. 消解实验
        • 1. 作用矩阵考察
        • 2. 中间维度考察
        • 3. 扰动程度分析
    • 4. 总结 & 思考
  • 文献链接:https://arxiv.org/abs/2106.09685

1. 文章简介

这篇文章是微软在21年的一篇文章,不过我了解得比较晚,最近才发现有这个工作,就匆匆地扫了眼里面的内容。

如前所述,这篇文章是21年的一个工作了,当时应该是GPT3刚出,LLM的影响力还没有那么大,主流的范式还是使用大数据进行预训练之后在小数据集上进行finetune。

因此,针对大模型的finetune优化还是一个非常关键的问题,尤其当参数量巨大而普遍使用的GPU显存并没有那么大的时候,如何在不损失模型效果的情况下缩小模型以及加速推理就是一个巨大的问题。

而这篇文章就是在这里进行了一些讨论,给出了一个名为LoRA的方法,优化了模型finetune,具体来说就是通过LoRA的方式在不损伤模型效果的前提下缩减了模型的参数总量,从而大幅缩减了模型finetune所需的内存,提升finetune的速度。

下面,我们就来看一下LoRA的具体方法设计以及对应的实验效果考察。

2. 方法介绍

LoRA的整体思路个人觉得还是非常巧妙的。

众所周知,finetune的本质是在小的特定数据集下对预训练大模型的参数进行微调,使得其能够在保留大数据预训练的只是前提下,在特定的小数据集当中获得更好的表现。因此,finetune的本质就是对模型增加一个微扰,使得其收敛到一个更适合于某特定任务的局部最优点。

而LoRA的核心思路就是,直接freeze模型的全部参数,然后额外给模型增加一个扰动的module,来模拟finetune之后参数改变的效果。如此一来,只要这些扰动的module参数量够小且推理够快,就不会影响模型整体的inference成本,且可以大幅地缩减模型finetune的开销,因为我们只需要训练极小量的一部分参数即可。

我们给出文中的LoRA结构示意图如下:

在这里插入图片描述

对应的数学公式如下:

h = W 0 ⋅ x + Δ W ⋅ x = W 0 ⋅ x + B A x h = W_0 \cdot x + \Delta W \cdot x = W_0 \cdot x + BAx h=W0x+ΔWx=W0x+BAx

其中,关于这里扰动部分的设计,也就是公式中的 Δ W \Delta W ΔW的设计,文中应该是借鉴了Adapter的设计思路,也就是先将输入向量投影到一个较小维度( r r r)的向量当中,再恢复到原始的维度( d d d),从而即可将计算复杂度从 O ( d 2 ) O(d^2) O(d2)降低至 O ( r d ) O(rd) O(rd)

给出LoRA模型带来的推理速度的变化如下表所示:

在这里插入图片描述

可以看到:

  • LoRA会略微增加inference的成本,但是并不会产生太大的影响。

3. 实验 & 结论

下面,我们来看一下文中的实验以及对应的实验结果。

1. 基础实验

首先,文中在Bert系列模型以及GPT系列模型当中分别考察了一下LoRA的模型效果。

1. Bert系列模型

给出以Roberta以及DeBerta为代表的Bert系列模型上LoRA的效果表现如下:

在这里插入图片描述

可以看到:

  • LoRA大幅缩减了finetune过程中的参数总量,且效果基本与finetune的效果持平。
2. GPT系列模型

同样的,我们给出GPT2与GPT3上的模型效果如下:

在这里插入图片描述

在这里插入图片描述

可以看到:

  • LoRA的策略在GPT系列模型上面同样有效。

最后,文中还给出了LoRA策略对于参数量的可扩展性,也就是说,对于不同量级的参数,LoRA策略是否一直有效。

在这里插入图片描述

可以看到:

  • 其他方法对于大模型都会有一定的效果退化,但是LoRA一直可以保持较好的效果。

2. 消解实验

除了上述基本的效果考察之外,文中还对LoRA具体的生效机制进行了考察,具体来说包括:

  1. 作用矩阵
  2. 放缩比例
  3. 扰动程度分析

下面,我们来具体看一下这些内容。

1. 作用矩阵考察

首先,文中考察了以下在限制LoRA额外增加的参数总量的情况下,如何对扰动进行分配可以获得最好的效果,得到结果如下:

在这里插入图片描述

可以看到:

  • W q , W k , W v , W o W_q, W_k, W_v, W_o Wq,Wk,Wv,Wo上面都添加LoRA扰动可以获得最好的效果。
2. 中间维度考察

然后,确定了添加方式之后,文中还考察了以下放缩比例对模型效果的影响,得到结果如下:

在这里插入图片描述

可以看到:

  • 放缩比例事实上并不会对模型效果产生较大的影响,因此我们可以适当收窄中间维度。

为了进一步说明上述结论,文中还给出了 r = 8 r=8 r=8以及 r = 64 r=64 r=64时矩阵的相似度比较如下:

在这里插入图片描述

可以看到:

  • 两者是比较接近的,因此 r = 8 r=8 r=8 r = 64 r=64 r=64的效果是相接近的。

更进一步地,文中还考察了两次训练后参数的相似度以及其和未经过训练的随机初始化参数的相似度结果如下:

在这里插入图片描述

可以看到:

  • 模型确实学到了信息,表现出了相似的特征,且明显区分于未经过训练的随机初始化结果。
3. 扰动程度分析

最后,文中还考察了一下LoRA的扰动项带来的扰动量级与原始矩阵的对比,得到结果如下:

在这里插入图片描述

可以看到:

  • 和预期一致,LoRA带来的影响相较于原始矩阵确实是一个小量,但是也远高于随机矩阵带来的影响了,这说明LoRA确实是在生效着的。

4. 总结 & 思考

综上,我们可以看到:

  • LoRA提供了一种新的针对大模型的模型finetune的思路,可以在不显著增加推理成本的情况下大幅缩减finetune所需的模型参数总量,从而简化和加速模型的finetune过程。

这个问题在当前LLM盛行且越来越巨大化的趋势下就显得尤为重要了,尽管现在工作中暂时还不需要对大模型进行finetune,不过有这些知识储备终归还是有备无患了。

毕竟书到用时方恨少,事非经过不知难,加油,頑張れ!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中使用Matplotlib绘制圆环图

更多Python学习内容:ipengtao.com Matplotlib是Python中一个非常强大的库,它可以创建各种类型的图表,包括圆环图。圆环图是一种用于显示不同部分的相对比例的图表,通常用于呈现百分比或比例数据。在本文中,将深入探讨如…

FreeRTOS列表与列表项相关知识总结以及列表项的插入与删除实战

1.列表与列表项概念及结构体介绍 1.1列表项简介 列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表 1.2 列表、列表项、迷你列表项结构体 1)列表结构体 typedef struct xLIST { listFIRST_LIST_INTEGRITY_CHECK_VAL…

我的 2023 年终总结

时间太瘦,指缝太宽,岁月就这样匆匆流逝,似乎年初许愿时的憧憬还在眼前,转瞬就到了年尾,对2023年做个简单的回顾吧 我的 2022 年终总结 我的 2019 年终总结 总结2022年展望2023年 2023年的目标 参与晋升,希望…

机器学习、人工智能、深度学习的关系

人工智能(Artificial Intelligence,AI) 人工智能范围很广,它是一门新的科学与工程,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的技术科学,研究内容涵盖语音识别、图像识别、自然语言处理、智能搜索和…

ssm基于冲突动态监测算法的健身房预约系统的设计与实现论文

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装健身房预约系统软件来发挥其高效地信息处理的作用&#xff…

【哈希数组】697. 数组的度

697. 数组的度 解题思路 首先创建一个IndexMap 键表示元素 值表示一个列表List list存储该元素在数组的所有索引之后再次创建一个map1 针对上面的List 键表示列表的长度 值表示索引的差值遍历indexmap 将所有的list的长度 和 索引的差值存储遍历map1 找到最大的key 那么这个Ke…

MySQL:子查询

子查询 子查询是嵌套在较大查询中的 SQL 查询,也称内部查询或内部选择,包含子查询的语句也称为外部查询或外部选择。简单来说,子查询就是指将一个 select 查询(子查询)的结果作为另一个 SQL 语句(主查询&a…

C# 如何使用?、? 和 ??的区别和使用案例

目录 ? 运算符 使用案例 ?? 运算符 使用案例 总结 在 C# 中,? 和 ?? 运算符在处理 null 值时起着不同的作用,并且具有特定的使用场景。 ? 运算符 ? 运算符,也称为空条件运算符,在 C# 6.0 及更高版本中引入。它允许…

C语言实例_生成6位数的随机密码

一、前言 随着数字化时代的到来,人们在各个方面需要使用密码来保护个人隐私和敏感信息的安全。为了确保密码的安全性,密码应该是足够强大和难以猜测的,这就需要密码生成器来帮助用户生成高强度的随机密码。 随机密码生成器是一种计算机程序…

界面控件DevExpress v23.2全新发布 - 全新升级的UI本地化API

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…

给idea添加右键打开功能

添加文件夹右键程序打开 开始运行regedit 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 1、右键shell目录新建项Idea 2、右键Idea新建command 3、选择Idea 右侧空白出新建字符串 名字为Icon 值填入idea的运行程序地址 4、选择command 默认项填入idea的运行…

kubeadm来搭建k8s集群。

我们采用了二进制包搭建出的k8s集群,本次我们采用更为简单的kubeadm的方式来搭建k8s集群。 二进制的搭建更适合50台主机以上的大集群,kubeadm更适合中小型企业的集群搭建 主机配置建议:2c 4G 主机节点 IP …

[年终总结]人生就是大闹一场

讲真的,感觉过去这一年的体验,非常精彩,哈哈哈哈 体验了 裸辞,并没有想象中那么可怕,也没有想象中那么焦虑 经历了 入职之后又被裁员,心情没有那么大的起伏 解锁了 深圳/佛山/珠海/澳门/昆明/大理/新疆/成都 ,见了很多人,碰撞出了很多 idea 体会了 没有目的的去做一件事情,是什…

20231231_小米音箱接入chatgpt

参考资料: GitHub - yihong0618/xiaogpt: Play ChatGPT and other LLM with Xiaomi AI Speaker 小爱音箱ChatGPT的折腾记录:win平台部署并运行成功_哔哩哔哩_bilibili GitHub - chatanywhere/GPT_API_free: Free ChatGPT API Key,免费Chat…

Unity Window安装包制作

Unity Window安装包制作 介绍一、RAR自解压方式1、找到Unity打包的可执行程序2.创建自解压文件3.配置设置4、最后点击确定等待压缩完成即可(默认生成位置为你选中文件右键点击添加到压缩文件时的路径) 二、Setup Factory工具安装制作Window安装包相关常用…

2023最新租号平台系统源码支持单独租用或合租使用

这是一款租号平台源码,采用常见的租号模式。目前网络上还很少见到此类类型的源码。 平台的主要功能如下: 支持单独租用或采用合租模式; 采用易支付通用接口进行支付; 添加邀请返利功能,以便站长更好地推广&#xf…

uniapp 安卓模拟器链接

下载genymotion 安装 配置adb路径 模拟端口设为 5307

进阶学习——Linux系统服务器硬件认识与RAID磁盘

目录 一、服务器知识补充 1.硬件 2.服务器常见故障 二、认识RAID 1.什么是RAID 2.RAID的优点 3.RAID的实现方式 三、RAID磁盘陈列 1.RAID 0 磁盘陈列介绍——RAID 0 2.RAID 1 磁盘陈列介绍——RAID 1 3.RAID 5 磁盘陈列介绍——RAID 5 4.RAID 6 磁盘陈列介绍——RA…

用通俗易懂的方式讲解大模型:LangChain Agent 原理解析

LangChain 是一个基于 LLM(大型语言模型)的编程框架,旨在帮助开发人员使用 LLM 构建端到端的应用程序。它提供了一套工具、组件和接口,可以简化创建由 LLM 和聊天模型提供支持的应用程序的过程。 LangChain 由几大组件构成&#…

03 HAL库下UART的使用

引言: 需要使用到的uart调试工具在文章最后的资料里面 题外话:uart和usart的区别 UART(Universal Asynchronous Receiver/Transmitter)和USART(Universal Synchronous/Asynchronous Receiver/Transmitter)…