详细理解Transformer

news2025/1/15 20:45:39

上一篇文章中,我们解读了Transformer中的Self-Attention的实现细节,这篇文章中,就Transformer的整体做一个算法解读。

首先,我们还是把Transformer的架构图贴出来,作为本篇内容的抓手。

从图中我们可以看到,网络中有三种Attention,分别是:(1) Encoder中的Multi-Head Attention,(2) Decoder中的Multi-Head Attention(Encoder-Decoder Attention),(3) Decoder中的 Masked Multi-Head Attention。所以,接下来,我们先从Multi-Head Attention讲起。

1. Multi-Head Attention

Jay Alammar把多头注意力机制比喻成多头兽。它的结构如下图所示:

那么这头多头兽能带来什么优势呢?

首先,它能提升模型关注不同位置的能力,这在较复杂的句子翻译中非常有用;

其次,它为注意力层提供了多重表示子空间(Representation subspaces)。

在Muti-Head Attention中,我们有多套Query/Key/Value的权重矩阵,在论文中,这个数量为8。每套权重矩阵都被随机初始化,并且在经过训练后,每套Query/Key/Value矩阵可以将输入embeddings映射到不同的表示子空间。

现在问题来了,这8套Q/K/V将会产生8个输出Z0, Z1, ... , Z7,而后续的Feed-Forward模块只接收一个矩阵输入,这8个输出将如何整合在一起呢?这就需要想办法把它们压缩进一个矩阵。具体做法是,将8个输出级联到一起变成一个矩阵,然后再与一个权重矩阵WO做矩阵乘法,得到最终的输出矩阵Z:

论文中给出的公式是:

好了,以上就是Multi-Head Attention的实现方式了。总结一下,每一层的Multi-Head Attention完整实现如下图所示。(感谢Jay Alammar,为我们提供这么直观的示意图)。

前面我们讲到,Multi-Head Attention在Transformer中的应用,主要有三种方式。

1. 在Encoder中的Multi-Head Attention:Q/K/V都来自于上一层Encoder的输出,对每个位置的编码,都能参考上一层输出中的所有其他位置。

2. Decoder中的Encoder-Decoder Attention:Q来自于上一层Decoder的输出,而K和V则来自于Encoder的输出。

3. Decoder中的Masked Multi-Head Attention:在掩码模式中,每个位置可以参考截至该位置的所有位置信息,也就是只能参考该位置之前的信息,对于不能参考的位置信息,在点积操作中,通过设置mask的方式(setting to -inf)来阻止访问非法位置。

2. Positional Encoding

由于网络不含递归和卷积操作,我们需要想办法把序列元素的位置信息利用起来。论文中使用的方法是,将位置信息的编码加入到底部Encoder和Decoder的Embeddings上。

具体编码方式如下列公式所示,pos是词语位置,i为维度index(总维度大小为512,i的取值范围应为0~511)。

这样计算出来的位置编码数据范围在[-1,1]之间,因此,假如输入embedding的维度为4,则下图可以帮助我们理解上面的加法操作:

当然,上图是个非常简化的示意图,并且该图存在一点问题,偶数维度和奇数维度应该是交错排列,原图作者是将其concate在了一起。实际上,编码的维度与输入embedding的维度一致,在论文实现中为512。 

3. Position-wise Feed-Forward Networks

Feed-Forward模块相对较简单,对每个位置进行两次线性变换(当然,不同Layer的Weight不同),中间使用了一个ReLU激活:

以上公式也可以描述为两个kernel为1的卷积。FFN模块的输入和输出维度都是512,中间维度为2048。

4. The Residuals

从Transformer的模型结构我们可以看到,该模型中使用了残差连接。把模型的局部放大,大概是下面这个样子:

向量加法后面紧接着会做一个Layer Normalization的操作。

残差连接在Encoder和Decoder中都有应用,例如,2层Encoder和2层Decoder的Transformer结构大致如下:

5. The Final Linear and Softmax Layer

