Transformer架构概述(二)

目录

1. Transformer架构概述

1.1 《Attention is All You Need》论文概述

1.2 Transformer的模块组成

1.3 Encoder 和 Decoder 的区别与联系

2. Transformer的并行计算效率相对于RNN的提升

2.1 RNN中的顺序处理问题

2.2 Transformer中的并行化优势

3. Self-Attention机制及其公式

3.1 Self-Attention机制简介

3.2 Self-Attention公式解析

3.3 Attention的工作过程

3.4 Self-Attention的计算过程举例

4. Multi-head Attention的扩展

4.1 Multi-head Attention的工作原理

5. Transformer的实现建议


1. Transformer架构概述

1.1 《Attention is All You Need》论文概述

Transformer模型是Vaswani等人在2017年提出的,旨在通过完全摆脱传统RNN和CNN的结构,依赖于全新的Self-Attention机制来处理序列数据。论文的核心观点是,序列处理不再依赖递归结构(如RNN中的逐步处理),而是通过注意力机制并行处理输入序列。这使得模型在处理长序列时能更有效地捕获全局依赖关系,同时显著提升并行计算的效率。

1.2 Transformer的模块组成

Transformer的整体架构分为Encoder-Decoder结构,每个模块又由多个层级叠加而成。我们首先从整体结构开始,逐步解析其细节:

  1. Encoder部分

    • 由6个完全相同的子层(layer)堆叠组成,每个子层包含:
      1. Self-Attention层:对输入序列中的每个位置,分别计算该位置与其他所有位置的相关性。
      2. 前馈神经网络(Feed Forward Network, FFN):对每个位置的注意力输出单独进行非线性变换。
    • 每个子层在Attention和FFN之前都使用了残差连接(Residual Connection)Layer Normalization,从而避免梯度消失并加速训练。
  2. Decoder部分

    • 同样由6个子层组成,但与Encoder不同的是,Decoder的每个子层包含了三个模块:
      1. Self-Attention层:和Encoder的Self-Attention相似,但额外加入了mask机制,防止模型看到未来的位置信息(即防止未来词影响当前词的生成)。
      2. Encoder-Decoder Attention层:该模块负责将Decoder的输出与Encoder的输出进行匹配,使生成的词能够参考输入序列的上下文。
      3. FFN:和Encoder一样,使用前馈神经网络进行非线性变换。
  3. 位置编码(Positional Encoding):由于Transformer结构不具备序列信息,模型需要额外的位置信息。Positional Encoding通过正弦和余弦函数为序列中的每个位置编码,这样可以让模型理解序列的顺序。

1.3 Encoder 和 Decoder 的区别与联系

Encoder和Decoder的功能有所区别,前者主要负责编码输入序列的上下文信息,而后者则将这些上下文信息转化为目标输出序列。两者的联系在于:Decoder中的Encoder-Decoder Attention模块,它能够让Decoder的每一步输出参考Encoder对输入序列的编码结果,从而生成符合上下文的输出。这样一来,Decoder能够生成与输入相关的翻译、摘要等输出。


2. Transformer的并行计算效率相对于RNN的提升

2.1 RNN中的顺序处理问题

传统的RNN(包括LSTM、GRU等)在处理序列数据时,必须逐步处理输入序列中的每一个元素。这意味着RNN模型的计算是串行的,即只能处理当前时间步的数据,等到当前步处理完后才能处理下一个时间步。这种顺序依赖导致了两个问题:

  1. 并行化困难:由于每一步的计算依赖于前一步的结果,难以进行并行处理。
  2. 长程依赖问题:RNN在处理长序列时容易出现梯度消失或梯度爆炸,导致模型无法有效捕捉序列中的长程依赖信息。
2.2 Transformer中的并行化优势

Transformer的设计从根本上解决了RNN的串行问题。在Transformer中,序列中的每个位置都是独立处理的,通过Self-Attention机制并行计算每个位置与其他位置的相关性。具体表现为:

  1. 自注意力机制的并行计算:Attention计算不依赖于前后顺序,而是直接计算输入序列中所有位置之间的相关性。这使得输入序列的所有元素可以在同一时间步并行处理,大大提高了计算效率。
  2. 更好的长程依赖处理:Self-Attention能够在同一层中捕捉输入序列的全局依赖信息,而不是像RNN那样逐步传递信息。因此,Transformer能够更加有效地处理长序列。

3. Self-Attention机制及其公式

3.1 Self-Attention机制简介

Self-Attention机制是Transformer的核心,它通过计算输入序列中的每个位置与其他所有位置的相似度,来捕捉序列中任意位置之间的依赖关系。相比传统的卷积操作(只能处理局部邻域信息)和RNN的递归计算,Self-Attention能够一次性计算整个序列的全局依赖,这使得模型在处理长序列时更为高效。

在Self-Attention中,每个输入向量都会被映射成三个不同的向量:

  • Query (Q):用于“询问”其他词的信息。
  • Key (K):用于表示其他词的特征。
  • Value (V):包含实际的词向量信息。

