文献阅读: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.hqwc.cn/news/312615.html

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

相关文章

如何下载Sentinel-1数据

Sentinel-1是欧洲空间局(ESA)的一组地球观测卫星,属于Copernicus计划的一部分。该计划旨在为全球环境监测提供数据,并支持应对气候变化、自然灾害和人类活动的挑战。Sentinel-1卫星的主要任务是提供全天候、全时段、高分辨率的合成…

MySQL数据库学习一

1 什么是数据库的事务&#xff1f; 1.1 事务的典型场景 在项目里面&#xff0c;什么地方会开启事务&#xff0c;或者配置了事务&#xff1f;无论是在方法上加注解&#xff0c;还 是配置切面。 <tx:advice id"txAdvice" transaction-manager"transactionMa…

「Verilog学习笔记」乘法与位运算

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 观察乘数的特点&#xff1a; 1111_1011 1_0000_0000 - 1 - 100 timescale 1ns/1nsmodule dajiang13(input [7:0] A,output [15:0] B);//*************code*********…

Python从入门到精通之线程与进程

系列 Python从入门到精通之安装与快速入门-CSDN博客 Python从入门到精通之基本数据类型和变量-CSDN博客 Python从入门到精通之集合&#xff08;List列表、Tuple元组、Dict字典、Set&#xff09;-CSDN博客 Python从入门到精通之条件语句、循环语句和函数-CSDN博客 Python从…

二叉树的后序遍历,力扣

目录 建议先刷一下中序遍历 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 注&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 代码实现&#xff08;递归&#xff09;&#xff1a; 代码实现&#x…

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3数据结构中的二叉树&#xff1a; 2.4特殊的二叉树&#xff1a; 2.5 二叉树的存储结构 2.51 顺序存储&#xff1a; 2.5.2 链式存储&…

第十四章 Sentinel实现熔断与限流

Sentinel实现熔断与限流 gitee&#xff1a;springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#x…

【小沐学NLP】Python实现K-Means聚类算法(nltk、sklearn)

文章目录 1、简介1.1 机器学习1.2 K 均值聚类1.2.1 聚类定义1.2.2 K-Means定义1.2.3 K-Means优缺点1.2.4 K-Means算法步骤 2、测试2.1 K-Means&#xff08;Python&#xff09;2.2 K-Means&#xff08;Sklearn&#xff09;2.2.1 例子1&#xff1a;数组分类2.2.2 例子2&#xff1…

图片预览 element-plus 带页码

vue3、element-plus项目中&#xff0c;点击预览图片&#xff0c;并显示页码效果如图 安装 | Element Plus <div class"image__preview"><el-imagestyle"width: 100px; height: 100px":src"imgListArr[0]":zoom-rate"1.2":max…

HTML+CSS+JS制作三款雪花酷炫特效

🎀效果展示 🎀代码展示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html

2021-06-25 51蛋骗鸡按键切合LED

缘由ISIS 7 Professional_有问必答-CSDN问答 #include "REG52.h" sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; void main() {unsigned char Xd0,xz0,cs0;unsigned int wei0;P1255;while(1){if(K10&&Xd0){P10;while(K10);}if(K20&&…

windows进行udp端口转发,解决项目中服务器收不到组播数据的问题

说明 windows7的netsh interface portproxy命令只支持tcp端口转发 如果要进行udp端口转发可以使用sokit 运行sokit 端口转发&#xff08;以为tcp作为讲解&#xff0c;udp类似&#xff09; 选择转发器 输入监听地址&#xff08;SRC地址&#xff09;和端口 输入转发地址&am…