Decoder输出的是float向量,那么这个浮点向量如何转换成词语呢?这就是最后Linear Layer和Softmax Layer干的事情。

Linear层是一个简单的全连接网络,它的作用是将Decoder的输出向量(维度为512)映射到一个更大的向量,称为logits向量。

logits向量的维度对应模型所知道的词汇表的大小,假设模型训练中,已知10000个英语单词,那么logits向量则有10000个元素的维度,每个元素对应一个单词的分数。

而Softmax层则是将词汇分数转换成0.0~1.0之间的概率,拥有最高概率的词语将被选中并输出。

6. How the Network works? 

 好了,以上就是Transformer中各个模块的解读,相信你已经对每个模块都比较清晰了。那么,整个Transformer是如何工作的呢?下面这个动图很好地说明了整个网络的工作过程。

正如前面我们讲Multi-Head Attention时提到过的,Decoder的Attention模块与Encoder有所不同。

首先,Decoder有两个Attention模块,Masked Mutli-Head Attention只允许关注当前位置之前的位置,对于未来的位置则通过在softmax之前将其设置为-inf来将其“屏蔽”掉,从上图也可以看出来,Decoder会将之前的输出当作当前位置的输入,来预测当前位置的输出。

其次,Encoder-Decoder Attention, Query矩阵来自上一层Decoder,而Key矩阵和Value矩阵来来自Encoder的输出。

参考资料:

1.《The Illustrated Transformer》

2. 《Attention Is All You Need》

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

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

相关文章

迷茫了!去大厂还是创业?

大家好,我是麦叔,最近我创建了一个 学习圈子 有球友在 星球 里提问。 大厂的layout岗位和小厂的硬件工程师岗位,该如何选择? 这个问题我曾经也纠结过,不过现在的我,I am awake! 肯定是有大点大。…

2023 年安徽省职业院校技能大赛(高职组)

#需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! 某企业根据自身业务需求&#…

2024长三角快递物流供应链与技术装备展览会(杭州站)

2024.7.8-10 杭州国际博览中心 科技创新,数字赋能 同期举办:数字物流技术展 新能源商用车及物流车展 电商物流包装展 冷链物流展 指导单位 国家邮政局发展研究中心浙江省邮政管理局中国快递协会 承办单位 上海信世展览服务有限公司 主办单位 浙江…

使用 pg_profile 在 Postgres 中生成性能分析报告

前言: postgres数据库中拥有大量的辅助插件用于帮助DBA更好的分析数据库性能或整个集群,包括索引、I/O、CPU和内存等,pg_profile是基于PostgreSQL标准统计信息视图的诊断工具,它类似于Oracle AWR架构,和Oracle一样&am…

MFC 添加MFC类方法

1、打开工程目录的"类视图" 2、工程名右键添加"MFC类" 3、填写"类名"并选择“基类”CDialog,对话框ID填写添加好的对话框ID

2024(1),Android高分面试指南

以前,见到过挺多这样的新闻,某些学霸,成绩稍微有点下滑之类的,就受不了,做出一些过激的行为。如自杀等。这是非常懦弱的表现。究其背后,这是因为他们把自己蹦的太紧了。就像气球,你憋着一直吹气…

【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论二】

前言: 本篇主要参考《Wasserstein GAN and the Kantorovich-Rubinstein Duality》 重点介绍一下 WGAN 的损失函数 是如何通过 Wasserstein Distance 变换过来的。 分为5步: 我们首先建立Wasserstein Distance 极小值形式, 经过对…

QGIS 开发之旅二《构建插件工程》

上一篇文章写了二次开发环境的构建,这一章我们从零开始构建插件工程,并理解下QIGIS 如何识别插件程序的。 1、创建QGIS 工程 新建项目,选择下面的空工程 工程创建成功后,是下面的样子,没有任何文件 2、配置QGIS工程 …

掼蛋-掌握出牌权

