从统一视角看各类高效finetune方法

article/2025/9/24 19:25:25

每天给你送来NLP技术干货!


来自:圆圆的算法笔记

随着预训练模型参数量越来越大,迁移学习的成本越来越高,parameter-efficient tuning成为一个热点研究方向。在以前我们在下游任务使用预训练大模型,一般需要finetune模型的所有参数。随着parameter-efficient tuning技术的发展,一些注入adaptor、prefix tuning、LoRA等成本更低的finetune方法被提出。那么各种各样的parameter-efficient tuning方法之间是否存在某些潜在的关系呢?ICLR 2022就有一篇相关的研究,从统一的视角理解现有的各类parameter-efficient tuning方法,并提出了一套迁移框架,可以实现更接近全量参数finetune效果的部分参数finetune

adcda93071b7949b84708c733f47fe18.png

  • 论文标题:TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING

  • 下载地址:https://arxiv.org/pdf/2110.04366.pdf

1

各类tuning方法回顾

比较经典的高效finetune方法主要包括adaptor、prefix-tuning、LoRA这三类,这里进行一个简单的回顾。

Adaptor核心是在原Bert中增加参数量更小的子网络,finetune时固定其他参数不变,只更新这个子网络的参数。Adaptor是最早的一类高效finetune方法的代表,在Parameter-Efficient Transfer Learning for NLP(ICML 2019)这篇文章中被提出。在原来的Bert模型的每层中间加入两个adapter。Adapter通过全连接对原输入进行降维进一步缩小参数量,经过内部的NN后再将维度还原,形成一种bottleneck的结构。在finetune过程中,原预训练Bert模型的参数freeze住不更新,只更新adapter的参数,大大减少了finetune阶段需要更新和保存的参数量。

9cc0427a502907e4a8b47f25fec623ad.png

Prefix-tuning的核心是为每个下游任务增加一个prefix embedding,只finetune这些embedding,其他参数freeze。Prefix-tuning对应的论文是Prefix-Tuning: Optimizing Continuous Prompts for Generation(2021),这类方法的思想来源于prefix prompt,prefix embedding相当于一个上下文信息,对模型最终产出的结果造成影响,进而只finetune这个embedding实现下游任务的迁移。

a981899b141734069e62393126c26bd6.png

LoRA的核心是通过引入参数量远小于原模型的可分解的两小矩阵建立一个旁路,通过finetune这个旁路来影响预训练模型。LoRA于LoRA: Low-rank adaptation of large language models(2021)论文中被提出,利用低秩矩阵替代原来全量参数的训练,提升finetune效率。

f423ea3c94e968b4304235651ce97104.png

2

统一视角看高效finetune方法

ICLR 2022的这篇文章从统一的视角来看各类不同的parameter-efficient tuning方法。首先对于prefix tuning,Transformer的每个head的结果可以进行如下的公式推导变换:

bc2c59e0836fb9acec0ad807d5f1ef18.png

其中,第一行的P就是prefix embedding,C对应着key和value的序列向量,x代表query。经过中间的变换后,可以发现prefix tuning的attention计算可以分为两个部分的加权求和,第一部分是原始的attention,第二部分是和key或value无关的一项,只用query和prefix embedding进行self-attention的计算。而权重则是根据prefix embedding的attention权重。通过上述公式,我们可以从另一个视角来看prefix-tuning:即在原始attention的输出结果上,对位相加一个由prefix embedding得到的attention值,实现对原始attention score的修正

我们再来看Adaptor和LoRA两种tuning方式的数学表示。Adaptor和LoRA方法可以分别表示为如下公式:

f1e0ca9a99c04c7e55b98c344b38828c.png

我们把prefix embedding也可以转换成相同的表达形式:

32c5e57f7a09814a5c6a9ca73a517339.png

可以发现这些finetune方法都具有相似的表达形式。并且,prefix-tuning中prefix embedding的数量其实和Adapter中降维的维度具有相似的功能。三种方法在这个视角下的对比如下图所示:

953647963d50d1e3fea22e36688698b2.png

3

统一的高效finetune框架

既然上述几类方法表达形式相似,并且主要学的都是如何修改原来attention的输出结果,那么我们可以建立一个统一的框架,涵盖上述各类finetune方法。这个框架的核心是如何生成修改原始attention score的向量。为了生成这个向量,需要考虑以下4个核心模块:

  • Functional Form:用什么样的函数生成,上述方法基本都是全连接降维+激活函数+全连接升维的形式,当然也可以设计更复杂的函数形式;

  • Modified Representation:对哪个位置的信息进行直接修改;

  • Insertion Form:向量引入的形式,Adapter采用的是串联的方式,根据上一层的隐状态生成向量;而prefix tuning和LoRA采用并联的方式,直接根据输入序列生成向量;

  • Composition Function:向量的使用方式,利用adapter中采用简单的对位相加的形式。

