当前位置: 首页 > news >正文

大规模预训练语言模型的参数高效微调

 人工智能咨询培训老师叶梓 转载标明出处

大规模预训练语言模型(PLMs)在特定下游任务上的微调和存储成本极高,这限制了它们在实际应用中的可行性。为了解决这一问题,来自清华大学和北京人工智能研究院的研究团队探索了一种优化模型中一小部分参数的方法,同时保持其他参数不变,以大幅降低计算和存储成本。研究团队提出了“delta-tuning”这一概念,将优化的参数部分称为“delta”,即在训练过程中被“改变”的参数部分。他们对现有的delta-tuning方法进行了统一的分类,并探讨了这些方法之间的联系和差异。

  • 论文链接:https://www.nature.com/articles/s42256-023-00626-4

  • OpenDelta 工具包:https://github.com/thunlp/OpenDelta

方法

Delta-tuning是建立在PLMs基础上的,PLMs使用深度transformers作为基础结构,并在大规模未标记语料库上进行预训练。给定一个预训练模型Θ={w1, w2, ..., wN}和训练数据,PLM适应的目标是产生一个调整后的模型Θ′={w′1, w′2, ..., w′M},其中ΔΘ表示与Θ相比Θ′中的参数变化,包括值的变化和元素数量的变化。在传统的微调中,N=M,ΔΘ是所有参数的更新值。而在Delta-tuning中,ΔΘ指的是一小部分参数的修改,实际上|ΔΘ|≪|Θ|。

研究者们将Delta-tuning方法分为三类:

  1. Addition-based方法:这类方法通过引入额外的可训练神经模块或参数来扩展原有模型。例如,Adapter-based tuning通过在Transformer层中插入小型的神经模块(adapters),并且只对这些adapters进行微调。每个adapter模块包括一个下投影和一个上投影,通过这种方式,只有模型中很小一部分参数被调整。

  2. Specification-based方法:这类方法通过指定模型中某些参数为可训练,而其他参数保持不变。例如,BitFit方法通过只优化模型中的偏置项来实现微调,而其他参数则保持冻结。

  3. Reparameterization-based方法:这类方法通过变换将现有参数转换为参数高效的形式。例如,LoRA方法通过优化自注意力模块中原权重矩阵变化的低秩分解来实现参数的高效调整。

在Addition-based方法,分为Adapter-based tuning和Prompt-based tuning两种策略:

  • Adapter-based tuning:通过在Transformer层中插入小型的神经模块(adapters),并且只对这些adapters进行微调。这种策略允许在不改变原有模型结构的情况下,通过调整少量参数来适应新任务。Adapter模块包括下投影和上投影,以及一个非线性激活函数,通过这种方式,只有模型中很小一部分参数被调整。

  • Prompt-based tuning:与直接向模型中注入神经模块不同,prompt-based方法通过在原始输入周围添加额外的上下文来刺激PLMs。这种方法在低数据设置下在各种NLP任务中表现出色。例如,prefix-tuning在每个Transformer层的输入和隐藏状态前添加可训练的连续标记(prefixes),而其他预训练模型的参数在训练期间保持不变。

实践中,prompt-tuning的优化存在一定的困难。特别是当训练数据量和模型规模较小时,这种优化难度更加明显。即便可以成功训练soft prompts,它们在训练过程中的收敛速度通常比全参数微调和其他delta-tuning方法要慢。研究者们在不同数据集上验证了这一现象,并指出在各种情况下训练soft prompts以稳定收敛是一个有趣的研究课题。

Specification-based方法在模型适应过程中只对少数固有参数进行微调,而保持大部分参数不变。这种方法的目的不是改变模型的内部结构,而是优化一小部分内部参数来解决特定任务。通常,这些参数的选择可以基于启发式规则或训练监督。

  • 启发式规范(Heuristic specification):这种方法不向模型引入任何新参数,而是直接指定部分参数进行优化。例如,早期研究只微调BERT和RoBERTa最后一层的四分之一,就能达到全参数微调90%的性能。BitFit方法证明了只优化模型内的偏置项,冻结其他参数,模型仍然能在多个基准测试中复现超过95%的性能。

  • 学习规范(Learn the specification):与手动或启发式指定更新哪些参数不同,另一种选择是“学习”这些规范。Diff pruning方法重新参数化微调后的模型参数Θ′为预训练参数Θ和差异向量ΔΘ的和,即Θ′=Θ+ΔΘ。这种方法通过可微分的L0范数罚项近似来鼓励差异向量尽可能稀疏。