Attention机制通过计算Query和Key的相似度来决定如何加权各个Value的贡献。公式如下:

3.2 Self-Attention公式解析

Self-Attention的计算公式如下:

3.3 Attention的工作过程
  1. Query与Key的相似度计算: 每个位置的Query会与其他位置的Key进行点积,计算出相似度得分。得分越高,表示Query与该位置的Key越相关,模型在生成输出时就会更多地参考该位置的Value。

  2. Softmax标准化: 相似度得分通过Softmax函数转化为权重,确保所有得分的和为1。这样模型就能够在生成输出时对所有位置进行加权平均,而不是只关注一个位置。

  3. 加权Value: 最后,Attention机制使用这些权重对Value进行加权平均,生成该位置的输出表示。通过Self-Attention机制,模型能够将输入序列中所有位置的信息整合到每个位置的输出表示中。

3.4 Self-Attention的计算过程举例

假设我们有一个简单的输入序列 ["The", "cat", "is", "on", "the", "mat"]。模型会首先为每个词生成对应的Query, Key, 和 Value向量。接下来,Attention机制会计算序列中每个词与其他词之间的相似度:

  • Query("cat") 与所有其他词的Key进行点积,得到每个词的相似度得分。
  • 使用Softmax函数将这些相似度得分转化为权重。
  • 使用这些权重对每个词的Value进行加权平均,最终生成"cat"这个词的上下文表示。

这个过程会对序列中的每个词重复进行,从而使每个词都能捕捉到整个序列的信息。


4. Multi-head Attention的扩展

Self-Attention虽然能够捕捉序列中的全局依赖关系,但单头的Attention可能会局限于特定的子空间。为了解决这一问题,Transformer引入了Multi-head Attention机制,它能够在多个子空间中并行计算Self-Attention。

4.1 Multi-head Attention的工作原理

Multi-head Attention将输入的Query, Key, 和 Value向量分成多个头,每个头独立地计算Attention,并在最后将所有头的输出拼接起来。这样,模型能够从多个不同的角度来捕捉序列中的信息。

公式如下:

 

5. Transformer的实现建议

通过这部分的学习,你应该已经对Transformer的整体架构和Self-Attention机制有了深刻的理解。接下来,你可以尝试自己实现一个简化版的Transformer模型。以下是一些实现步骤的建议:

  1. 实现Self-Attention

    • 使用PyTorch或者NumPy实现Self-Attention,逐步测试不同模块的输出。
  2. 实现Multi-head Attention

    • 在实现Self-Attention的基础上,扩展为Multi-head Attention,确保每个头的输出能够正确拼接。
  3. 实现Encoder模块

    • 实现带有残差连接和Layer Normalization的完整Encoder层,并测试其性能。

通过这种方式,逐步理解并实现Transformer的核心组件,你将对这一架构有更加深入的掌握,帮助你在后续的学习中更加游刃有余。

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

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

相关文章

Pikachu-PHP反序列化

