当前位置: 首页 > news >正文

【论文解读】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 实验结论

  1. 虽然每个适配器对整体网络的影响很小,但整体效果很大。
  2. 较低层上的适配器比较高层上的适配器影响较小。
  3. 在两个数据集上,适配器的性能对于低于10−2的标准差是鲁棒的。但是,当初始化太大时,性能会下降,对CoLA的影响更大。
  4. 跨适配器大小的模型质量是稳定的,并且在所有任务中使用固定的适配器大小可以对性能造成很小的损害。
  5. 以下扩展未能显著提升性能(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个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满&#xf…...

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 版本中使用&…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

[特殊字符] 手撸 Redis 互斥锁那些坑

📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...

未授权访问事件频发,我们应当如何应对?

在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...

ubuntu清理垃圾

windows和ubuntu 双系统,ubuntu 150GB,开发用,基本不装太多软件。但是磁盘基本用完。 1、查看home目录 sudo du -h -d 1 $HOME | grep -v K 上面的命令查看$HOME一级目录大小,发现 .cache 有26GB,.local 有几个GB&am…...

Linux【5】-----编译和烧写Linux系统镜像(RK3568)

参考:讯为 1、文件系统 不同的文件系统组成了:debian、ubuntu、buildroot、qt等系统 每个文件系统的uboot和kernel是一样的 2、源码目录介绍 目录 3、正式编译 编译脚本build.sh 帮助内容如下: Available options: uboot …...