【论文解读】Parameter-Efficient Transfer Learning for NLP
一. 介绍
1.1 为什么要引入Adapter
在存在许多下游任务的情况下,微调的参数效率很低:每个任务都需要一个全新的模型。作为替代方案,我们建议使用适配器模块进行传输。
1.2 论文目标
目标是建立一个在所有这些方面都表现良好的系统,但不需要为每个新任务训练一个全新的模型
1.3 论文贡献
设计一个有效的适配器模块及其与基础模型的集成。我们提出了一个简单而有效的瓶颈架构。
二. NLP的适配器调优
2.1 瓶颈设计
上图显示了我们的适配器体系结构,以及它在Transformer的应用。Transformer的每一层都包含两个主要子层:注意层和前馈层。左图:将适配器模块两次添加到每个Transformer层,在多头注意之后的投影和两个前馈层之后。右图:适配器由瓶颈组成,瓶颈包含与原始模型中的注意力和前馈层相关的几个参数。适配器还包含一个跳过连接。在适配器调优期间,绿色层在下游数据上进行训练,这包括适配器、层归一化参数和最终分类层。
为了限制参数的数量,提出了一个瓶颈架构。适配器首先将原始的d维特征投影到较小的维度m中,使用非线性,然后投影回d维。每层添加的参数总数(包括偏差)为2md + d + m。通过设置m 远小于 d,我们限制了每个任务添加的参数数量
2.2 实验结论
- 虽然每个适配器对整体网络的影响很小,但整体效果很大。
- 较低层上的适配器比较高层上的适配器影响较小。
- 在两个数据集上,适配器的性能对于低于10−2的标准差是鲁棒的。但是,当初始化太大时,性能会下降,对CoLA的影响更大。
- 跨适配器大小的模型质量是稳定的,并且在所有任务中使用固定的适配器大小可以对性能造成很小的损害。
- 以下扩展未能显著提升性能(i)向适配器添加批处理/层规范化,(ii)增加每个适配器的层数,(iii)不同的激活函数,例如tanh, (iv)仅在注意层内插入适配器,(v)与主层并行添加适配器,并可能使用乘法交互。
三.实验
代码参考:adapter-hub/adapter-transformers: Huggingface Transformers + Adapters = ❤️ (github.com)
以构建Bert模型为例,模型基本继承,包含关系如下图所示
3.1 增加adapter
通过add_adapter调用模型父类ModelAdaptersMixin的add_adapter方法实现增加adapter
model.add_adapter(adapter_name, config=adapter_config)
即
def add_adapter(self, adapter_name: str, config=None, overwrite_ok: bool = False, set_active: bool = False):config = AdapterConfigBase.load(config) # ensure config is ok and up-to-date# In case adapter already exists and we allow overwriting, explicitly delete the existing one firstif overwrite_ok and adapter_name in self.config.adapters:self.delete_adapter(adapter_name)
#-----------------------------------------------------#将配置文件添加到config文件中self.config.adapters.add(adapter_name, config=config)try:#初始化模型模块同时初始化权重self._add_adapter_weights(adapter_name)
#-----------------------------------------------------except ValueError as ex:self.delete_adapter(adapter_name)raise exif set_active:self.set_active_adapters(adapter_name)
3.1.1 _add_adapter_weights函数
def _add_adapter_weights(self, adapter_name: str):#对模型中的每一层添加adapter层self.apply_to_adapter_layers(lambda i, layer: layer.add_adapter(adapter_name, i))# PHM Layeradapter_config = self.config.adapters.match(adapter_name, AdapterConfig, location_key="phm_layer")if adapter_config:adapter_module = list(self.get_adapter(adapter_name)[0].values())[0]# if multiple adapters with same location key exist they are returned as a modulelistif isinstance(adapter_module, nn.ModuleList):adapter_module = adapter_module[0]if adapter_config["shared_phm_rule"] or adapter_config["shared_W_phm"]:if self.config.model_type in SUBMODEL_NAMES:hidden_sizes = [getattr(self.config, key).hidden_size for key in SUBMODEL_NAMES[self.config.model_type]]if all(hidden_sizes[0] == h for h in hidden_sizes):self.base_model.shared_parameters[adapter_name] = init_shared_parameters(adapter_config, hidden_sizes[0], self.device)else:raise ValueError("The model has different hidden sizes {}. Sharing comapcter weights is only possible if"" the hidden_sizes match.".format(hidden_sizes))else:self.base_model.shared_parameters[adapter_name] = init_shared_parameters(adapter_config, self.config.hidden_size, self.device)# Prefix Tuningfor module in self.modules():if isinstance(module, PrefixTuningPool):module.confirm_prefix(adapter_name)if isinstance(self, InvertibleAdaptersMixin) or isinstance(self, InvertibleAdaptersWrapperMixin):self.add_invertible_adapter(adapter_name)
在AdapterLayer类中的add_adapter函数,往每一层中添加了Adapter或者是ParallelAdapter
以Adapter类为例,在初始化函数中我们可以看到Adapter实际上就是一个线性层下采样到映射维度,在投影到原先模型的维度,即下图
相关文章:

