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

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

大规模预训练语言模型(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分解到同一低维非线性子空间中,然后只通过调整子空间中的参数来学习适应未见任务或数据。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加助理微信:amliy007,29.9元即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory,关注享粉丝福利,限时免费CSDN听直播后的录播讲解。
LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

实验

实验设置:

  • 研究者们评估了传统的全参数微调(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骨架下的性能。

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

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

相关文章

四川凭什么能成为中国的战略腹地?

四川因其独特的地理位置、丰富的资源、雄厚的工业基础、庞大的人口及复杂多样的地形等,就在今年1月份的时候,国务院正式批复了一份重磅文件,四川被国务院正式定位为战略腹地,即全体中国人的退路和国家的备份省。 那么四川凭什么能…

STM32(F103ZET6)第四课:串口中断

目录 需求一、串口中断过程与作用二、中断实现流程1.中断优先级分组2.配置串口中断 三、需求的实现 需求 1.设备上电后四个灯灭。 2.按下KEY1,LED1灯亮,同时串口发送“LED1灯亮”。 3.再次按下KEY1,LED1灯灭,同时串口发送“LED1灯…

android studio 新建java工程, 安卓新建项目,android studio2024 如何新建java项目

主要解决,新增安卓工程,没有java选项 1. 点击左上角FIle -> New -> 2. 选择 no activity 选项, 然后next 3. langua 就可以选择java 了。name自己定义项目名称,项目存储地址,包名。 配置完成选择finish. 4. fin…

Rust Web框架怎么选?

在最新的web框架基准测试中 https://www.techempower.com/benchmarkshttps://web-frameworks-benchmark.netlify.app/result?lrust 除去一些没有发布分支或者已经很少维护或者不是rust写的框架外,可以看到Axum、Actix-web是目前性能最好的两款后端框架&#xff0…

python,json数据格式,pyecharts模块,pycharm中安装pyecharts

json数据格式 JSON是一种轻量级的数据交互格式 可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能: json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互. 类似于: 国…

手撕python之基本数据类型以及变量

​​​​​​1.基础概念 python就是将不同的数据划分成了不同的类型 就像我们生活中的数据有数字、字符等数据一样 小知识点: 注释:# 全体注释:AltF3 取消注释:AltF4 2.数值类型 数值类型概括 数值类型分为三种&#xff…

JavaWeb JavaScript ⑤ JS常见对象

某一瞬间,是平静的自我接纳 —— 24.8.27 一、数组 1.创建数组的四种方式 ① new Array() 创建空数组 ② new Array(5) 创建数组时给定长度 ③ new Array(ele1,ele2,…,elen); 创建数组时给定元素值 ④ [ele1,ele2,…,elen] 相当于…

【STM32单片机_(HAL库)】3-4-3【中断EXTI】【智能排队控制系统】排队系统代码框架搭建

3-4-2系统框图及硬件接线 3.软件 beep、exti、gate、LCD1602、led、tasks驱动文件添加GPIO常用函数中断配置流程main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "tasks.h" #include "gate.h"…

腾讯浙大提出定制化视频生成框架CustomCrafter,只需通过少量图像就可以完成高质量视频生成!

腾讯联合浙大提出了一种定制化视频生成框架-CustomCrafter,它能够基于文本提示和参考图像生成自定义视频,同时保留运动生成和概念组合的能力。通过设计一系列灵活的模块,使得模型实现了无需额外视频,通过少量图像学习,…

嵌入式:用J-Link Commander和J-Flash进行Flash编程的区别

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 J-Link Commander和J-Flash都是用于Flash编程的工具,但它们的功能和应用场景有所不同。以下是两者的区别: J-Link Commander: 类型: 命令行工…

机械学习—零基础学习日志(如何理解概率论4)

当已知一个概率,求解另外一个函数的概率。以下是离散型的概率计算方法。 这里是连续型的,已知概念密度,计算对应的另外一个函数的概率。 这里需要求解对应的原始函数。 这里我们做一道练习题。 《概率论与数理统计期末不挂科|考研零基础入门…

什么是Redis大key问题?如何解决?

目录 Key多大算大呢? 识别big key 处理big key Big Key是Redis中存储了大量的数据的Key,不要误以为big key只是表示Key的值很大,他还包括这个Key对应的value占用空间很多的情况,通常在String、list、hash、set、zset等类型中出…

使用Vue创建cesium项目模版该如何选择?

目录 问题描述模版说明及选用建议小结 问题描述 刚入手这个项目,什么都是一知半解。使用Vue,创建Cesium项目的时候,提示需要选择一个模版(如下图所示),该如何选择项目模版选,总结如下: 模版说明…

大模型入门到精通——Prompt Engineering工程

Prompt Engineering 1. Prompt Engineering 的意义 在 LLM(大语言模型)时代,Prompt Engineering(提示工程)已经成为开发者与用户的重要技能和概念。随着大模型(如 GPT、GLM、BERT 等)的快速发…

8.26DEBUG

线程负责监听和处理不同的需求 顾客:代表需要被监控的文件句柄或网络socket,他们可能有各种需求,如点餐(发送数据)、询问菜品状态(读取数据)或需要帮助(异常处理) 菜单…

数据结构(邓俊辉)学习笔记】串 05——KMP算法:理解next[]表

文章目录 1.快速移动2.避免回溯3.通配哨兵 1.快速移动 在接下来这节,就让我们从严格的意义上来理解 next 表的具体含义及其原理。 我们已经切实地看到, KMP 算法的优化效果首先体现在它可以使模式串得以快速地后移,而不是如蛮力算法那样只…

【STM32单片机_(HAL库)】3-4-4【中断EXTI】【智能排队控制系统】项目实现

3-4-2系统框图及硬件接线 3-4-3系统代码框架搭建 4.软件—tasks.c文件编写 排队控制系统状态机 tasks.c #include "tasks.h" #include "led.h" #include "beep.h" #include "exti.h" #include "lcd1602.h" #include &…

22. K8S及DevOps

22. K8S及DevOps 一. 章节简介二. DevOps1. 简介2. CICD三. Kubernetes[1. 官网](https://kubernetes.io/zh-cn/)--------------------------------------------------------------------------------------------------------一. 章节简介 二. DevOps 1. 简介 2. CICD

【C语言】文件操作 (详细!!)

1、为什么使用文件 使用文件的原因:使用文件主要是为了在程序的执行过程中保存、读取和交换数据。文件提供了一种持久化存储数据的方式,使得程序在关闭后,数据不会丢失,可以被其他程序或后续的程序执行周期重新读取和处理。 1.0 什…

Spring Boot启用GZIP压缩

1.为什么是需要gzip压缩? 经常我们都会与服务端进行大数据量的文本传输,例如 JSON 就是常见的一种格式。通过 REST API 接口进行 GET 和 POST 请求,可能会有大量的文本格式数据提交、返回。然后对于文本,它有很高的压缩率&#x…