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

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

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

相关文章

mac m1 触控栏TouchBar功能栏异常

电脑可能在高温下运行时间过长,导致TouchBar之前正常显示的调整屏幕亮度与调整声音等功能的按钮均丢失,然后看了一眼键盘设置,设置也是正常的,已勾选显示功能栏 下面请看 如何在MacBook Pro(macOS Monterey&#xff0…

基于Java+SpringBoot+vue前后端分离社区医院信息平台设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

Java实现微信支付

1.引入依赖 <dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-java</artifactId><version>0.2.10</version> </dependency>2.创建预支付订单 import com.wechat.pay.java.core.Config; imp…

STP生成树协议(第二十一课)

STP生成树协议(第二十一课) STP-生成树协议 1、为什么需要STP协议 1)局域网中容易出现的问题:单点故障和单链路故障,即:当某一条链路故障或某一台设备故障导致大面积主机网络中断 2)如果预防单点故障和单链路故障: 增加冗余/备份设备:预防单点故障 增加冗余/备份…

【C++】智能指针

文章目录 1. 为什么需要智能指针&#xff1f;2. 智能指针的使用智能指针的常见问题1.使用对象的生命周期去控制资源2. 像指针一样使用3. 拷贝问题auto_ptr ——管理权转移unique_ptr ——防拷贝C98版本C11版本 shared_ptr (根本解决拷贝问题)赋值代码实现 weak_ptr —— 循环引…

RocketMQ教程-(4)-领域模型-消费者(Consumer)

本文介绍 Apache RocketMQ 中消费者&#xff08;Consumer&#xff09;的定义、模型关系、内部属性、行为约束、版本兼容性及使用建议。 定义​ 消费者是 Apache RocketMQ 中用来接收并处理消息的运行实体。 消费者通常被集成在业务系统中&#xff0c;从 Apache RocketMQ 服务…

【JVM】详解对象的创建过程

文章目录 1、创建对像的几种方式1、new关键字2、反射3、clone4、反序列化 2、创建过程步骤 1、检查类是否已经被加载步骤 2、 为对象分配内存空间1、指针碰撞针对指针碰撞线程不安全&#xff0c;有两种方案&#xff1a; 2、空闲列表选择哪种分配方式 步骤3、将内存空间初始化为…

如何在armv6 armv7 armv8(aarch64)嵌入式板子上面安装nginx服务器,支持H265码流

如何在armv6 armv6 armv8 aarch64 嵌入式板子上面安装nginx服务器支持推送H265的视频流 开始吧 一&#xff0c;准备工作二&#xff0c;configure时遇到的出错问题1、checking for C compiler … found but is not working2&#xff0c;error: can not detect int size3&#xf…

【博客682】k8s apiserver bookmarks机制以更高效检测变更

k8s apiserver bookmarks机制以更高效检测变更 list-watch背景&#xff1a; List-Watch 是kubernetes中server和client通信的最核心的机制&#xff0c; 比如说api-server监听etcd&#xff0c; kubelet监听api-server&#xff0c; scheduler监听api-server等等&#xff0c;其实…

Jmeter场景设置与监听

Jmeter场景设置 场景的概念: 场景是用来尽量真实模拟用户操作的工作单元&#xff0c;场景设计源自于用户真实操作。 场景设计: 场景设计是根据收集分析用户的实际操作而定义的Jmeter脚本的执行策略。 性能测试中涉及的基本场景有两种&#xff0c;即单一业务场景和混合业务场景…

链表是否有环、环长度、环起点

问题引入 如何检测一个链表是否有环&#xff0c;如果有&#xff0c;那么如何确定环的长度及起点。 引自博客&#xff1a;上述问题是一个经典问题&#xff0c;经常会在面试中被问到。我之前在杭州一家网络公司的电话面试中就很不巧的问到&#xff0c;当时是第一次遇到那个问题&…

RocketMQ集群4.9.2升级4.9.6版本

本文主要记录生产环境短暂停机升级RocketMQ版本的过程 一、整体思路 1.将生产环境MQ4.9.2集群同步到测试环境&#xff0c;并启动&#xff0c;确保正常运行。 2.参照4.9.2配置4.9.6集群 3.停掉4.9.2集群&#xff0c;启动4.9.6集群&#xff0c;测试确保正常运行。 4.停掉4.9.6集…

JSON格式Python,Java,PHP等封装获取淘宝商品快递费用数据API方法

淘宝是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取淘宝天猫商品详情快递费用数据&#xff0c;您可以通过开放平台的接口或者直接访问淘宝天猫商城的网页来获取商品详情快递费用。以下是两种常用方法的介绍&a…

leetcode132. 分割回文串 II(java)

分割回文串 II 分割回文串 II动态规划 回文字符串 分割回文串 II 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文。 返回符合要求的 最少分割次数 。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;1 解释&#xff1a;…

git使用教程

一 创建环境 参考 Git 安装配置 | 菜鸟教程 (runoob.com)https://www.runoob.com/git/git-install-setup.html 1.1 配置 $ git config --global user.name "runoob" $ git config --global user.email test@runoob.com 1.2 创建一个新文件夹 在新的文件夹执行(…

C++中的头文件.h 和 源文件.cpp 的关系

在VS中 C项目&#xff0c;我创建了一个类&#xff0c; 会自动创建头文件和源文件&#xff0c;这两个文件有什么关系&#xff1f; 如何快速切换&#xff1f;在头文件.h文件中声明的类方法&#xff0c; 如何快速在源文件中进行具体实现&#xff1f;在 Visual Studio 中创建 C 项…

多级调度在工程中的应用及思路

多级调度在工程中的应用及思路 集中式多机调度 顾名思义&#xff1a;集中式多机调度就是指&#xff0c;机器的数据是集中的&#xff0c;有统一的控制中心调度&#xff0c;类似于现实中的机场调度中心&#xff0c;铁路调度中心&#xff0c;一般机器将定位&#xff0c;速度&…

文件上传漏洞总结2

文件上传的大体都已经学习过了 这个假期在给他强化一下 什么是webshell webshell是web入侵的脚本攻击工具。webshell就是一个asp或php木马后门&#xff0c;黑客在入侵了一个网站后&#xff0c;常常在将这些asp或php木马后门文件放置在网站服务器的web目录中&#xff0c;与正常…

HTML5的应用现状与发展前景

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

HDU-7323 2023“钉耙编程”杭电多校赛(3)a-b Problem

HDU-7323 2023“钉耙编程”杭电多校赛&#xff08;3&#xff09;a-b Problem 题目大意 小 A A A和小 B B B在玩游戏。有 n n n块石头&#xff0c;小 A A A和小 B B B轮流捡&#xff0c;小 A A A先捡。每人每次只能捡一块石头&#xff0c;直到所有的石头都被捡完。 每块石头都…