清华提出 SoRA,参数量只有 LoRA 的 70%,表现更好!

news2024/11/30 9:41:01

现在有很多关于大型语言模型(LLM)的研究,都围绕着如何高效微调展开。微调是利用模型在大规模通用数据上学到的知识,通过有针对性的小规模下游任务数据,使模型更好地适应具体任务的训练方法。

在先前的工作中,全量微调的训练代价昂贵、Adapter Tuning 的训练和推理存在延迟,Prefix Tuning 会减少原始训练数据中的有效文字长度,因此有人提出使用低秩微调 LoRA,在原始预训练矩阵的旁路上,用低秩矩阵 A 和 B 来近似替代增量更新

近期,又有了新方法助力大型语言模型更高效地适应任务!来自清华的研究团队在 LoRA 的基础上,提出了一项名为 Sparse Low-Rank Adaptation(SoRA)的创新微调方法,通过动态调整内在秩,实现了对预训练模型的高效微调。SoRA 不仅在多项任务上取得了令人瞩目的性能,而且通过稀疏方式显著减少了参数数量,加速了训练过程。

论文题目:
Sparse Low-rank Adaptation of Pre-trained Language Models

论文链接:
https://arxiv.org/abs/2311.11696

GitHub 地址:
https://github.com/TsinghuaC3I/SoRA


微调策略

全量微调

全量微调(full-parameter fine-tuning)是指在微调预训练模型时,对整个模型的所有参数进行调整。

  1. 预训练阶段,模型使用大规模数据集进行训练,学习了通用的语言表示。

  2. 微调阶段,模型根据特定任务或领域的小规模数据集进行进一步训练,以适应特定任务的要求。

全量微调的过程包括调整模型的所有权重和参数,使其更好地适应微调阶段的任务。

  • 优点:模型可以充分利用预训练阶段学到的通用知识。

  • 缺点:需要较大的计算资源和时间,并且在一些小规模任务上容易过拟合。

参数效率微调

参数效率微调是一类微调预训练模型的策略,旨在通过调整模型的部分参数而不是整个参数集,以降低计算成本、提高微调效率,并在小规模任务上取得良好性能。这些方法的核心思想是在保留模型在大规模预训练任务中学到的通用知识的同时,通过有选择地微调模型的部分参数,减少计算开销和提高微调效率,并使其更适应特定任务。这些方法特别是在资源受限或数据有限的情况下很有效。

  1. 适配器(Adapter): 这是一种轻量级的模型扩展方法,通过在预训练模型的层之间插入额外的小型神经网络(适配器)来微调模型。这些适配器仅包含相对较少的参数,因此微调的计算成本相对较低。

  2. 低秩自适应(Low-Rank Adaptation,LoRA): 使用低秩矩阵来近似权重的变化,从而减少需要微调的参数数量。通过冻结大多数预训练权重,只微调低秩矩阵的参数,可以在保留性能的同时显著减少计算开销。

什么是近端正则化?

近端梯度方法是一类优化算法,通常用于处理带有正则化项的优化问题。这类方法结合了梯度下降和近端操作,以有效地在考虑正则化惩罚的同时更新模型参数。

在机器学习中,正则化用于控制模型的复杂性,以防止过度拟合训练数据。近端梯度方法通过在每次迭代中对梯度下降的步骤应用“近端操作”来实现正则化,这通常是指应用软阈值或硬阈值等函数,将每个参数调整到一个接近零的值,以促使模型参数更稀疏或具有低秩性

近端梯度方法的目标是在梯度下降的基础上最小化损失函数,并通过近端操作来确保参数满足正则化的要求。在处理稀疏性和低秩性等正则化问题时非常有用,因为它们能够有效地在梯度下降和正则化之间取得平衡。

回顾 LoRA

LoRA(Low-Rank Adaptation)是用于参数有效微调预训练语言模型的方法。具体来说,如图 1 所示,预训练的权重被冻结,而可训练的 LoRA 模块使用低秩矩阵来近似每个权重矩阵的变化。这个变化矩阵可以分解为两个低秩矩阵的乘积:其中一个用于下投影(down projection),另一个用于上投影(up projection)。通过这种方式,LoRA 可以在微调的过程中调整模型的参数,而不改变主模型的结构。

图片

▲图1 LoRA 的结构

核心思想是使用低秩矩阵来表示权重矩阵的变化,从而在微调中保持模型的参数效率。通过这种方式,LoRA 能够在适应特定任务时保留预训练模型的知识,并且相对于直接对整个模型进行微调,它的参数量更小,计算效率更高。

SoRA 方法

SoRA(Sparse Low-Rank Adaptation)基于 LoRA 进行改进,旨在解决 LoRA 在选择最佳秩时的不灵活性。在 LoRA 中,秩是一个离散的值,其选择会直接改变模型的结构,而 SoRA 的目标是通过引入一种自适应秩选择机制,更灵活地调整模型的秩。

