文献阅读:Sparse Low-rank Adaptation of Pre-trained Language Models

news2024/11/25 8:22:28
  • 文献阅读:Sparse Low-rank Adaptation of Pre-trained Language Models
    • 1. 文章简介
    • 2. 具体方法介绍
      • 1. SoRA具体结构
      • 2. 阈值选取考察
    • 3. 实验 & 结论
      • 1. 基础实验
        • 1. 实验设置
        • 2. 结果分析
      • 2. 细节讨论
        • 1. 稀疏度分析
        • 2. rank分析
        • 3. 参数位置分析
        • 4. 效率考察
    • 4. 总结 & 思考
  • 文献链接:https://arxiv.org/abs/2311.11696
  • GitHub链接:https://github.com/TsinghuaC3I/SoRA

1. 文章简介

这篇文章是清华大学在23年11月发表的一篇针对LLM的高效finetune方面的工作。

众所周知,LLM虽然效果很好,但是由于其极其巨大的参数量,对LLM的finetune一直是一个老大难问题,因此最近针对这方面的研究也是层出不穷,其中最为知名的可能就是微软提出的LoRA算法了,我自己之前也整理了一篇水文来介绍过这篇工作(文献阅读:LoRA: Low-Rank Adaptation of Large Language Models)。

整体上来说,LoRA的核心思路就是用一个额外的Adapter网络来模拟模型finetune之后的参数微扰,使得原始模型的输出加上Adapter模型的输出近似于finetune之后的模型输出。此时,我们只需要train一个很小的adapter就可以来模拟模型的finetune了,既不用改动原始大模型的结构,也不需要增加很多额外的参数。

但是,LoRA有一个比较大的问题就是它默认了微扰对于各个层的影响都是一样的,且都是比较小的,因此LoRA对所有层都共享一个超参,就是adapter中间层的维度。而这个假设事实上是有点强的,因此后续也有一些工作尝试对这个点进行优化,文中提到的一个典型工作就是AdaLoRA,它通过奇异值分解的方式来动态调整不同层所需的Adapter中间层的维度,但是因为他引入了奇异值分解,因此需要挺多的额外计算量,且需要引入一些额外的正交假设。

基于此,文中提出了一个新的他们命名为SoRA的方法,本质上来说,它和AdaLoRA一样,也是希望动态调整不同层中Adapter中间层的维度,但是相较于AdaLoRA,更加简单直接,无需引入额外的假设,且不会增加多少额外的计算量。

下面,我们来具体看一下文中提出的SoRA方法的具体实现和对应的实验以及实验结果。

2. 具体方法介绍

1. SoRA具体结构

下面,我们首先来看一下SoRA的整体结构。

在这里插入图片描述

可以看到,本质上来说,SoRA依然走的还是LoRA的降维投影的模式,不过,SoRA的思路是先给一个较大的中间维度,然后通过 L 1 L_1 L1正则来获取参数的稀疏性,然后通过要给阈值来对维度进行剪裁,使得最终使用的中间矩阵 W u W_u Wu W d W_d Wd是两个较小维度的矩阵。

具体来说的话,我们先给出一个具有较大中间维度的系数投影矩阵 W u W_u Wu W d W_d Wd,这部分的定义是和LoRA完全一样的,然后我们给出一个门向量来对中间维度进行稀疏化剪裁,使得 W u W_u Wu W d W_d Wd当中用不到的部分直接置零被抹去。

具体的扰动量输出结果就是:

z = W u ( g ⊙ ( W d ⋅ x ) ) z = W_u(g \odot (W_d \cdot x)) z=Wu(g(Wdx))

然后,关于这个门向量 g g g的训练方式的话,就是通过如下的方式:

g t + 1 = Γ η t ⋅ λ ( g t − η t ∇ L 0 ( △ t ) ) g_{t+1} = \Gamma_{\eta_t \cdot \lambda} (g_t - \eta_t \nabla L_{0}(\triangle_t)) gt+1=Γηtλ(gtηtL0(t))

其中,阈值函数的定义为:

