©作者 | 风飏

单位 | 阿里巴巴

研究方向 | AIOps/NLP

最近,深度学习的研究中出现了许多大型预训练模型,例如 GPT-3、BERT 等,这些模型可以在多种自然语言处理任务中取得优异的性能表现。而其中,ChatGPT 模型因为在对话生成方面的表现而备受瞩目,成为了自然语言处理领域的热门研究方向。

然而,这些大型预训练模型的训练成本非常高昂,需要庞大的计算资源和大量的数据,一般人难以承受。这也导致了一些研究人员难以重复和验证先前的研究成果。为了解决这个问题,研究人员开始研究 Parameter-Efficient Fine-Tuning(PEFT)技术。

PEFT 技术旨在通过最小化微调参数的数量和计算复杂度,来提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。这样一来,即使计算资源受限,也可以利用预训练模型的知识来迅速适应新任务,实现高效的迁移学习。因此,PEFT 技术可以在提高模型效果的同时,大大缩短模型训练时间和计算成本,让更多人能够参与到深度学习研究中来。下面我们将深入探讨 PEFT 的一些主要做法。

Adapter Tuning

谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的 PEFT 微调方式,拉开了 PEFT 研究的序幕。他们指出,在面对特定的下游任务时,如果进行 Full-fintuning(即预训练模型中的所有参数都进行微调),太过低效;而如果采用固定预训练模型的某些层,只微调接近下游任务的那几层参数,又难以达到较好的效果。

于是他们设计了如下图所示的 Adapter 结构,将其嵌入 Transformer 的结构里面,在训练时,固定住原来预训练模型的参数不变,只对新增的 Adapter 结构进行微调。

同时为了保证训练的高效性(也就是尽可能少的引入更多参数),他们将 Adapter 设计为这样的结构:首先是一个 down-project 层将高维度特征映射到低维特征,然后过一个非线形层之后,再用一个 up-project 结构将低维特征映射回原来的高维特征;同时也设计了 skip-connection 结构,确保了在最差的情况下能够退化为 identity。

从实验结果来看,该方法能够在只额外对增加的 3.6% 参数规模(相比原来预训练模型的参数量)的情况下取得和 Full-finetuning 接近的效果(GLUE 指标在 0.4% 以内)。



Prefix Tuning

Prefix Tuning 方法由斯坦福的研究人员提出,与 Full-finetuning 更新所有参数的方式不同,该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix,然后训练的时候只更新 Prefix 部分的参数,而 Transformer 中的其他部分参数固定。该方法其实和构造 Prompt 类似,只是 Prompt 是人为构造的“显式”的提示,并且无法更新参数,而 Prefix 则是可以学习的“隐式”的提示。

同时,为了防止直接更新 Prefix 的参数导致训练不稳定的情况,他们在 Prefix 层前面加了 MLP 结构(相当于将 Prefix 分解为更小维度的 Input 与 MLP 的组合后输出的结果),训练完成后,只保留 Prefix 的参数。

实验结果也说明了 Prefix Tuning 的方式可以取得不错的效果。

除此之外,作者还做了一系列的消融实验说明该方法的有效性:

1. Prefix 长度的影响:不同的任务所需要的 Prefix 的长度有差异。

2. Full vs Embedding-only:作者对比了 Embedding-only(只有最上层输入处的 Embedding 作为参数更新,后续的参数固定)和 Full(每一层的 Prefix 相关的参数都训练)的方式的效果。

3. Prefixing vs Infixing:对比了 [PREFIX; x; y] 方式与 [x; INFIX; y] 方式的差异,还是 Prefix 方式最好。

4. Initialization:用任务相关的 Prompt 去初始化 Prefix 能取得更好的效果。

Prompt Tuning

论文《The Power of Scale for Parameter-Efficient Prompt Tuning》

我给这篇文章取了个新名字:Scale is All You Need,总的来说就是,只要模型规模够大,简单加入 Prompt tokens 进行微调,就能取得很好的效果。

