X - Transformer

news2024/11/24 14:29:55

回顾 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综述论文链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试题——当实体类中的属性名和表中的字段名不一样,如何将查询的结果封装到指定 pojo?

在使用MyBatis的时候,应该注意实体类的属性名尽量和表的字段名尽量相同,如果不同将会导致MyBatis无法完成数据的封装,但是在软件开发过程中,数据库的创建和软件环境的搭建不可能是同一个人,实体类属性名和数据库的字段…

真正理解红黑树,真正的(Linux内核里大量用到的数据结构

作为一种数据结构,红黑树可谓不算朴素,因为各种宣传让它过于神秘,网上搜罗了一大堆的关于红黑树的文章,不外乎千篇一律,介绍概念,分析性能,贴上代码,然后给上罪恶的一句话&#xff0…

芯片制造详解.从沙子到晶圆.学习笔记(一)

刚入行半导体行业,很多知识需要系统的学习,想从入门通俗易懂的知识开始学起,于是在导师的帮助下,找到了这门课程,那就从这门课程开始打开我的半导体之旅吧。 我只是对视频内容的提炼,和自己的学习心得&…

hack the box—Lame

扫描 还是老方法nmapfscan得到开放的端口和服务 nmap -sV -sC -sT -v -T4 10.10.10.3 看到开了445,先来波ms17-010,发现失败。 这里还开个21,并且可以知道版本号,直接搜索ftp漏洞 msf正好有对应的模块 设置好参数后进行攻击&…

从iOS App启动速度看如何为基础性能保驾护航 | 京东物流技术团队

1 前言 启动是App给用户的第一印象,一款App的启动速度,不单单是用户体验的事情,往往还决定了它能否获取更多的用户。所以到了一定阶段App的启动优化是必须要做的事情。App启动基本分为以下两种 1.1 冷启动 App 点击启动前,它的…

uniapp---app端人脸识别组件(宽屏版1280*800组件,需手动截屏拍人脸识别,踩坑,成长)

一、首先记录下踩到的坑 我这边做的是一个挂在门口的门牌机,可以用于扫脸签到,扫码签到,扫脸实现用的是live-pusher组件(代码很长,放在最下面,不能直接用,需要根据实际情况修改)去做…

处理多维特征的输入

数据的每一列称为:特征/字段 x的数据变为8列,维数8 step one:构建数据集 x_data;y_data:创建两个Tensor step two:定义模型 step three:构造损失和优化器 step four:训练 else 激活函数: 代码更改部分: 转->大佬笔…

基于AutoEncoder自编码器的人脸识别matlab仿真

目录 1.算法理论概述 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 人脸识别是计算机视觉领域的重要研究方向,其目标是从图像或视频中准确地识别和识别人脸。传统的人脸识别方法通常基于特征提取和分类器&#…

Java虚拟机——后端编译与优化

编译器无论在何时、何种状态下将Class文件转换成与本地基础设施相关的二进制机器码,它都可以视为整个编译过程的后端。即时编译一直是绝对主流的编译形式,不过提前编译也逐渐被主流JDK支持。 1 即时编译器 目前两款主流的Java虚拟机(HotSpo…

【MATLAB绘图】

MATLAB绘图函数:Plot函数详解 介绍 MATLAB是一种常用的科学计算和数据可视化工具,它提供了强大的绘图函数,使用户能够创建各种类型的图表和图形。 基本语法 plot函数的基本语法如下: plot(x, y)其中,x和y是长度相…

HDFS的文件块大小(重点)

HDFS 中的文件在物理上是分块存储 (Block ) , 块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。 如果一个文件文件小于128M,该文件会占…

Git 命令行教程:如何在 GitLab 中恢复已删除的分支

在软件开发过程中,版本控制是一个至关重要的环节。Git 是最流行的分布式版本控制系统之一,它能够帮助团队高效地管理代码。然而,有时候会发生意外,例如代码误合、错误的删除等情况,导致重要的开发分支本地和远程不慎被…

vue2踩坑之项目:v-if/else branches must use unique keys.

error: v-if/else branches must use unique keys. if 与 else 的 key 不能相同&#xff0c;在else标签里的key逐步加1 // if 与 else 的 key 不能相同 <div v-for"(item, index) in menuList" :key"item.id"><div v-if"item.name" :k…

js 操作符 in 的使用

1、判断对象中是否有某个属性&#xff0c;返回true/false let person {name: "小明", age: 18, year: 1998}; if ("age" in person){ //属性名必须是字符串形式&#xff0c;因为age不是一个变量console.log("person对象中含有age属性") } els…

(六)如何使用FLUX语言的文档

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 6 章 如何使用FLUX语言的文档 6.1 如何查看函数文档 1、这是FLUX语言的文档 https://docs.influxdata.com…

(七)FLUX查询InfluxDB

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 7 章 FLUX查询InfluxDB 7.1 前言 1、本节内容较为重要 7.2 FLUX查询InfluxDB的语法 1、使用FLUX语言查询…

AbstractMethodError: com.xx.serviceImpl.xxx method is abstract

今日一语&#xff1a; 其实我们没有必要和其他人进行比较&#xff0c;我们要比较的是昨天的自己 只有这样才能得到救赎和解脱&#xff0c;否则就是泥潭中跳跃&#xff0c;山谷中呐喊 在翻阅其他博主的博客时&#xff0c;似乎大多分享的是因为数据源驱动或者中间件的版本太高或者…

SpringCloud - 狂神学习笔记

1. 常见面试题 1.1 什么是微服务&#xff1f; 1.2 微服务之间是如何独立通讯的&#xff1f; 1.3 SpringCloud 和 Dubbo有那些区别&#xff1f; 1.4 SpringBoot 和 SpringCloud&#xff0c;请谈谈你对他们的理解 1.5 什么是服务熔断&#xff1f;什么是服务降级&#xff1f;…

微调模型来完成热狗识别的图像分类任务

我们来实践一个具体的例子&#xff1a;热狗识别。将基于一个小数据集对在ImageNet数据集上训练好的ResNet模型进行微调。该小数据集含有数千张热狗或者其他事物的图像。我们将使用微调得到的模型来识别一张图像中是否包含热狗。 首先&#xff0c;导入实验所需的工具包。 impo…

“铸网-2023” | 持续保障江西省实网应急演练

​​日前&#xff0c;由江西省工业和信息化厅主办&#xff0c;江西省网络安全研究院承办&#xff0c;南京赛宁信息技术有限公司协办并提供全程技术支撑的“铸网-2023”江西省工业领域网络安全实网应急演练在江西南昌圆满收官。 一、应急演练43天 赛宁持续助推工业企业应急能力…