Γ ξ ( x ) = { x − ξ , x > ξ 0 , − ξ < x ≤ ξ x + ξ , x ≤ − ξ \Gamma_{\xi}(x) = \left\{ \begin{aligned} &x - \xi, && x > \xi \\ &0, && -\xi < x \leq \xi \\ &x + \xi, && x \leq -\xi \\ \end{aligned} \right. Γξ(x)= xξ,0,x+ξ,x>ξξ<xξxξ

这个实现的本质事实上就是 L 1 L_1 L1正则,换用另一个等价形式可以写为:

g t + 1 = a r g m i n g η t ⋅ λ ∥ g ∥ 1 + 1 2 ∥ g − ( g t − η t ∇ L 0 ( g t ) ) ∥ 2 2 g_{t+1} = \mathop{argmin}\limits_{g} \eta_t \cdot \lambda \| g \|_1 + \frac{1}{2} \| g - (g_t - \eta_t \nabla L_0(g_t)) \|_2^2 gt+1=gargminηtλg1+21g(gtηtL0(gt))22

而这个恰好就是 L 1 L_1 L1正则项:

L ( △ ) = L 0 ( △ ) + λ ∑ k = 1 K ∥ g ( k ) ∥ 1 L(\triangle) = L_0(\triangle) + \lambda \sum\limits_{k=1}^{K} \| g^{(k)} \|_1 L()=L0()+λk=1Kg(k)1

因此,我们可知 g g g会趋向于稀疏,而由此,我们就可以对参数矩阵 W u W_u Wu W d W_d Wd进行降维剪裁。

可以看到,上述实现和AdaLoRA基本上是有异曲同工之妙的,本质上都是先设置一个较大的中间维度之后进行剪裁,不过,相较于AdaLoRA,用文中的话来说,SoRA并没有引入额外的正交限制,且只使用 L 1 L_1 L1正则来动态控制每一层中间层的剪裁力度,因此多少显得更加直接以及优雅一些。

2. 阈值选取考察

最后,文中还讨论了一下上述实现中的阈值参数 ξ \xi ξ的选择,通过控制 ξ \xi ξ,我们就可以有效地控制最终的输出向量 g g g的稀疏性,因此,关于 ξ \xi ξ的选择,事实上是需要注意一下的,显然太稀疏的话会影响模型的效果,而太稠密的话那么稀疏化的意义也就没有了,耗费的计算量也大。

因此,文中给出了一个 ξ \xi ξ的schedule算法如下:

在这里插入图片描述

通过上述算法,文中得到了一系列不同稀疏度的模型,然后对其进行分析就可以获得一些关于 ξ \xi ξ的直观认知了。

3. 实验 & 结论

下面,我们来看一下文中给出的具体实验内容。

1. 基础实验

1. 实验设置

首先,关于SoRA的具体实验设计方面,文中使用的baseline模型主要包括以下一些:

  1. Adapter
  2. BitFit
  3. LoRA
  4. AdaLoRA

其次,文中使用的实验数据集为GLUE数据集。

最后,关于文中实验所使用的模型,文中主要是使用DeBERTaV3-base和RoBERTa-large模型进行考察,不过主要还是前者为主。

2. 结果分析

下面,我们给出文中得到的基础实验的结果如下:

在这里插入图片描述

可以看到:

  • SoRA与AdaLoRA的效果相近,均基本都能够干掉LoRA。

为了更好地比较SoRA与LoRA,文中还控制两者在拥有相同的中间维度进行了一下比较,得到结果如下:

在这里插入图片描述

可以看到:

  • SoRA的参数量均少于LoRA,但是效果基本都能够优于LoRA模型。

2. 细节讨论

然后,我们来看一下文中关于SoRA的细节讨论分析。

1. 稀疏度分析

首先,我们来看一下稀疏度对SoRA效果的影响,文中给出结果示意图如下:

在这里插入图片描述

可以看到:

  • 整体来说,只需要很小的参数量,SoRA的效果就能控制和完整的参数量差不多。
2. rank分析

其次,文中还对不同任务下SoRA在各个层当中保留的中间层的维度进行了分析讨论,得到结果如下:

在这里插入图片描述

可以看到:

  • 不同任务下,SoRA保留的中间层的维度是不相同的,QQP的保留维度明显就要高于QNLI任务;
  • 同一任务当中网络的不同部分所需要保留的中间维度也不尽相同,多数情况下FFW层所需的中间维度是要高于其他部分的。
3. 参数位置分析

此外,文中还对attention层当中QKV矩阵进行了更细致的讨论,看看SoRA分别作用于这几部分时的影响,得到结果如下:

在这里插入图片描述

可以看到:

  • 整体上还是所有部分都使用了SoRA之后能获得最优的效果。
4. 效率考察

最后,文中还对比了SoRA与AdaLoRA的训练效率,得到结果如下:

在这里插入图片描述

可以看到:

  • 相较于AdaLoRA,SoRA在训练上成本更低,耗时更少。

4. 总结 & 思考

综上,文中提出了一个LoRA的优化算法SoRA,目的是动态调整LoRA的中间维度,使得模型可以在保留tuning效果的前提下进一步压缩extra模型的参数量。

当然,考虑到我们当前的工作事实上来LoRA都用不到,根本不涉及LLM的tuning,因此这部分暂时应该也没有机会去上手实操看看了,不过整体上感觉还是非常有价值的一个工作,后面有机会的话还是想试试……

啊啊啊啊啊,我想train模型啊,天天调prompt,真的是烦死了!!!!!

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

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

相关文章

什么是检索增强生成 (RAG)

什么是 RAG RAG&#xff0c;即检索增强生成&#xff0c;是一种将预训练的大型语言模型的功能与外部数据源相结合的技术。这种方法将 GPT-3 或 GPT-4 等 LLM 的生成能力与专用数据搜索机制的精确性相结合&#xff0c;从而形成一个可以提供细微响应的系统。 本文更详细地探讨了…

JavaWeb——Spring事务管理

六、Spring事务管理 1. 注解 注解&#xff1a;Transactional 位置&#xff1a;业务&#xff08;service&#xff09;层的方法上、类上、接口上——一般在执行多条增删改方法上加 作用&#xff1a;将当前方法交给spring进行事务管理&#xff0c;方法执行前&#xff0c;开启事…

编程语言的语法糖,你了解多少?

什么是语法糖 语法糖是一种编程语言的特性&#xff0c;通常是一些简单的语法结构或函数调用&#xff0c;它可以通过隐藏底层的复杂性&#xff0c;并提供更高级别的抽象&#xff0c;从而使代码更加简洁、易读和易于理解&#xff0c;但它并不会改变代码的执行方式。 为什么需要语…

(aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器

1. 背景介绍 在先前的博客文章中&#xff0c;我们已经搭建了一个基于SRS的流媒体服务器。现在&#xff0c;我们希望通过Web接口来控制这个服务器的行为&#xff0c;特别是对于正在进行的 RTSP 转码任务的管理。这将使我们能够在不停止整个服务器的情况下&#xff0c;动态地启动…

OPPO Find X7 Ultra 发布,搭载双潜望四主摄摄影技术

2024年1月8日&#xff0c;深圳——OPPO发布旗舰Find X7 Ultra&#xff0c;定义移动影像的终极形态。Find X7 Ultra 首创的双潜望四主摄构成哈苏大师镜头群&#xff0c;以六个光学品质焦段提供目前手机最强大、品质最高的多摄变焦能力。首次搭载专为超光影图像引擎定制的一英寸传…

基于黑猩猩算法优化的Elman神经网络数据预测 - 附代码

基于黑猩猩算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于黑猩猩算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于黑猩猩优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#x…

Halcon灰度的平均值和偏差intensity

Halcon灰度的平均值和偏差 intensity 算子用于计算单张图像上多个区域的灰度值的平均值和偏差。该算子的原型如下&#xff1a; intensity (Regions, Image ::: Mean, Deviation )其各参数的含义如下。 参数1&#xff1a;Regions&#xff08;输入参数&#xff09;&#xff0c;…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

探讨一下WebINFO 下的一些思考

在平时的开发中&#xff0c;我们经常看到一个/WEB-INF 这个目录&#xff0c;这个是web 容器初始化加载的一个标准路径。官方解释&#xff1a;WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问&#xff0c;只有服务端可以访问的目录。也就是说&#xff0c;这…

虾皮上传产品软件:如何使用虾皮平台上传产品

在虾皮&#xff08;Shopee&#xff09;平台上&#xff0c;卖家可以通过多种方法来上传产品&#xff0c;以简化商品上架过程。本文将介绍一些常用的产品上传方法&#xff0c;帮助卖家选择最适合自己的方式。 先给大家推荐一款shopee知虾数据运营工具 知虾免费体验地址&#xff…

【MATLAB】ICEEMDAN_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 ICEEMDAN-LSTM神经网络时序预测算法是一种结合了改进的完全扩展经验模态分解&#xff08;ICEEMDAN&#xff09;和长短期记忆神经网络&#xff08;LSTM&#xff09;的时间序列预测方法。 …

xss-labs(1-5)

环境准备: 靶场下载:下载仓库 zhangmanhui/xss-labs - Gitee.com 启动phpStudy 搭建将文件解压拉到phpStudy的www目录下就行 最后直接访问:127.0.0.1/xss-labs-master/ 最后再准备一个浏览器的插件用来发送请求:HackBar 插件都配置好了,直接加载到你的浏览器的扩展…

了解激光打标机:技术原理、应用领域与优势

激光打标机是一种利用激光技术进行打标的高科技设备。其技术原理是&#xff0c;通过将高能量密度的激光照射在工件表面&#xff0c;使表面的材料发生物理或化学变化&#xff0c;从而形成永久性的标记。下面将分别介绍激光打标机的技术原理、应用领域和优势。 一、技术原理 激光…

【Verilog】组合电路的设计和时序电路的设计

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 系列文章组合电路的设计时序电路的设计 组合电路的设计 组合电路的特点是&#xff0c…

python(17)--文件的输入/输出

前言 在Python中&#xff0c;文件文本操作是非常重要的&#xff0c;主要有以下几个原因&#xff1a; 数据持久性&#xff1a;当你需要长期存储数据&#xff0c;如用户的个人信息、交易记录或数据库元数据等&#xff0c;将数据保存在文件中是一种常见的方法。文件系统提供了持…

STL容器之vector基本操作

目录 vector基本操作 vector构造函数 vector的遍历操作 1.重载[ ]进行遍历。 2.使用迭代器进行遍历。 3.使用范围for循环进行遍历。 4.使用at成员函数进行遍历 。 vector空间增长 1.size&#xff1a;获取当前元素的个数。 2.capacity&#xff1a;获取能存储的元素的个…

ceres在优化过程中保持指定参数块不变

ceres在优化过程中保持指定参数块不变 在solve前利用SetParameterBlockConstant()设置想固定不变的参数块 example: //添加误差方程 ceres::CostFunction* cost_function nullptr;cost_function BundleAdjustmentGCPsCostFunction::Create(px, py, ptGCP.second.x_c, ptGC…

kettle分页抽取数据

背景 kettle抽取数据大家还是比较熟悉的&#xff0c;kettle在抽取数据的时候会开启很多通道&#xff0c;同时抽取&#xff0c;但是我现在遇到一个场景&#xff1a; 从一个mysql数据库里获取“已办”状态的数据id&#xff0c;然后拿这些id去一个oracle数据库里查询&#xff0c…

CCNP课程实验-06-EIGRP-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错误1&#xff1a;没有配置IP地址&#xff0c;IP地址宣告有误错误2&#xff1a;R3配置了与R1不同的K值报错了。错误3&#xff1a;R4上的AS号配置错&#xff0c;不是1234错误4&#xff1a;R2上配置的Key-chain的R4上配置的Key-chain不一致…

3.7 THREAD SCHEDULING AND LATENCY TOLERANCE

线程调度严格来说是一个实现概念。因此&#xff0c;它必须在特定硬件实现的背景下进行讨论。在迄今为止的大多数实现中&#xff0c;分配给SM的块被进一步分为32个称为warps的线程单元。warps的大小是特定于实现的。warps不是CUDA规范的一部分&#xff1b;然而&#xff0c;了解w…