该方法可以看作是 Prefix Tuning 的简化版本,只在输入层加入 prompt tokens,并不需要加入 MLP 进行调整来解决难训练的问题,主要在 T5 预训练模型上做实验。似乎只要预训练模型足够强大,其他的一切都不是问题。作者也做实验说明随着预训练模型参数量的增加,Prompt Tuning 的方法会逼近 Fine-tune 的结果。

3.1 实验

作者做了一系列对比实验,都在说明:随着预训练模型参数的增加,一切的问题都不是问题,最简单的设置也能达到极好的效果。

  • a)Prompt 长度影响:模型参数达到一定量级时,Prompt 长度为 1 也能达到不错的效果,Prompt 长度为 20 就能达到极好效果。

  • b)Prompt 初始化方式影响:Random Uniform 方式明显弱于其他两种,但是当模型参数达到一定量级,这种差异也不复存在。

  • c)预训练的方式:LM Adaptation 的方式效果好,但是当模型达到一定规模,差异又几乎没有了。

  • d)微调步数影响:模型参数较小时,步数越多,效果越好。同样随着模型参数达到一定规模,zero shot 也能取得不错效果。


P-Tuning

4.1 V1

P-Tuning 方法的提出主要是为了解决这样一个问题:大模型的 Prompt 构造方式严重影响下游任务的效果。

P-Tuning 提出将 Prompt 转换为可以学习的 Embedding 层,只是考虑到直接对 Embedding 参数进行优化会存在这样两个挑战:

  • Discretenes:对输入正常语料的 Embedding 层已经经过预训练,而如果直接对输入的 prompt embedding 进行随机初始化训练,容易陷入局部最优。

  • Association:没法捕捉到 prompt embedding 之间的相关关系。

作者在这里提出用 MLP+LSTM 的方式来对 prompt embedding 进行一层处理

4.1.1 与 Prefix-Tuning 的区别

这篇文章(2021-03)和 Prefix-Tuning(2021-01)差不多同时提出,做法其实也有一些相似之处,主要区别在

  • Prefix Tuning 是将额外的 embedding 加在开头,看起来更像是模仿 Instruction 指令;而 P-Tuning 的位置则不固定。

  • Prefix Tuning 通过在每个 Attention 层都加入 Prefix Embedding 来增加额外的参数,通过 MLP 来初始化;而 P-Tuning 只是在输入的时候加入 Embedding,并通过 LSTM+MLP 来初始化。

4.2 V2 

论文《P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks》

从标题就可以看出这篇文章的野心,P-Tuning v2 的目标就是要让 Prompt Tuning 能够在不同参数规模的预训练模型、针对不同下游任务的结果上都达到匹敌 Fine-tuning 的结果。

那也就是说当前 Prompt Tuning 方法未能在这两个方面都存在局限性。

  • 不同模型规模:Prompt Tuning 和 P-tuning 这两种方法都是在预训练模型参数规模够足够大时,才能达到和 Fine-tuning 类似的效果,而参数规模较小时效果则很差。

  • 不同任务类型:Prompt Tuning 和 P-tuning 这两种方法在 sequence tagging 任务上表现都很差。

4.2.1 主要结构

相比 Prompt Tuning 和 P-tuning 的方法,P-tuning v2 方法在多层加入了 Prompts tokens 作为输入,带来两个方面的好处:

1. 带来更多可学习的参数(从 P-tuning 和 Prompt Tuning 的 0.1% 增加到0.1%-3%),同时也足够 parameter-efficient。

2. 加入到更深层结构中的 Prompt 能给模型预测带来更直接的影响。

4.2.2 几个关键设计因素

  • Reparameterization:Prefix Tuning 和 P-tuning 中都有 MLP 来构造可训练的 embedding。本文发现在自然语言理解领域,面对不同的任务以及不同的数据集,这种方法可能带来完全相反的结论。

  • Prompt Length:不同的任务对应的最合适的 Prompt Length 不一样,比如简单分类任务下 length=20 最好,而复杂的任务需要更长的 Prompt Length。

  • Multi-task Learning 多任务对于 P-Tuning v2 是可选的,但可以利用它提供更好的初始化来进一步提高性能。

  • Classification Head 使用 LM head 来预测动词是 Prompt Tuning 的核心,但我们发现在完整的数据设置中没有必要这样做,并且这样做与序列标记不兼容。P-tuning v2 采用和 BERT 一样的方式,在第一个 token 处应用随机初始化的分类头。