Reparameterization-based方法在优化过程中将自适应参数转换为参数高效的形式。这种delta-tuning分支通常基于假设:PLM对大多数下游任务的适应性本质上是低秩的,因此可以以参数高效的方式完成。

  • 内在维度(Intrinsic dimensions):先前的研究表明,预训练模型的全参数微调过程可以在低维子空间内重新参数化,即微调具有低内在维度,这表示达到满意性能所需的最小参数数量。实验发现,相对较低维度的重新参数化(例如,几千维)就能实现超过85%的微调性能。

  • 权重差异的内在秩(Intrinsic rank):LoRA方法假设模型调整过程中权重变化具有低内在秩。基于这一假设,提出优化自注意力模块中原权重矩阵变化的低秩分解。在部署中,优化后的低秩分解矩阵相乘以获得自注意力权重矩阵的增量。

  • 多重适应的内在空间(Intrinsic space):进一步地,内在prompt-tuning提出了一个更强的假设,即对多项任务的适应性可以在同一低维内在子空间内重新参数化。通过将多个NLP任务训练的soft prompts分解到同一低维非线性子空间中,然后只通过调整子空间中的参数来学习适应未见任务或数据。

实验

实验设置:

  • 研究者们评估了传统的全参数微调(FT)和四种代表性的delta-tuning方法:prompt-tuning(PT)、prefix-tuning(PF)、LoRA(LR)和adapter(AP)。
  • 实验涵盖了超过100个来自Huggingface数据集的NLP任务,包括文本分类、问答、条件生成等。
  • 使用了T5BASE和T5LARGE两种规模的PLM模型作为实验的PLM骨架。

性能分析:

  • 性能:不同的delta-tuning方法在大多数情况下与FT方法的性能相当,尽管可调参数大幅减少。这表明通过参数高效适应性可以驱动大规模PLMs。
  • 收敛性:FT方法的收敛速度最快,其次是AP和LR,然后是PF。PT方法在收敛性上通常落后于其他方法。
  • 效率:delta-tuning方法在减少计算和存储效率方面表现出显著优势,尤其是BitFit方法在内存效率方面表现最佳。

组合delta-tuning方法

  • 研究者们探讨了同时应用三种代表性delta-tuning方法(PT、BitFit和AP)的效果,发现结合使用这些方法通常比单一方法更有效。
  • 还研究了这些方法的顺序组合,发现在某些情况下,后续的delta-tuning方法可以提高性能,但并不存在一种在所有设置下都最优的组合策略。

规模效应

  • 随着PLM模型规模的增长,所有delta-tuning方法的性能和收敛速度都得到了显著提升,即使是小规模的PLM(如T5BASE),delta-tuning方法也能与FT方法相媲美。
  • 研究者们还设计了两种新的delta-tuning方法:最后一层调整(last-layer tuning)和选择性模块调整(selective-module tuning),发现当PLM规模极大时,随机选择模块进行优化可以获得出色的性能。

跨任务迁移能力

  • 研究者们评估了四种delta-tuning方法(PT、PF、AP和LoRA)在12个不同类型的任务上的跨任务迁移能力,发现同一类别的任务之间迁移调优参数通常表现良好,而不同类型的任务之间的迁移性能较差。

结论

  • 不同的delta-tuning方法对PLMs的优化具有不同的功能,因此将它们结合起来通常有利于提高下游任务的性能。
  • 研究者们鼓励未来的研究探索系统地报告他们提出的delta-tuning方法在不同PLM骨架下的性能。

相关文章:

大规模预训练语言模型的参数高效微调

人工智能咨询培训老师叶梓 转载标明出处 大规模预训练语言模型(PLMs)在特定下游任务上的微调和存储成本极高,这限制了它们在实际应用中的可行性。为了解决这一问题,来自清华大学和北京人工智能研究院的研究团队探索了一种优化模型…...

一场大模型面试,三个小时,被撞飞了

去华为面试大模型,一点半去五点半回,已经毫无力气。 1️⃣一轮面试—1小时 因为一面都是各个业务的主管,所以专业性很强,面试官经验很丰富,建议大家还是需要十分熟悉所学内容,我勉强通过一面。 2️⃣二轮…...

Python每次for循环向list中添加多个元素

Python中,我每次for loop要产生几个结果。要将这些结果加到一个list中。怎么最高效? 答: list extend 方法 在Python中,如果你想在循环中将多个元素添加到列表中,最直接和最高效的方式是使用列表的 append() 方法。每次循环时&a…...

Java爬虫抓取数据的艺术

在信息时代,数据的重要性不言而喻。对于Java开发者来说,掌握如何使用Java进行数据抓取是一项宝贵的技能。通过编写爬虫程序,我们可以从互联网的海量信息中提取有价值的数据,用于市场分析、客户洞察、内容监控等多种场景。本文将介…...

Unity场景内画车道线(根据五阶曲线系数)

之前做过使用Dreamteck Splines插件构建车道线之前需求是给定车道线的点位,根据点位来进行构建。 由于AI识别出来的点位不线性,画出来的车道线经常是歪七扭八,所以使用五阶曲线系数进行构建。 使用在线图形计算器进行测试构建,公式…...

IPLOOK百万级用户容量核心网惊艳亮相北京PT展

2024年9月25日,以“推动数实深度融合,共筑新质生产力”为主题,本届中国国际信息通信展(PT展)在北京国家会议中心正式拉开帷幕。 广州爱浦路网络技术有限公司(简称:IPLOOK)&#xff…...

家庭网络的ip安全性高吗

