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

  • 文献阅读: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.mzph.cn/news/588535.shtml

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

相关文章

SLAM学习入门--机器学习

文章目录 机器学习逻辑回归(LR)基本原理为什么 LR 要使用 sigmoid 函数?LR 可以用核函数么?为什么 LR 用交叉熵损失而不是平方损失?LR 能否解决非线性分类问题?LR为什么要离散特征?逻辑回归是处…

Linux文件系统结构及相关命令2 什么是Shell? help cd cd的用法 ls 的用法

Shell 是一种用于与操作系统进行交互的命令行解释器。它是用户与操作系统内核之间的接口,接受用户的命令并将其传递给操作系统进行执行。 在大多数的 Unix-like 操作系统(如 Linux 和 macOS)以及类 Unix 系统中,Shell 是默认的命…

10 HXCodec

前言 这个主要是提供了日常的相关 编码解码体系 的工具包, 依赖于fastjson 和 netty-all 里面主要包含了一些 摘要的生成, base64编码解码, ByteBuf操作api, Des编码解码, 文件操作, 十六进制操作, io操作, md5操作, 属性操作, rsa操作, socket操作 对象 序列化为字节序列, …

Qlib从入门到精通

前面谈到了简单的一个示例代码,实际上里面的策略源码和模型回测源码都需要好好了解,他这个回测系统和我之前用到的回测策略代码有不一样的地方,作为一个量化策略攻城狮,掌握源码是基本的技能。 Qlib内置了A股、美股两个市场的历史…

如何开发一个google插件(二)

前言 在上一篇文章如何开发一个google插件(一)里主要介绍了google插件的基本结构。 在这篇文章中主要结合reactwebpack进行一个代码演示,源码地址:源码地址 下载源码后打开浏览器的扩展程序管理->加载已解压的扩展程序,即可调试插件 此…

在线客服选择要点分析:如何挑选适合您需求的客服解决方案

选择一款好的在线客服系统,可以帮助企业多渠道的触达客户,与客户进行高效的沟通,最终达成转化的目的。 市面上现在成熟的客服系统产品有很多,企业在进行选择时要考虑以下几点: 1、企业需求 市场上的客服系统产品主要…

10、复制

复制概述 复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。主库和备库之间可以有多种不同的组合方式。 Mysql 支持两种复制方式:基于行的复制和基于语句…

向表达式添加括号后的最小结果

说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 题目描述 给你一个下标从 0 开始的字符串 expression ,格式为 “num1num2” ,…

ArkTS - 组件生命周期

一、先说下自定义组件 在arkTs中,自定义组件分为两种(我的总结): 一种是:根组件,就是被装饰器Entry装饰的入口组件,这也是自定义组件(父组件)。 另一种是:没有被Entry装饰的自定义…

跟我学c++中级篇——再谈C++20中的协程

一、协程 在前面分析过协程是什么,也对c20中的协程的应用进行了举例说明。所以这次重点分析一下c20中的整体构成及应用的方式。等明白了协程是如何动作的,各种情况下如下何处理相关的事件,那么在以后写协程时就不会死搬硬套了。 二、整体说…

分布式存储考点梳理 + 高频面试题

欢迎来到分布式存储模环节,本文我将和你一起梳理面试中分布式系统的数据库的高频考点,做到温故知新。 面试中如何考察分布式存储 广义的分布式存储根据不同的应用领域,划分为以下的类别: 分布式协同系统 分布式文件系统 分布式…

Xline command 去重机制(一)—— RIFL 介绍

为什么要对 command 去重? 在一个接收外部 command 的系统中,通常一个 command 至少要执行一次,我们称其为 at-least-once semantics。如果一个 command 执行失败,系统内部经常会实现一套重试结构来尝试恢复这个问题,…

HTML 基础

文章目录 01-标签语法标签结构 03-HTML骨架04-标签的关系05-注释06-标题标签07-段落标签08-换行和水平线09-文本格式化标签10-图像标签图像属性 11-路径相对路径绝对路径 12-超链接标签13-音频14-视频 01-标签语法 HTML 超文本标记语言——HyperText Markup Language。 超文本…

【分布式配置中心】聊聊Apollo的安装与具体配置变更的原理

【管理设计篇】聊聊分布式配置中心 之前就写过一篇文章,介绍配置中心,但是也只是简单描述了下配置中心的设计点。本篇从apollo的安装到部署架构到核心原理进一步解读,大概看了下apollo的原理,感觉没有必要深究,所以就…

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷③

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项(高职组) 样题(第3套) 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项(高职组) 样题(第3套) 模块…

2024黑龙江省职业院校技能大赛暨国赛选拔赛应用软件系统开发赛项(高职组)赛题第1套

2024黑龙江省职业院校技能大赛暨国赛选拔赛 应用软件系统开发赛项(高职组) 赛题第1套 竞赛说明 目录 需要竞赛源码资料可私信博主! 竞赛说明 模块一:系统需求分析 任务1:制造执行MES—质量管理—质检标准&#xff…

FreeRTOS学习--49讲 事件标志位

事件标志位: 用一个bit位来表示事件是否发生,只有0(未发生)和1(已发生)两种状态 事件组:事件组是一组事件标志的集合,一组事件组包含了EventBites_t数据类型的变量,该变量高8未不能作为事件标志,用于存储控…

以一种访问权限不允许的方式做了一个访问套接字的尝试

python -m http.server 启动失败 原因是端口被占用,但是使用 netstat -ano|findstr 8000 却没发现占用,最后发现是hyper-v占用了,要给容器使用。 使用命令 netsh int ipv4 show dynamicport tcp可以查看TCP 动态端口范围的情况。 netsh int…

人机对话--关于意识机器

人机对话——关于意识机器 这段内容是我和《通义千问》的对话。这本身展示的是人工智能的效果,同时这里面的内容也有人工智能相关,与各位分享。 我:阿尼尔赛斯 《意识机器》这本书写的是什么? 通义千问: 阿尼尔赛斯…

❀My排序算法学习之冒泡排序❀

目录 冒泡排序(Bubble Sort):) 一、定义 二、算法原理 三、算法分析 时间复杂度 算法稳定性 算法描述 C语言 C++ 算法比较 插入排序 选择排序 快速排序 归并排序 冒泡排序(Bubble Sort):) 一、定义 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单…