当前位置: 首页 > 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…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...