核心思想是自适应秩选择机制,如图 2 所示,SoRA 引入了一个可优化的门控单元(gate),通过使用近端梯度方法(proximal gradient method)来调整这个门控单元,从而实现对模型秩的动态调整。这使得在训练过程中可以自适应地选择最佳的秩,而不再受到离散秩选择的限制。SoRA 的方法相对于 LoRA 更为灵活,能够更好地适应不同的骨干模型和下游任务。

图片

▲图2 稀疏低秩自适应(SoRA)的示意图

构建模块

首先确定一个最大的可接受秩 ,每个 SoRA 模块继承自 LoRA,包括下投影矩阵和上投影矩阵。如何以一种稀疏的方式有效地控制最大秩  呢?受到奇异值分解(SVD)启发,在投影矩阵之间引入一个门控单元 ,SoRA 模块的前向传播表示如下:

图片

优化

使用随机梯度方法,类似于 LoRA 中对下投影和上投影矩阵的优化。每个门控单元  以不同的方式提高稀疏性,并通过以下公式进行更新:

图片

其中, 表示语言模型的原始损失函数, 表示完整的可调参数(包括门), 表示第  次迭代的步长,λ 作为促使稀疏性的正则化强度超参数。此外, 表示下述软阈值(soft-thresholding operation)函数的逐元素广播:

图片

其中  是阈值。

进一步修剪

为减少计算负担,当训练完成后,通过进一步修剪 SoRA 权重来去除被零化的秩,并将模块还原为 LoRA 形式。

调度  以探索记忆和泛化

作者将用于调整模型稀疏性的阈值参数表示为  。在适应过程中,通过动态更改 ,SoRA 可以作为一个有效的工具,用于评估模型 M 和数据 D 下的记忆和泛化方面的行为。

如算法 1 所示,在适应过程中逐步增加  的值,以提升模型的稀疏性。该过程允许评估模型在给定模型 M 和数据集 D 下,达到特定性能水平额外所需的参数量。

图片

▲算法1

SoRA 和 AdaLoRA 的比较

SoRA 和 AdaLoRA(2023 年提出的新方法)都受到了奇异值分解(SVD)的启发,但它们在实现上存在区别:

  1. 正交正则化的应用: SoRA 不使用 AdaLoRA 中采用的正交正则化技术。相反,SoRA 通过使用稀疏化门  来进行秩选择,避免了正交正则化的应用。这样的设计选择是为了减少计算开销,因为坚持 SVD 的原始要求可能导致额外的计算负担。

  2. 移动平均的重要性分数与秩选择的关系: AdaLoRA 中使用移动平均的重要性分数作为启发式参数“敏感性”的度量,用于近似损失变化。然而,SoRA 采用了一种基于软阈值操作(公式 10)的明确秩选择方法。相比之下,SoRA 的秩选择方法更为清晰,而且其合理性得到了通过近端梯度迭代的理论证明。

总体而言,SoRA 的更新规则是通过权衡插值复杂性和最小化正则化损失目标来制定的,这使得其在应对参数敏感性、计算效率等方面具有一定优势。

实验

如下表所示,不论是 AdaLoRA 还是 SoRA,都始终优于初始 baseline —— LoRA,这表明了自适应秩是增强模型适应性的有效解决方案。不过尽管使用更少的参数,SoRA 的表现都比 AdaLoRA 更为出色,这证明了近端梯度方法可能是实现自适应秩更有效和重要的途径。并且,SoRA只需要0.91M的参数,是LoRA的70%,就能够达到89.36%的平均表现,明显优于LoRA的88.38%。展现了SoRA强大的自适应稀疏化能力。

图片

▲表1 SoRA 在 GLUE 基准上的测试结果

为了深入了解自适应秩的有效性,下表的实验结果证实,SoRA 在不同参数预算下都具有优越性

图片

▲表2 在 GLUE 基准上使用不同  初始化的 SoRA 与具有相同秩的 LoRA 进行的比较测试,涉及性能表现和参数量

稀疏调度器

作者通过逐步增加 SoRA 中的稀疏指示器  来在适应过程中动态微调。图 3 展示了在 MRPC、RTE、STS-B、CoLA、QNLI 和 SST-2 数据集上的 RoBERTa-large 的记忆和泛化曲线。其中记忆通过在训练集上的性能衡量,而泛化是通过在验证集上的性能来衡量的。

图片