从后端代码可以看出,拿到序列化后的字符串,直接做反序列化;并且在前端做了展示; 如果虚拟化后的字符串,包含alert 内容,反序列化后,就会弹出窗口 O:1:"S":1:{s:4:"test";s…

OpenJudge | 置换选择排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给定初始整数顺串,以及大小固定并且初始元素已知的二叉最小堆(为完全二叉树或类似完全二叉树,且父元素键值总小于等于任何一个子结点的键值),要求利用堆实现置换选择排序&a…

Gralloc图形缓冲的分配过程

广告 首先帮我朋友打个广告 我们一起在运营一个视频号 感兴趣的可以帮忙点击右边这个小铃铛 铃铛 序 其实越往底下走在很多人嘴里就会变得很玄乎,变得不可思议,这里的gralloc就是一个native service,只是分装了一些调用接口,上…

Pikachu-目录遍历

目录遍历,跟不安全文件上传下载有差不多; 访问 jarheads.php 、truman.php 都是通过 get 请求,往title 参数传参; 在后台,可以看到 jarheads.php 、truman.php所在目录: /var/www/html/vul/dir/soup 图片…

传感器模块编程实践(二)W5500 SPI转以太网模块简介及驱动源码

文章目录 一.概要二.W5500芯片介绍W5500通讯协议介绍 三.W5500模块介绍四.W5500模块原理图五.W5500以太网模通讯实验六.CubeMX工程源代码下载七.小结 一.概要 我们介绍过单片机的以太网系统一般是由:单片机MACPHYRJ45。有些单片机比如STM32F407VET6芯片内部自带MAC…

windows下载Redis

1.下载地址 Releases tporadowski/redis GitHub 下载后,将压缩包解压到你的文件夹即可。(此时,redis已经完成安装) 2.使用 2.1双击redis.server.exe即可启动(启动redis服务端)(或者在当前目…

超声波清洗机什么牌子值得入手?推荐四款入手不亏的眼镜清洗机

在当今这个注重细节完美的时代,超声波清洗机凭借其卓越的清洁效率、深层渗透力及细腻的清洗效果,迅速赢得了家庭与专业场景的青睐。无论是精细的珠宝、眼镜框,还是金属装饰品、电子设备乃至医疗器具,超声波技术都能精准祛除隐秘处…

0110 Redis缓存的更新策略

在很多高并发的场景如秒杀系统,QPS会瞬时暴增,如果采用直接读写数据库(如MySQL)的方式,很可能会将数据库打垮。因此这种场景需要引入Redis做缓存,应对高并发的访问。但同时也会引入新的风险,最常…

数据结构——List接口

文章目录 一、什么是List?二、常见接口介绍三、List的使用总结 一、什么是List? 在集合框架中,List是一个接口,通过其源码,我们可以清楚看到其继承了Collection。 Collection 也是一个接口,该接口中规范了后…

华为 HCIP-Datacom H12-821 题库 (31)

🐣博客最下方微信公众号回复题库,领取题库和教学资源 🐤诚挚欢迎IT交流有兴趣的公众号回复交流群 🦘公众号会持续更新网络小知识😼 1. 默认情况下,IS-IS Level-1-2 路由器会将 Level-2 区域的明细路由信息发布到Lev…

Python入门--函数

目录 1. 函数介绍 2. 函数的定义 3. 函数的参数 4. 函数的返回值 5. 函数说明文档 6. 函数的嵌套调用 7. 函数的作用域 (1). 局部变量 (2). 全局变量 (3). global关键字 1. 函数介绍 函数:是组织好的,可重复使用的,用来实现特定功能…

YOLO-V7 二元分类器

在评估二元分类器性能时,TP、FP、TN和FN是四个核心指标,它们分别代表真阳性、假阳性、真阴性和假阴性。以下是这些指标的定义、计算方法以及在实际应用中的意义: 定义 TP(真阳性):模型正确预测为正类且实…

Yocto - 使用Yocto开发嵌入式Linux系统_06 掌握Bitbake工具

Grasping the BitBake Tool 在上一章中,我们了解了元数据、元数据集合概念以及 conf/layer.conf 的重要性。在本章中,我们将更深入地研究元数据,了解配方如何相互依赖,并了解 BitBake 如何处理依赖关系。 In the previous chapter…

k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载

目录 1 MetailLB 搭建 1.1 MetalLB 的作用和原理 1.2 MetalLB功能 1.3 部署 MetalLB 1.3.1 创建deployment控制器和创建一个服务 1.3.2 下载MealLB清单文件 1.3.3 使用 docker 对镜像进行拉取 1.3.4 将镜像上传至私人仓库 1.3.5 将官方仓库地址修改为本地私人地址 1.3.6 运行清…

【路径规划】多机器人路径规划

摘要 多机器人路径规划在现代自动化、仓储管理及智能交通系统中有着广泛的应用。本文提出了一种基于A*算法的多机器人路径规划方法,旨在解决多机器人在同一环境中的路径冲突问题。通过采用启发式搜索和路径优化策略,机器人能够在保持避障的前提下实现最…

Middleware---RocketMQ

RocketMQ是一个开源的分布式消息中间件。它是一种 低延迟、高可用、高可靠、高并发 的消息队列系统,用于在分布式系统中进行异步通信。 RocketMQ架构模型 Producer Group:消息生产者组,负责发送消息。 Broker:存储消息的服务节…

java:pdfbox 3.0 去除扫描版PDF中文本水印

官网下载 https://pdfbox.apache.org/download.html下载 pdfbox-app-3.0.3.jar cd D:\pdfbox 运行 java -jar pdfbox-app-3.0.3.jar java -jar pdfbox-app-3.0.3.jar Usage: pdfbox [COMMAND] [OPTIONS] Commands:debug Analyzes and inspects the internal structu…

Java第二阶段---10方法带参---第三节 面向对象和面向过程的区别

1.案例 2.代码实现 面向过程 import java.util.Scanner;/*** Procedure Oriented Programming 面向过程编程*/public class POP {public static void main(String[] args) {Scanner sc new Scanner(System.in);while(true){System.out.println("1.学生成绩管理");…

双十一不能错过的好物推荐!强推五款超好用的品牌好物

双十一快到了,这个时候的优惠力度都是最大的,还不知道买啥的小伙伴们赶紧来看这篇好物推荐!以下五款产品是我花了几天时间精心挑选出来的,看完之后保证你想加入购物车! 品牌好物推荐一、希亦CG超声波清洗机 如果你带眼…

中小型网络系统综合实验

一、实验要求 1.pc端自动获取ip地址,可以互通访问,可以访问域名解析服务器 2.设置vlan,三层交换机实现不同vlan之间的交流 3.设置静态路由,配置nat地址转换,实现全网可达 二、实验思路 1.首先给LSW2配置vlan 10 &a…