Adapter、Prefix-tuning、LoRA等方法按照 上面4个维度拆分,各自的实现形式如下表:

2b897230c2701e5f0f9b1c86e999524e.png

接下来,文中基于上述4个模块设计了一些新的方法:

  • Parallel Adapter:将Adapter的串联形式修改为并联形式;

  • Multi-head Parallel Adapter:在Parallel Adapter基础上修改了Modified Representation,使用旁路向量修改attention输出结果;

  • Scaled Parallel Adapter:将LoRA的scaling引入进来。

162312d8701a7f8e496e0099d807cfb1.png

4

实验结果

本文由于站在了更高的视角,看到了parameter-efficient tuning的统一形式,因此可以实现更加灵活的建模方式,基于这个框架寻找最节省参数量、最能达到更好效果的结构。从下图可以看出,本文提出的方法实现接接近全量参数finetune的效果,参数量也比Adapter、LoRA等方法有所减少。

d1fc616b19be2c6ca81fa41e98ab03c6.png

文中通过大量的实验对比各个模块采用什么样的形式能带来最好的效果-效率的这种,并最终提出最优的模型MAM-Adapter。核心的实验发现包括:并联的方式比串联的好;对FFN输出结果的修改比对Attention输出结果修改要好等。

ce21bdbe0fa8793b674a2728b2221c7d.png

5

总结

本文从统一视角看parameter-efficient tuning,实现了更高视角的最优tuning框架设计。这也启发我们寻找同类问题不同建模方式背后原理的统一性,能够跳出一种模型结构去看各类建模方式的相似性,实现更高视角下对问题的理解。

📝论文解读投稿,让你的文章被更多不同背景、不同方向的人看到,不被石沉大海,或许还能增加不少引用的呦~ 投稿加下面微信备注“投稿”即可。

最近文章

COLING'22 | SelfMix:针对带噪数据集的半监督学习方法

ACMMM 2022 | 首个针对跨语言跨模态检索的噪声鲁棒研究工作

ACM MM 2022 Oral  | PRVR: 新的文本到视频跨模态检索子任务


点击这里进群—>加入NLP交流群和求职群


http://chatgpt.dhexx.cn/article/Jk4T6NoQ.shtml

相关文章

finetune

finetune的含义是获取预训练好的网络的部分结构和权重,与自己新增的网络部分一起训练。下面介绍几种finetune的方法。 完整代码:https://github.com/toyow/learn_tensorflow/tree/master/finetune 一,如何恢复预训练的网络 方法一&#xf…

11.2 模型finetune

一、Transform Learning 与 Model Finetune 二、pytorch中的Finetune 一、Transfer Learning 与 Model Finetune 1. 什么是Transfer Learning? 迁移学习是机器学习的一个分支,主要研究源域的知识如何应用到目标域当中。迁移学习是一个很大的概念。 怎么理解源域…

飞桨深度学习学院零基础深度学习7日入门-CV疫情特辑学习笔记(四)DAY03 车牌识别

本课分为理论和实战两个部分 理论:卷积神经网络 1.思考全连接神经网络的问题 一般来收机器学习模型实践分为三个步骤,(1)建立模型 (2)选择损失函数 (3)参数调整学习 1.1 模型结构不…

unity sdk(android)-友盟推送SDK接入

注意:一开始想接友盟Unity的SDk,但是导入后缺少各种jar,所以最后还是接了android的,demo文档齐全 官方文档:开发者中心 按照官方文档对接即可, 接入流程 1、项目中com.android.tools.build:gradle配置&…

友盟推送学习

一、首次使用U_Push 1、首先注册友盟账号,进入工作台,选择产品U_Push。 2、创建应用 3、在自己的项目中自动集成SDK 开发环境要求: Android Studio 3.0以上 Android minSdkVersion: 14 Cradle: 4.4以上 在根目录build.gradle中添加mav…

Android 学习之如何集成友盟推送

我是利用Android studio 新建一个空的Android项目。 步骤一 导入第三方库 1.切换Android项目状态为Project状态 2.在main文件下新建 jniLibs文件夹(用来导入PushSDK项目下lib文件中的so文件) 3.在libs文件夹下添加友盟PuskSDK中的 jar 文件&#xff…

用PaddlePaddle(飞浆)实现车牌识别

项目描述:本次实践是一个多分类任务,需要将照片中的每个字符分别进行识别,完成车牌的识别 实践平台:百度AI实训平台-AI Studio、PaddlePaddle1.8.0 动态图 数据集介绍(自己去网上下载车牌识别数据集) 数据…