4.2.3 实验结果

  • 不同预训练模型大小下的表现,在小模型下取得与Full-finetuning相近的结果,并远远优于P-Tuning。

  • 不同任务下的 P-Tuning v2 效果都很好,而 P-Tuning 和 Prompt Learning 效果不好;同时,采用多任务学习的方式能在多数任务上取得最好的结果。

  • Verbalizer with LM head v.s. [CLS] label with linear head,两种方式没有太明显的区别

  • Prompt depth,在加入相同层数的 Prompts 前提下,往更深层网络加效果优于往更浅层网络(只有 BoolQ 中 17-24 反而低于 1-8 是例外)。


LoRA

微软和 CMU 的研究者指出,现有的一些 PEFT 的方法还存在这样一些问题:

  • 由于增加了模型的深度从而额外增加了模型推理的延时,如 Adapter 方法

  • Prompt 较难训练,同时减少了模型的可用序列长度,如 Prompt Tuning、Prefix Tuning、P-Tuning 方法

  • 往往效率和质量不可兼得,效果差于 full-finetuning

有研究者对语言模型的参数进行研究发现:语言模型虽然参数众多,但是起到关键作用的还是其中低秩的本质维度(low instrisic dimension)。本文受到该观点的启发,提出了 Low-Rank Adaption(LoRA),设计了如下所示的结构,在涉及到矩阵相乘的模块,引入 A、B 这样两个低秩矩阵模块去模拟 Full-finetune 的过程,相当于只对语言模型中起关键作用的低秩本质维度进行更新。

这么做就能完美解决以上存在的 3 个问题:

  • 相比于原始的 Adapter 方法“额外”增加网络深度,必然会带来推理过程额外的延迟,该方法可以在推理阶段直接用训练好的 A、B 矩阵参数与原预训练模型的参数相加去替换原有预训练模型的参数,这样的话推理过程就相当于和 Full-finetune 一样,没有额外的计算量,从而不会带来性能的损失。

  • 由于没有使用 Prompt 方式,自然不会存在 Prompt 方法带来的一系列问题。

  • 该方法由于实际上相当于是用 LoRA 去模拟 Full-finetune 的过程,几乎不会带来任何训练效果的损失,后续的实验结果也证明了这一点。

在实验中,研究人员将这一 LoRA 模块与 Transformer 的 attention 模块相结合,在 RoBERTa 、DeBERTa、GPT-2 和 GPT-3 175B 这几个大模型上都做了实验,实验结果也充分证明了该方法的有效性。

5.1 Towards a Unified View of PETL

这篇 ICLR2022 的文章研究了典型的 PEFT 方法,试图将 PEFT 统一到一个框架下,找出它们起作用的具体原因,并进行改进。主要研究了三个问题:

  • 典型的PEFT方法有什么联系?

  • 典型的PEFT方法中是哪些关键模块在起作用?

  • 能否对这些关键模块进行排列组合,找出更有用的 PEFT 方法?

5.1.1 通用形式

通过对 Prefix Tuning 的推导,得出了和 Adapter Tuning 以及 LoRA 形式一致的形式。

更近一步地,可以将这些 Tuning 的方法统一在同一套框架下,

包括这几大要素:

  • 的形式

  • 嵌入 Transformer 结构的方式(分为 Parrell 和 Sequential 两种。Parallel 指的是在输入层嵌入,这样与原有结构可以并行计算;Sequential 指的是在输出层嵌入,相当于增加了网路的深度,与原有结构存在依赖关系)

  • 修改的表示层(主要指对 attention层的修改还是对 ffn 层的修改)

  • 组合方式。怎么与原有的参数组合,包括简单相加(Adapter)、门控式(Prefix Tuning)、缩放式(LoRA)三种)

