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

X - Transformer

回顾 Transformer 的发展

Transformer 最初是作为机器翻译的序列到序列模型提出的,而后来的研究表明,基于 Transformer 的预训练模型(PTM) 在各项任务中都有最优的表现。因此,Transformer 已成为 NLP 领域的首选架构,尤其是 PTM。除了语言相关的应用,Transformer 还被用于 CV、音频处理,甚至是化学和生命科学。由于取得了成功,过去几年研究者又提出了各种 Transformer 变体(又名 X-former)。这些 X-former 主要从以下三个不同的角度改进了最初的 Vanilla Transformer

  • 模型效率。应用 Transformer 的一个关键挑战是其处理长序列时的效率低下,这主要是由于自注意力(self-attention)模块的计算和内存复杂度。改进的方法包括轻量级 attention(例如稀疏 attention 变体)和分而治之的方法(例如循环和分层机制);

  • 模型泛化。由于 Transformer 是一种灵活的架构,并且对输入数据的结构偏差几乎没有假设,因此很难在小规模数据上进行训练。改进方法包括引入结构偏差或正则化,对大规模未标记数据进行预训练等;

  • 模型适配。这一系列工作旨在使 Transformer 适应特定的下游任务和应用程序。

Vanilla Transformer

Vanilla Transformer 是一个序列到序列的模型,由一个编码器和一个解码器组成,二者都是相同的块 𝐿 组成的堆栈。每个编码器块主要由一个多头 self-attention 模块和一个位置前馈网络(FFN)组成。为了构建更深的模型,每个模块周围都采用了残差连接,然后是层归一化模块。

  • 与编码器块相比,解码器块在多头 self-attention 模块和位置方面 FFN 之间额外插入了 cross-attention 模块。
  • 此外,解码器中的 self-attention 模块用于防止每个位置影响后续位置

Vanilla Transformer 的整体架构如下图所示:
在这里插入图片描述
通常有三种不同的方式使用 Transformer 架构:

  1. 使用编码器 - 解码器,通常用于序列到序列建模,例如神经机器翻译;

  2. 仅使用编码器,编码器的输出用作输入序列的表示,通常用于分类或序列标记问题;

  3. 仅使用解码器,其中也移除了编码器 - 解码器 cross-attention 模块,通常用于序列生成,例如语言建模。


如何去改Transfomer

在这里插入图片描述
在这里插入图片描述


Attention

Self-attention 在 Transformer 中非常重要,但在实际应用中存在两个挑战:

  1. 复杂度。self-attention 的复杂度为 O ( T 2 ⋅ D ) O(T^2·D) O(T2D)。因此,attention 模块在处理长序列时会遇到瓶颈;

  2. 结构先验。Self-attention 对输入没有假设任何结构性偏差,甚至指令信息也需要从训练数据中学习。因此,无预训练的 Transformer 通常容易在中小型数据集上过拟合。


Attention 机制的改进可以分为以下几个方向:

  • 稀疏 attention。将稀疏偏差引入 attention 机制可以降低了复杂性;

  • 线性化 attention。解开 attention 矩阵与内核特征图,然后以相反的顺序计算 attention 以实现线性复杂度;

  • 原型和内存压缩。这类方法减少了查询或键值记忆对的数量,以减少注意力矩阵的大小;

  • 低阶 self-Attention。这一系列工作捕获了 self-Attention 的低阶属性;

  • Attention 与先验。该研究探索了用先验 attention 分布来补充或替代标准 attention;

  • 改进多头机制。该系列研究探索了不同的替代多头机制。


稀疏Attention

在标准的 self-attention 机制中,每个 token 都需要 attend 所有其他的 token。

然而,据观察,对于经过训练的 Transformer,学习到的 attention 矩阵 A 在大多数数据点上通常非常稀疏。因此,可以通过结合结构偏差来限制每个查询 attend 的查询键对的数量来降低计算复杂度。

从另一个角度来看,标准 attention 可以被视为一个完整的二部图,其中每个查询从所有内存节点接收信息并更新其表示。而稀疏 attention 可以看成是一个稀疏图,其中删除了节点之间的一些连接。

  • 基于确定稀疏连接的指标,研究者将这些方法分为两类:基于位置和基于内容的稀疏 attention。

基于位置的稀疏:

基于位置的稀疏 attention 之一是原子稀疏 attention,如下图所示主要有五种模式。彩色方块表示计算的 attention 分数,空白方块表示放弃的 attention 分数。

在这里插入图片描述
复合稀疏 attention

而另一种基于位置的稀疏 attention 是复合稀疏 attention,下图显示了其五种主要模式,其中红色框表示序列边界。

在这里插入图片描述
扩展稀疏 attention

除了上述模式,一些现有的研究已经针对特定数据类型探索了扩展稀疏模式。

  • 下图(a)展示了全局 attention 扩展的抽象视图,其中全局节点是分层组织的,任何一对 token 都与二叉树中的路径相连。红色框表示查询位置,橙色节点 / 方块表示查询关注相应的 token。