▲图3 在不同数据集上的记忆和泛化曲线

  • 几乎在所有数据集上都存在强大的“压缩性能”。在 SST-2 上,即使限制了 4 万多个非零参数,模型仍能保持超过 99% 的性能。

  • 存在一些关键参数支撑着性能。随着稀疏化过程的进行,模型在不同的数据上遇到了不同的“拐点”,而后性能显著下降。

  • 模型在不同数据集上的适应难度存在不同程度的差异。某些数据集会更早更显著地导致性能下降。

  • 在稀疏化过程中的记忆和泛化趋势是一致的

  • 中间和深层参数保持其密集的趋势,而浅层参数显示出更高的稀疏性倾向

秩分析

当单一模型适应不同的下游数据集时,会面临不同程度的挑战。同时,并非模型中的所有参数都具有相等的重要性,有些参数对性能的贡献更为关键

通过图 4 的可视化反映了存在不同程度的挑战。此外,确定模型性能和参数的最佳平衡时,需要具体考虑特定的情境和问题,不能一成不变。

图片

▲图4 在四个数据集(即QQP、MNLI、QNLI 和 MRPC)上使用 SoRA 进行训练后的最终秩

效率分析

如表 4 所示,**SoRA 相对于 AdaLoRA 的训练时间减少约 30%**,在训练效率上有明显的优势。相反,尽管在其他数据集上 SoRA 一直领先于 AdaLoRA,但优势并不那么显著。这种差异可能是由于AdaLoRA和SoRA在不同任务下具有不同的秩分布所致。这种分布对于AdaLoRA中正则化计算的影响可能导致了这种效果上的变化。

图片

▲表4 相同 batch size 下,每个 epoch 的平均训练时间

总结

在本文中,作者深入研究了稀疏低秩适应(SoRA)方法,为大型预训练语言模型提供了高效的参数微调策略。通过充分利用内在稀疏性假设,引入可优化的门控单元,并采用近端梯度方法微调稀疏性,SoRA展现了出色的性能,为模型提供了一种灵活的替代秩,从而扩展了优化空间并提升了参数效率。

然而,还要认识到研究中存在一些限制:

  • 实验主要聚焦在传统自然语言处理任务上,对于其他领域的适应性仍需进一步研究。例如,参数高效的方法可能在跨模态或指导微调的场景中具有广泛应用。

  • 虽然稀疏调度器提供了关于语言模型适应过程的思路,但深入解释该过程及更有效地评估适应难度仍然是一个具有挑战性事情。

最后,我们期待未来能有更多研究可以持续推动人工智能领域的发展。通过合理利用计算资源,借助更小规模的参数微调,为大模型“减负”,我们能不断提升模型的性能,拓展模型适应性的边界,更好地应对多样化的任务和数据场景。

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

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

相关文章

【挑战业余一周拿证】二、在云中计算 - 第 1 节 - 模块2 简介

第 1 节 - 模块2 简介 无论你的企业是属于像医疗、保健、制造、保险等等行业 , 再或者 , 您的服务是向全世界的数百万用户提供视频、、图片或者文字服务,你也需要服务器来为您的业务和应用程序提供支持,服务器的作用是帮助您托管应用程序并提供满足您业务需求的计算能力. 当你使…

显示Excel功能区或工具栏的方法不少,其中快捷方式最快

Microsoft Excel是Office套件中最复杂的工具之一,它提供了大量功能,其中大部分都是使用工具栏操作的。缺少工具栏使Excel很难完成工作。 如果Excel中没有这些关键元素,你将无法快速完成工作,因此,可以理解的是&#x…

Rust高性能网络框架:实战案例与代码解析

欢迎关注我的公众号lincyang新自媒体,回复关键字【程序员经典书单】,领取程序员的100本经典书单 大家好!我是lincyang。 今天我们将深入探讨Rust编程语言在实际项目中的应用,并结合具体的代码示例来加深理解。 Rust因其内存安全…

JBase到JRT

JBase之前是站在之前基础上新做的java框架。所以带入一些老的历史习惯,比如库和空间都以LIS开头,实体只能是LIS.Model等。为了做到更通用的框架,需要剔除LIS特性,实体肯定不能只能叫LIS.Model了。同时之前只关注业务脚本化的事忘了…

文件重命名不求人:批量重命名的技巧,告别手动修改文件名

在日常工作中,经常需要处理大量的文件,其中文件重命名是常见的需求。一个个手动修改文件名,不仅费时费力,还容易出错。那么,是否存在一种更高效、更便捷的方式,告别逐个手动修改文件名的繁琐过程呢&#xf…

三数之和问题

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&…

Hexo 还是 Hugo?Typecho 还是 Wordpress?读完这篇或许你就有答案了!

Hexo 首先介绍的是 Hexo,这也是咕咕没买服务器之前折腾的第一个博客。 演示站点:https://yirenliu.cn 用的主题是 butterfly,想当年刚用的时候,作者还没建群,现在 qq 群都有上千人了,GitHub 上的星星数量也有 2.7k 了。 优点 如果你不想买服务器,但也想折腾一个博客,…