根据这个统一的框架,还另外设计了三种变体Parallel Adapter、Multi-head Parallel Adapter、Scaled Parallel Adapter。

5.1.2 一些实验

哪种嵌入形式更好:Parallel or Sequencial?

答案是:Parallel 更好

对哪块结构做修改更好?Attention or FFN?

  • 当微调的参数量较多时,从结果来看,对 FFN 层进行修改更好一种可能的解释是 FFN 层学到的是任务相关的文本模式,而 Attention 层学到的是成对的位置交叉关系,针对新任务并不需要进行大规模调整。

  • 当微调参数量较少(0.1%)时,对 Attention 进行调整效果更好。

哪种组合方式效果更好?

从结果来看,缩放式的组合效果更好。

5.1.3 结论

基于以上的经验,

  • Scaled parallel adapter is the best variant to modify FFN

  • FFN can better utilize modification at larger capacities

  • modifying head attentions like prefix tuning can achieve strong performance with only 0.1% parameters

研究者设计出最新的结构 MAM Adapter,取得了最好的效果:

案例

6.1 典型应用

[1] https://github.com/mymusise/ChatGLM-Tuning

一种平价的 Chatgpt 实现方案,基于清华的ChatGLM-6B+ LoRA 进行finetune

[2] https://github.com/tloen/alpaca-lora

6.2 PEFT实现

[1] https://github.com/huggingface/peft huggingface PEFT

[2] https://github.com/jxhe/unify-parameter-efficient-tuning

参考文献

[1] Parameter-Efficient Transfer Learning for NLP:

https://arxiv.org/pdf/1902.00751.pdf

[2] Prefix-Tuning: Optimizing Continuous Prompts for Generation:

https://arxiv.org/pdf/2101.00190.pdf

[3] The Power of Scale for Parameter-Efficient Prompt Tuning:

https://arxiv.org/pdf/2104.08691.pdf

[4] BitFit: Simple Parameter-efficient Fine-tuning for Transformer-based Masked Language-models:

https://arxiv.org/pdf/2106.10199.pdf

[5] GPT Understands, Too:

https://arxiv.org/pdf/2103.10385.pdf

[6] TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING:

https://arxiv.org/pdf/2110.04366.pdf

[7] UNIPELT: A Unified Framework for Parameter-Efficient Language Model Tuning:

https://arxiv.org/pdf/2110.07577.pdf

[8] Ladder Side-Tuning:预训练模型的“过墙梯”:

https://kexue.fm/archives/9138

[9] INTRINSIC DIMENSIONALITY EXPLAINS THE EFFECTIVENESS OF LANGUAGE MODEL FINE-TUNING:

https://arxiv.org/pdf/2012.13255.pdf

[10] Prompt-Tuning——深度解读一种新的微调范式:

https://blog.csdn.net/qq_36426650/article/details/120607050

[11] P-tuning:自动构建模版,释放语言模型潜能:

https://kexue.fm/archives/8295

[12] P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks:

https://arxiv.org/pdf/2110.07602.pdf

更多阅读

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