深度学习(五) CNN卷积神经网络

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 CNN卷积神经网络 前言一、CNN是什么?二、为什么要使用CNN?三、CNN的结构1.图片的结构2.卷积层1.感受野(Receptive Field)2.卷积…

CNN网络实现手写数字(MNIST)识别 代码分析

CNN网络实现手写数字(MNIST)识别 代码分析(自学用) Github代码源文件 本文是学习了使用Pytorch框架的CNN网络实现手写数字(MNIST)识别 #导入需要的包 import numpy as np //第三方库,用于进行科学计算 import torc…

Android删除chartty证书,C/C++知识点之android应用安全分析

本文主要向大家介绍了C/C知识点之android应用安全分析,通过具体的内容向大家展示,希望对大家学习C/C知识点有所帮助。 应用名 :OKEx(OKEx-android.apk) 包名 :com.okinc.okex MD5 :1ffbd328d13e91b661592cdf58516bd2 版…

代码编写过程 - 正确率折线图

获取绘图函数 首先,看到需要画acc和loss图。先去参考现成的,于是打开猫12分类,找到生成折线图的地方。 发现框内的两个函数绘制了折线图。既然是作为函数出现,说明已经有一定的封装,考虑能不能把整个函数搬走用。 由…

李宏毅机器学习课程HW03代码解释

作业3任务是将图片进行分类 从官网上下载数据到data文件里面。此外,将代码分为三个模块,分别是dataset,model以及main。 一、dataset模块 此模块作用是读取图片数据。 重要函数:os.path.join(path,x) 将path和x路径组合在一起 #导入库…

接入友盟厂商push通道遇到的坑

目录 调试友盟Push问题的检查清单 客户端、服务端数据协议 客户端接入方式 小米厂商通道 华为厂商通道 魅族厂商通道 VIVO厂商通道 OPPO厂商通道 支持桌面角标的厂商 吐槽一下集成友盟厂商通道时发现的问题 调试友盟Push问题的检查清单 过滤UmengPushAgent开头的日志…

Android集成友盟消息推送SDK

消息推送SDK快速集成: 申请AppKey ——> 接入Push SDK ——> 基础接口引入 ——> 消息推送测试 ——> 接入完成 1.申请AppKey 2.接入Push SDK 1)、加入依赖 //友盟push相关依赖(必须)implementationcom.umeng.umsdk:push:6.1.0impleme…

机器学习之手写决策树以及sklearn中的决策树及其可视化

文章目录 决策树理论部分基本算法划分选择信息熵 信息增益信息增益率基尼系数基尼指数 决策树代码实现参考 决策树理论部分 决策树的思路很简单,就是从数据集中挑选一个特征,然后进行分类。 基本算法 从伪代码中可以看出,分三种情况考虑&…

android使用友盟推送注册失败获取不到token accs bindapp error!

使用友盟推送注册失败获取不到token public void onFailure(String s, String s1)的值分别是“-9”和“accs bindapp error!”或者s的值为-11.都是同一个问题 就是主工程(除友盟PushSDK 其他的module均看成为主工程)so目录与PushSDK下的so目录不一致…

同时集成阿里云旺与友盟推送,初始化失败s:-11,s1:accs bindapp error!的解决办法

在应用中需要同时集成聊天和推送功能,聊天选用阿里的sdk(百川云旺),推送选用友盟的pushSDK。 这时候悲剧就出现了,注册友盟的时候报错。 I/com.umeng.message.PushAgent: register-->onFailure-->s:-11,s1:accs …

关于友盟s=-11;s1=accs bindapp error!的解决处理

项目使用了友盟推送之后,在部分手机上出现accs bindapp error,错误码-11的问题,为什么会出现这个问题呢,网上查找了很久,友盟给出的解释是so文件不正确。 具体链接:http://bbs.umeng.com/thread-23018-1-1…

友盟register failed: -11 accs bindapp error!

下载官方Demo后,替换自己的id包名后出现 register failed: -11 accs bindapp error! 经过一番搜索之后,都是说这二种原因 1、检查appkey和secret key是否配置正确,如果正确无误,请看步骤2。2、so文件配置有误,需重新配置: Pus…

阿里无线11.11 | 手机淘宝移动端接入网关基础架构演进之路

移动网络优化是超级App永恒的话题,对于无线电商来说更为重要,网络请求体验跟用户的购买行为息息相关,手机淘宝从过去的HTTP API网关,到2014年升级支持SPDY,2015年双十一自研高性能、全双工、安全的ACCS(阿里…