【MATLAB源码-第90期】基于matlab的OQPSKsimulink仿真,对比初始信号和解调信号输出星座图。

操作环境: MATLAB 2022a 1、算法描述 正交偏移二进制相移键控(OQPSK, Orthogonal Quadrature Phase Shift Keying)是一种数字调制技术,主要用于高效无线数据传输。它是传统二进制相移键控(BPSK)的一个变…

正则表达式例题-PTA

PTA-7-55 判断指定字符串是否合法-CSDN博客 7-54 StringBuffer-拼接字符串 题目: 输入3个整数n、begin、end。 将从0到n-1的数字拼接为字符串str。如,n12,则拼接出来的字符串为:01234567891011 最后截取字符串str从begin到end(包…

【管理运筹学】背诵手册(六)| 图与网络分析(基本概念、最小支撑树问题、最短路问题)

六、图与网络分析 基本概念、术语 某个边的两个端点相同,称为环;两点之间有多于一条的边,成为多重边。一个无环、无多重边的图称为简单图,无环但允许有多重边的图称为多重图。 次:以 v i v_i vi​ 为端点的边的数目…

【中间件】消息队列中间件intro

中间件middleware 内容管理 introwhy use MQMQ实现漫谈主流消息队列QMQ IntroQMQ架构QMQ 存储模型 本文还是从理论层面分析消息队列中间件 cfeng现在处于理论分析阶段,以中间件例子,之前的blog对于中间件是从使用角度分享了相关的用法,现在就…

Qt 网络通信

获取本机网络信息 &#xff08;1&#xff09;在 .pro 文件中加入 QT network&#xff08;2&#xff09; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QLabel> #include <QLineEdit> #include <QPu…

Spark-06:Spark 共享变量

目录 1.广播变量&#xff08;broadcast variables&#xff09; 2.累加器&#xff08;accumulators&#xff09; 在分布式计算中&#xff0c;当在集群的多个节点上并行运行函数时&#xff0c;默认情况下&#xff0c;每个任务都会获得函数中使用到的变量的一个副本。如果变量很…

SpringBoot——自定义start

优质博文&#xff1a;IT-BLOG-CN 一、Mybatis 实现 start 的原理 首先在写一个自定义的start之前&#xff0c;我们先参考下Mybatis是如何整合SpringBoot&#xff1a;mybatis-spring-boot-autoconfigure依赖包&#xff1a; <dependency><groupId>org.mybatis.spr…

单片机学习6——定时器/计数功能的概念

在8051单片机中有两个定时器/计数器&#xff0c;分别是定时器/计数器0和定时器/计数器1。 T/C0: 定时器/计数器0 T/C1: 定时器/计数器1 T0: 定时器0 T1: 定时器1 C0: 计数器0 C1: 计数器1 如果是对内部振荡源12分频的脉冲信号进行计数&#xff0c;对每个机器周期计数&am…

Linux中部署MongoDB

在 是一个必要的过程&#xff0c;因为MongoDB是一种流行的NoSQL数据库&#xff0c;它可以在大多数操作系统上使用。在本文中&#xff0c;我们将介绍如何在CentOS 8上部署MongoDB。 MongoDB的下载 您可以从MongoDB官网上下载最新的MongoDB版本。使用以下命令下载MongoDB&#…

可以在Playgrounds或Xcode Command Line Tool开始学习Swift

一、用Playgrounds 1. App Store搜索并安装Swift Playgrounds 2. 打开Playgrounds&#xff0c;点击 文件-新建图书。然后就可以编程了&#xff0c;如下&#xff1a; 二、用Xcode 1. 安装Xcode 2. 打开Xcode&#xff0c;选择Creat New Project 3. 选择macOS 4. 选择Comman…

手摸手vue2+Element-ui整合Axios

后端WebAPI准备 跨域问题 为了保证浏览器的安全,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,称为同源策略,同源策略是浏览器安全的基石 同源策略( Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能 所谓同源(即指在同一个域)就是两个页面具…

论文公式和代码对应

NGCF 论文地址 NGCF模型全部代码 import torch import torch.nn as nn import torch.nn.functional as F class NGCF(nn.Module):def __init__(self, n_user, n_item, norm_adj, args):super(NGCF, self).__init__()self.n_user n_userself.n_item n_itemself.device args…

传奇,全职业刀刀烈火原理揭秘

相信很多朋友都玩过传奇, 今天我们来揭秘一下,刀刀烈火的实现原理, 其实非常简单. 烈火作为一个技能,使用流程是先释放技能, 获得一个烈火附加的状态,那么下一次攻击就会带烈火效果了. 这里我们拿烈火附加状态,当突破口,进行扫描即可. 绝大部分情况应该是有状态为1(真),没状…