让天下没有难Tuning的大模型:PEFT技术简介相关推荐

  1. CSDN 蒋涛对话阿里达摩院周靖人:魔搭社区,让天下没有难用的 AI 模型

    2012 年,深度学习掀起第三次 AI 浪潮,随后 2016 年,AlphaGo 第一次战胜人类围棋选手,持续引爆 AI 发展浪潮,吸引众多开发者投身其中. 然而开发者很快发现, AI 从研发到落地部 ...

  2. simulink怎么生成vxworks的执行程序_让天下没有难改的Simulink模型

    相信不少用Simulink建模的朋友平时或多或少都会碰到这些情况 拿到几个同事搭的模型做集成,有些同事喜欢用红色设置inport,有些同事喜欢用蓝色设置constant,各种颜色设置,五花八门 如果要 ...

  3. 开放报名|顶尖专家联合打造,首个系统化AI大模型前沿技术讲习班

    大模型正在引发人工智能研究与应用范式产生重大变革,越来越多的顶级团队和杰出人才纷纷加入这一技术浪潮.作为AI大模型科研先锋,智源研究院聚集了来自高校院所和创新企业的一大批大模型领域卓越学者与工程师,共 ...

  4. 大模型微调技术(Adapter-Tuning、Prefix-Tuning、Prompt-Tuning(P-Tuning)、P-Tuning v2、LoRA)

    2022年11月30日,ChatGPT发布至今,国内外不断涌现出了不少大模型,呈现"百模大战"的景象,比如ChatGLM-6B.LLAMA.Alpaca等模型及在此模型基础上进一步 ...

  5. 生成式语言大模型压缩技术思考——以ChatGPT为例

    ChatGPT引领了生成式语言大模型的应用与技术热潮,首先简单回顾ChatGPT应用范式:将其应用于指定的下游任务时(如知识问答.翻译.编码),ChatGPT需要经历三个阶段的训练(增强人类语境的猜想 ...

  6. 一步一步理解大模型:模型组合简介

    模型组合比如Boosting,Bagging和stacking等等的基本思想是将多个较弱的模型合成比较强的一个模型,但它们采用的方法不同. Boosting是将多个预测偏差相对较大的模型,通过组合后降 ...

  7. 大数据数据库技术简介与分类分析

    说起大数据生态,不得不提大数据生态系统图,而大数据行业却不断的发生着巨变,目前的这张图应该还算比较新了. 创业者们蜂拥至这个行业,这个行业正变得越来越拥挤.Hadoop似乎已经奠定了其作为整个大数据生 ...

  8. 大模型的1000+篇文章总结

    大模型的1000+篇文章总结 本文收集和总结了有关大模型的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, 其分享了有关AI的 ...

  9. 直播活动丨BMMeetup第1期:大模型Prompt Tuning技术,8场学术报告和Poster提前下载...

    「Big Model Meetup」系列活动是由智源研究院悟道团队.青源会.清华大学计算机科学与技术系博硕论坛.中国中文信息学会青年工作委员会共同组织,智源社区提供社区支持,PaperWeekly提供 ...

最新文章

  1. python 爬取道客巴巴文档_Python常用的几个高效率的爬虫框架
  2. 每天一香蕉,长成螺纹钢
  3. 【NLP】使用Python可视化Word2vec的结果
  4. 一文看尽10篇目标检测最新论文(SpineNet/AugFPN/LRF-Net/SABL/DSFPN等)
  5. 测试人员与开发人员沟通的一些问题
  6. POJ P1185 炮兵阵地 【状压dp】
  7. python setup.py_python setup.py 构建
  8. Android--线程详解
  9. 2022企业邮箱登陆入口介绍,企业邮箱电脑版登陆入口有哪些?手机如何登陆企业邮箱?
  10. 使用medusa破解密码
  11. Bootstrap 颜色RGB对照表
  12. string.h头文件
  13. datagridview 单击某个单元格选中一行
  14. 攻防世界新手区MISC-如来十三掌
  15. 微软培训和认证的建议
  16. 阿里云人工智能课程(一)机器学习介绍
  17. 学生HTML个人网页作业作品----(画家企业8页)
  18. 2022大作业项目报告
  19. 知乎热榜:计算机专业的学生要怎样做才能避免成为低级的码农?
  20. 【C# 教程系列第 12 篇】抽象类的简单实现

热门文章

  1. 【网络工程】华为设备配置命令
  2. 网络安全的行业黑话 ——防守篇之技术与服务业
  3. sqlserver存储过程进行产量查询
  4. 电商只是百度收购YY目标的冰山一角
  5. 对C++中使用cin输入非法字符(数据格式不匹配)的说明
  6. Linux基础 (安装JDK MySQL 安装Tomcat)
  7. Python OTHERS 01 -- 字符串处理
  8. C#+AE导出为shp
  9. springboot毕设项目便利店管理系统72ub5(java+VUE+Mybatis+Maven+Mysql)
  10. linux磁盘分区/格式化/挂载