【论文解读】Parameter-Efficient Transfer Learning for NLP
一. 介绍 1.1 为什么要引入Adapter 在存在许多下游任务的情况下,微调的参数效率很低:每个任务都需要一个全新的模型。作为替代方案,我们建议使用适配器模块进行传输。 1.2 论文目标 目标是建立一个在所有这些方面都表现良好的系统,但不需…...

星途星纪元 ES,用艺术思维表达工程技术
10月8日,星途星纪元ES携手世界级成都爱乐首席乐团、旅德青年钢琴家王超,在成都打造了一场“万物星声”超舒适音乐会视听盛宴。这是星途星纪元首次跨界音乐圈、牵手音乐挚友,共同演绎音乐和汽车的美学协奏曲,开启高端超舒适美学新纪…...

【Java 进阶篇】深入了解 Bootstrap 插件
Bootstrap 是一个流行的前端框架,提供了各种强大的插件,用于增强网页和应用程序的功能和交互性。本篇博客将深入介绍 Bootstrap 插件,适用于那些刚刚开始学习前端开发的小白。 什么是 Bootstrap? 在深入探讨 Bootstrap 插件之前…...

VMware17.0安装教程(2023最新最详细)
目录 一.简介 二.安装步骤 软件:VMware版本:17.0语言:简体中文大小:554.98M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.6GHz 内存4G(或更高)下载通道①百度网盘丨下载链接: htt…...

k8s----11、service
services 1、概述2、存在的意义2.1 服务发现2.2 负载均衡 3、pod与service的关系4、service 三种类型4.1 、 ClusterIP4.2 、NodePort4.3 、LoadBalancer 1、概述 Service 是 Kubernetes 最核心概念,通过创建 Service,可以为一组具有相同功能的容器应 用提供一个统…...

深入篇【Linux】学习必备:进程环境变量/进程切换
深入篇【Linux】学习必备:进程环境变量/进程切换 Ⅰ.环境变量Ⅱ.深层意义Ⅲ.全局属性Ⅳ.进程切换 Ⅰ.环境变量 1.环境变量是什么?:环境变量是系统提供的一组name/value形式的变量,不同的环境变量有不同的用户。 一般是用来指定操作…...

文件系统相关
文件系统部分的大纲要求: 文件系统的全局结构:文件系统在外存中的结构,文件系统在内存中的结构外存空闲空间管理办法虚拟文件系统文件系统挂载 一、文件系统的层次结构 可分为三个层次:最低层是对象及其属性,中间层…...
edm邮件开发信模板
现在很多从事外贸的工作人员在寻找一些邮件模板,今天一米软件给大家总结了几套常用的开发新客户的邮件模板 开发新模板1: Hi Sir, Glad to hear that youre on the market for **. We specialize in this field for several years, with the strengt…...
边缘服务器的未来是什么?思考 5G 和 AI 需求
什么是边缘服务器 边缘服务器是一种分布式计算模式,旨在提高数据中心和云服务的效率,并解决设备之间通信的延迟问题。它将业务从中央数据中心转移到边缘设备附近,将计算、存储和网络资源靠近终端用户和设备,以实现更快速的数据处…...
老卫带你学---leetcode刷题(438. 找到字符串中所有字母异位词)
438. 找到字符串中所有字母异位词 问题: 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 …...

unity中使用protobuf工具将proto文件转为C#实体脚本
unity中使用protobuf工具将proto文件转为C#实体脚本 介绍优点缺点Protobuf 为什么比 XML 快得多?Protobuf的EncodingProtobuf封解包的过程通常编写一个Google Protocol Buffer应用需要以下几步: Protostuff是什么Protobuf工具总结 介绍 protobuf也就是G…...

1024程序员狂欢节有好礼 | 前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术
🌹欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 1024程序员狂欢节有好礼 🚩🚩🚩点击直达福利前言一、IT技术 IT Technology《速学Linux:系统应用从入门到精通》《Pytho…...