家庭网络的IP安全性是一个重要的话题,涉及到如何保护家庭设备和用户的隐私。家庭网络的安全性既有其优势,也存在一些潜在的风险。以下是关于家庭网络IP安全性的几个关键点: 1. 家庭网络的优势 私有IP地址的使用 家庭网络中的设备通常使用私…...

LLM阅读推荐

(按名称排序) 【徹底解説】これからのエンジニアの必携スキル、プロンプトエンジニアリングの手引「Prompt Engineering Guide」を読んでまとめてみた(opens in a new tab)3 Principles for prompt engineering with GPT-3(opens in a new tab)A beginn…...

计算机网络笔记001

讲义 1.计算机网络的定义  定义: 一批独立自治的计算机系统的互连集合体  说明: 独立自治的计算机系统, 互连的手段是各种各样的, 依据协议进行 工作  2.计算机网络和通信网络  通信网络: 重点研究通…...

如何用IDEA连接HBase

编写java代码,远程连接HBase进行相关的操作 一、先导依赖 代码如下: 二、连接成功...

【JS代码规范】如何优化if-else代码规范

1. 快速结束&#xff0c;减少没必要的else 案例一&#xff1a;2种互斥的条件判断 function test(data) {let result ;if (data < 0) {result 负数;} else {result 非负数;}return result; }优化一&#xff1a; function test(data) {if (data < 0) {return 负数;} …...

MovieLife 电影生活

MovieLife 电影生活 今天看到一个很有意思的项目&#xff1a;https://www.lampysecurity.com/post/the-infinite-audio-book “我有一个看似愚蠢的想法。通常&#xff0c;这类想法只是一闪而过&#xff0c;很少会付诸实践。但这次有所不同。假如你的生活是一部电影&#xff0c…...

网工内推 | 中级云运维工程师,双休,五险一金

01 博达人才 &#x1f537;招聘岗位&#xff1a;中级云运维工程师 &#x1f537;岗位职责 1、受理数据中心、云租户投诉、受理故障工单&#xff0c;并在时限内完成。 2、协助客户开通云产品&#xff0c;解答客户使用过程中的疑问。 3、处理云产品故障&#xff0c;协助进行故…...

Thingsboard规则链:Related Entity Data节点详解

引言 在复杂的物联网&#xff08;IoT&#xff09;生态系统中&#xff0c;数据的集成与分析是实现高效管理和智能决策的基础。Thingsboard作为一个强大的开源物联网平台&#xff0c;其规则链&#xff08;Rule Chains&#xff09;机制允许用户构建自定义的数据处理流程。其中&am…...

C++结尾

面试题 1.什么是虚函数&#xff1f;什么是纯虚函数 在定义函数时前面加virtual。虚函数是为了&#xff0c;父子类中只有一个该函数。如果在子类重写虚函数&#xff0c;那么用的就是子类重写的虚函数&#xff1b;如果子类没有重写虚函数&#xff0c;那么调用的是父类继承的虚函…...

Flutter鸿蒙化环境配置(windows)

Flutter鸿蒙化环境配置&#xff08;windows&#xff09; 参考资料Window配置Flutter的鸿蒙化环境下载配置环境变量HarmonyOS的环境变量配置配置Flutter的环境变量Flutter doctor -v 检测的问题flutter_flutter仓库地址的警告问题Fliutter doctor –v 报错[!] Android Studio (v…...

Vue入门之生命周期

文章目录 一、Vue 生命周期概述二、生命周期的四个阶段1. 创建阶段2. 挂载阶段3. 更新阶段4. 销毁阶段 三、代码案例四、总结 在 Vue 开发中&#xff0c;理解生命周期是非常重要的。Vue 的生命周期可以帮助我们在不同的阶段执行特定的逻辑&#xff0c;从而更好地控制组件的行为…...

UNI-SOP应用场景(1)- 纯前端预开发

在平时新项目开发中&#xff0c;前端小伙伴是否有这样的经历&#xff0c;hi&#xff0c;后端小伙伴们&#xff0c;系统啥时候能登录&#xff0c;啥时候能联调了&#xff0c;这是时候往往得到的回答就是&#xff0c;再等等&#xff0c;我们正在搭建系统呢&#xff0c;似曾相识的…...

力扣9.23

1014. 最佳观光组合 给你一个正整数数组 values&#xff0c;其中 values[i] 表示第 i 个观光景点的评分&#xff0c;并且两个景点 i 和 j 之间的 距离 为 j - i。 一对景点&#xff08;i < j&#xff09;组成的观光组合的得分为 values[i] values[j] i - j &#xff0c;…...

[Redis][事务]详细讲解

目录 0.什么是事务&#xff1f;1.Redis 事务本质2.Redis 事务意义3.事务操作1.MULTI2.EXEC3.DISCARD4.WATCH5.UNWATCH 0.什么是事务&#xff1f; Redis的事务和MySQL的事务概念上是类似的&#xff0c;都是把一系列操作绑定成一组&#xff0c;让这一组能够批量执行Redis事务和M…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...