掼蛋游戏中,出牌权往往能决定一局牌的走向,掌握出牌权可以主动控制局势。出牌权是指在每一轮的出牌环节中谁先出牌。出牌权的重要性主要体现在以下两个方面: 一、控制节奏 出牌权可以让我们主动控制游戏的节奏,可以根据自己的出牌…

VUE3项目学习系列--项目基础配置(四)

目录 一、环境变量配置 二、SVG图标配置 三、注册组件为全局组件 四、集成sass 1、安装依赖 2、添加文件 3、配置 一、环境变量配置 项目开发过程中会经历开发环境、测试环境、生产环境三种状态,对与环境变量的配置需求不同,因此需要在项目中进行环…

移动端研发技术的进化历程

移动端研发技术 移动端研发技术主要分为原生开发和跨平台开发。本章主要介绍一下移动开发技术的过去、当下和未来,一步一步介绍移动技术的进化历程。 原生开发 原生应用程序是指某一个移动平台(比如iOS或Android)所特有的应用,使…

【漏洞复现】CERIO DT系列路由器 远程代码执行漏洞

0x01 产品简介 CERIO DT系列路由器是中国台湾智鼎资讯(CERIO)公司的一款无线路由器。 0x02 漏洞概述 CERIO DT系列路由器在特定版本中存在操作命令注入漏洞。未授权的攻击者可利用该漏洞进行远程代码执行,从而控制服务器。 0x03 测绘语句…

电脑数据守护神:备份文件的重要性与实用方案

一、备份文件:数据安全的第一道防线 在数字化时代,电脑已成为我们生活和工作中不可或缺的一部分。无论是个人用户还是企业组织,电脑中存储的各类文件都承载着重要的信息。然而,随着电脑使用频率的增加,数据丢失或损坏…

R语言复现:如何利用logistic逐步回归进行影响因素分析?

Logistic回归在医学科研、特别是观察性研究领域,无论是现况调查、病例对照研究、还是队列研究中都是大家经常用到的统计方法,而在影响因素研究筛选自变量时,大家习惯性用的比较多的还是先单后多,P<0.05纳入多因素研究&…

第五节:使用SMB开发WebSocket通信

一、概述 本节主要讲解在SMB中如何进行websocket快速开发,实现客户端连接、关闭、消息通讯等功能。 示例下载:https://download.csdn.net/download/lllllllllluoyi/88949743 二、创建WebSocket服务器 1、在csdnProject工程中新建一个消息流。 添加W…

MySQL实战:问题排查与监控

常见问题 有更合适的索引不走,怎么办? MySQL在选取索引时,会参考索引的基数,基数是MySQL估算的,反映这个字段有多少种取值,估算的策略为选取几个页算出取值的平均值,再乘以页数,即…

经验分享:专业知识库的搭建秘诀都在这里啦!

我想必每个人都有过被一堆纷繁复杂的信息搞得头疼不已的时候,对吧?那么你是否想过,如果我们有一个专门收藏整理这些信息的地方,会变得多么方便呢?这就是知识库的作用。所以,接下来我就要向大家分享如何搭建…

如何设计一个高并发的系统--简谈

设计一个高并发系统可以从下面这些角度来考虑。 所谓设计高并发系统,就是设计一个系统,保证它整体可用的同时,能够处理很高的并发用户请求,能够承受很大的流量冲击。 我们要设计高并发的系统,那就需要处理好一些常见…

【MySQL】-知识点整理

1、存储引擎 -- 查询数据库支持的存储引擎 show engines; -- 查询当前数据库使用的存储引擎 show variables like %storage_engines%; 主要的存储引擎说明: 1)MyISAM:无外键、表锁、所有索引都是非聚簇索引、无事务、记录表总条数、删除表…

Realsense 相机SDK学习(一)——librealsense使用方法及bug解决(不使用Ros)

一.介绍 realsense相机是一个intel开发出来的一款深度相机,我之前使用他来跑过slam,也配置过他的驱动,在此附上realsense的相机驱动安装方法:Ubuntu20.04安装Intelrealsense相机驱动(涉及Linux内核降级) …