常用Web安全扫描工具合集
漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 1、A…...

Zoho Mail荣登福布斯小型企业企业邮箱排行榜
在过去的数十载里,电子邮件已成为电子通信领域中不可或缺的一环,而在未来的岁月里,它有望继续在全球范围内普及应用。尽管如今市场上有许多免费的企业邮箱供用户和企业选用,但其中许多产品在特定场景下的专业化功能尚显不足&#…...
Cave Cows 3
题目描述 约翰的 N (1≤N≤50000 )只牛在一个黑魃魃的洞里探险,他们只能通过叫声交流。 两只牛之间的曼哈顿距离决定了声音传播的时间。即牛1与牛2交流,需要的时间为 ∣x1−x2∣∣y1−y2∣ 。其中 −2≤106−106≤x1,x2,y1,y2≤106 。…...

Java程序设计2023-第四次上机练习
8-1三子棋 编写程序,实现简单的三子棋游戏。在三子棋中,双方在33的棋盘中轮流下棋,一方用*示,另一方用O表示。如果一方的3个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满…...

nonaDlA 逻辑分析仪 使用记录
注意事项,很灵敏,不要用手碰,产生误触发 安装软件 github地址 官方提供的淘宝地址与使用说明 1.安装 1.安装程序 :下载githubDLA源码,打开 software\PulseView.exe安装 2.安装驱动:安装完第一步后&a…...

用HFSS仿真平面线圈的电感量
用HFSS工具仿真平面线圈的电感量 平面线圈是指在平面上绕制而成的线圈,如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈,六角形线圈、八角形线圈、螺旋原型线圈等。 网络上的计算平面线圈电感量…...
字节面试题——数据库, linux
数据库 1.sq|语句取-一个月内的id分组取-一个年级中每个班级年龄最小的同学名字成绩表输出前三名的 成绩,后三名呢拷贝A表的数据到B表查询每1 ]科目都大于80分的学生名字筛选出每个小时 的记录考察where考察聚合函数where和having的区别-一个数据库sq|查询重复个数…...
ES基础知识
ES基础知识 单独查询一个文档(_doc)时,Elasticsearch 会返回该文档的原始数据,通常以 JSON 格式呈现。以下是一些常见字段及其含义: _index: 表示文档所属的索引名称。_type (在较早的 Elasticsearch 版本中使用&…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

解决MybatisPlus使用Druid1.2.11连接池查询PG数据库报Merge sql error的一种办法
目录 前言 一、问题重现 1、环境说明 2、重现步骤 3、错误信息 二、关于LATERAL 1、Lateral作用场景 2、在四至场景中使用 三、问题解决之道 1、源码追踪 2、关闭sql合并 3、改写处理SQL 四、总结 前言 在博客:【写在创作纪念日】基于SpringBoot和PostG…...

盲盒一番赏小程序:引领盲盒新潮流
在盲盒市场日益火爆的今天,如何才能在众多盲盒产品中脱颖而出?盲盒一番赏小程序给出了答案,它以创新的玩法和优质的服务,引领着盲盒新潮流。 一番赏小程序的最大特色在于其独特的赏品分级制度。赏品分为多个等级,从普…...

【SSM】SpringMVC学习笔记7:前后端数据传输协议和异常处理
这篇学习笔记是Spring系列笔记的第7篇,该笔记是笔者在学习黑马程序员SSM框架教程课程期间的笔记,供自己和他人参考。 Spring学习笔记目录 笔记1:【SSM】Spring基础: IoC配置学习笔记-CSDN博客 对应黑马课程P1~P20的内容。 笔记2…...
板凳-------Mysql cookbook学习 (十--2)
5.12 模式匹配中的大小写问题 mysql> use cookbook Database changed mysql> select a like A, a regexp A; ------------------------------ | a like A | a regexp A | ------------------------------ | 1 | 1 | --------------------------…...
LeetCode第244题_最短单词距离II
LeetCode第244题:最短单词距离II 问题描述 设计一个类,接收一个单词数组 wordsDict,并实现一个方法,该方法能够计算两个不同单词在该数组中出现位置的最短距离。 你需要实现一个 WordDistance 类: WordDistance(String[] word…...

CSS(2)
文章目录 Emmet语法快速生成HTML结构语法 Snipaste快速生成CSS样式语法快速格式化代码 快捷键(VScode)CSS 的复合选择器什么是复合选择器交集选择器后代选择器(重要)子选择器(重要)并集选择器(重要)**链接伪类选择器**focus伪类选…...