还有一些视觉数据的扩展。Image Transformer 探索了两种类型的 attention:

  • 按光栅扫描顺序展平图像像素,然后应用块局部稀疏 attention;
  • 2D 块局部 attention,其中查询块和内存块直接排列在 2D 板中,如上图 (b) 所示。

视觉数据稀疏模式的另一个例子,Axial Transformer 在图像的每个轴上应用独立的 attention 模块。每个 attention 模块沿一个轴混合信息,同时保持另一个轴的信息独立,如上图 © 所示。这可以理解为按光栅扫描顺序水平和垂直展平图像像素,然后分别应用具有图像宽度和高度间隙的跨步 attention。

在这里插入图片描述

层归一化

层归一化 ( Layer Normalization, LN) 以及残差连接被认为是一种稳定深度网络训练的机制(如减轻不适定梯度和模型退化)。

  • 在 Vanilla Transformer 中,LN 层位于残差块之间,被称为 post-LN

  • 后来的 Transformer 实现将 LN 层放在 attention 或 FFN 之前的残差连接内,在最后一层之后有一个额外的 LN 来控制最终输出的大小,即 pre-LN。Pre-LN 已被许多后续研究和实现所采用。pre-LN 和 post-LN 的区别如下图所示。

在这里插入图片描述

自适应计算时间

与大多数神经模型一样,Vanilla Transformer 使用固定(学习的)计算程序来处理每个输入。一个有趣且有发展潜力的修改是使计算时间以输入为条件,即在 Transformer 模型中引入自适应计算时间(Adaptive Computation Time, ACT)。

  • 如下图 12(a-)所示,Universal Transformer (UT) 结合了深度循环(recurrence-over-depth)机制,该机制使用一个在深度上共享的模块来迭代地改进所有符号的表示;

  • 图 12(b)中,Conditional Computation Transformer (CCT) 在每个自注意力和前馈层添加一个门控模块来决定是否跳过当前层;

  • 图 12(c)中,与 UT 中使用的动态停机机制类似,有一条工作线专门用于调整每个输入的层数以实现良好的速度 - 准确率权衡,这称为「提前退出机制」(early exit mechanism)。

在这里插入图片描述

利用「分而治之」策略的 Transformer

自注意力对序列长度的二次复杂度会显著限制一些下游任务的性能。

  • 研究者确定了两类有具有代表性的方法,分别是循环层级 Transformer

在这里插入图片描述
循环Transformer:
在循环 Transformer 中,维护一个高速缓存(cache memory)用来合并历史信息。在处理一段文本时,该网络从缓存中的读取作为额外输入。处理完成后,网络通过简单地复制隐藏状态或使用更复杂的机制来写入内存。

层级 Transformer:
层级 Transformer 将输入分层分解为更细粒度的元素。

  • 低级特征首先被馈入到 Transformer 编码器,产生输出表示,然后使用池化或其他操作来聚合以形成高级特征,然后通过高级 Transformer 进行处理。

xTransformer综述论文链接

相关文章:

X - Transformer

回顾 Transformer 的发展 Transformer 最初是作为机器翻译的序列到序列模型提出的,而后来的研究表明,基于 Transformer 的预训练模型(PTM) 在各项任务中都有最优的表现。因此,Transformer 已成为 NLP 领域的首选架构&…...

ubuntu下畅玩Seer(via wine)

第一步:安装wine 部分exe文件的运行需要32位的指令集架构,需要向Ubuntu系统中添加一个新的架构(i386),以支持32位的软件包。因为在64位的Ubuntu系统中,默认情况下只能安装和运行64位的软件。 通过添加i386…...

第五章:Spring下

第五章&#xff1a;Spring下 5.1&#xff1a;AOP 场景模拟 创建一个新的模块&#xff0c;spring_proxy_10&#xff0c;并引入下面的jar包。 <packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactI…...

在CSDN学Golang云原生(Kubernetes基础)

一&#xff0c;k8s集群安装和升级 安装 Golang K8s 集群可以参照以下步骤&#xff1a; 准备环境&#xff1a;需要一组 Linux 服务器&#xff0c;并在每台服务器上安装 Docker 和 Kubernetes 工具。初始化集群&#xff1a;使用 kubeadm 工具初始化一个 Kubernetes 集群。例如&…...

给APK签名—两种方式(flutter android 安装包)

前提&#xff1a;给未签名的apk签名&#xff0c;可以先检查下apk有没有签名 通过命令行查看&#xff1a;打开终端或命令行界面&#xff0c;导入包含APK文件的目录&#xff0c;并执行以下命令&#xff1a; keytool -printcert -jarfile your_app.apk 将 your_app.apk替换为要检查…...

观察者模式、中介者模式和发布订阅模式

观察者模式 定义 观察者模式定义了对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都将得到通知&#xff0c;并自动更新 观察者模式属于行为型模式&#xff0c;行为型模式关注的是对象之间的通讯&#xff0c;观察者模式…...

PHP-Mysql图书管理系统--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 首页phpStudy 设置导数据库后台的管理界面数据库表结构项目目录如图&#xff1a;代码部分&#xff1a;主页的head 配套资源作业&#xff1a; 本系列校训 用免费公开视频&am…...

网络传输层协议:UDP和TCP

背景知识 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序&#xff1b; 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -…...

ElementUI Select选择器如何根据value值显示对应的label

修改前效果如图所示&#xff0c;数据值状态应显示为可用&#xff0c;但实际上仅显示了状态码1&#xff0c;并没有显示其对应的状态信息。在排查了数据类型对应关系问题后&#xff0c;并没有产生实质性影响&#xff0c;只好对代码进行了如下修改。 修改前代码&#xff1a; <…...

Kotlin 内联函数语法之let、apply、also、run、with的用法与详解

一、介绍 kotlin的语法千奇百怪&#xff0c;今天我们将介绍项目中频率使用比较高的几个内联函数。 二、什么叫内联函数&#xff1f; 内联函数 的语义很简单&#xff1a;把函数体复制粘贴到函数调用处 。使用起来也毫无困难&#xff0c;用 inline关键字修饰函数即可。 语法&a…...

Swift 中如何判断是push 过来的页面 还是present过来的 页面

在 Swift 中&#xff0c;可以通过检查当前视图控制器的 presentingViewController 属性来判断是通过 push 过来的页面还是 present 过来的页面。 下面是一个示例代码&#xff0c;展示如何判断是通过 push 还是 present 过来的页面&#xff1a; if let presentingViewControll…...

基于K8s环境·使用ArgoCD部署Jenkins和静态Agent节点

今天是「DevOps云学堂」与你共同进步的第 47天 第⑦期DevOps实战训练营 7月15日已开营 实践环境升级基于K8s和ArgoCD 本文节选自第⑦期DevOps训练营 &#xff0c; 对于训练营的同学实践此文档依赖于基础环境配置文档&#xff0c; 运行K8s集群并配置NFS存储。实际上只要有个K8s集…...

874. 模拟行走机器人

874. 模拟行走机器人 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类型的命令 commands &#xff1a; -2 &#xff1a;向左转 90 度-1 &#xff1a;向右转 90 度1 < x < 9 &#xff1a;…...

【Linux】- RPM 与 YUM

RPM 与 YUM 1.1 rpm 包的管理1.2 rpm 包的简单查询指令1.3 rpm 包的其它查询指令&#xff1a;1.4 卸载 rpm 包&#xff1a;2.1 安装 rpm 包3.1 yum3.2 yum 的基本指令3.3 安装指定的 yum 包3.4 yum 应用实例&#xff1a; 1.1 rpm 包的管理 介绍 rpm 用于互联网下载包的打包及安…...

Visual Studio 2015编译器 自动生成 XXX_EXPORTS宏

XXX_EXPORTS宏 XXX_EXPORTS宏是由Visual Studio 2015编译器自动生成的。这个宏用于标识当前项目是一个导出符号的动态链接库&#xff08;DLL&#xff09;项目。在使用Visual Studio 2015创建Win32项目时&#xff0c;编译器会自动添加这个宏到项目的预定义宏中。 这个宏的作用…...

HTML5的应用现状与发展前景

HTML5&#xff0c;作为Web技术的核心&#xff0c;已经深深地改变了我们看待和使用Web的方式。它不仅提供了数不尽的新特性和功能&#xff0c;还使得Web设计和开发更加互动、更加直观。这篇文章将探讨HTML5的当前应用现状&#xff0c;以及它的未来发展前景。 HTML5的应用现状 H…...

day44-Spring_AOP

0目录 1.2.3 1.Spring_AOP 实体类&#xff1a; Mapper接口&#xff1a; Service和实现类&#xff1a; 测试1&#xff1a; 运行后&#xff1a; 测试2&#xff1a;无此型号时 测试3&#xff1a;库存不足时 解决方案1&#xff1a;事务声明管理器 测试&#xff1a…...

selenium IDE 接入jenkins-转载

Selenium-IDE脚本录制,selenium-side-runner自动化测试教程_51CTO博客_selenium ide录制脚本 备忘录...

云计算结合数据科学突破信息泛滥(下)

大家好&#xff0c;本文将继续讨论云计算结合数据科学突破信息泛滥的相关内容&#xff0c;讲述其余三个关键组成部分。 3.数据清理和预处理 收集数据并将其存储在云端之后&#xff0c;下一步是将数据进行转换。因为原始数据经常包含错误、不一致和缺失的值&#xff0c;这些都…...

蓝桥杯单片机第十二届国赛 真题+代码

iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修改。 */ #include <STC1…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...