Transformer详解,中文版架构图

news/2024/11/29 13:25:13/

 

2.2.1 “编码器-解码器”架构
Seq2Seq 思想就是将网络的输入输出分别看作不同的序列,然后实现序列到序列
的映射,其经典实现结构就是“编码器-解码器”框架。编码器-解码器框架如图 2.7 所
示。


图2.7 编码器-解码器的基本框架


在 Seq2Seq 思想应用于自然语言处理之初,编码器解码器主要使用的是 RNN 及
其变体。针对输入,编码器会先遍历输入序列,根据循环神经网络的特性,每一层的
输入都包含了当前层的输入前一层的隐藏状态,而新的隐藏状态则会被用作下一层
的输入编码器一般只保留最后一层的隐藏状态,作为整个输入的语义向量,送入解

码器中,而这个语义向量输入解码器后会被看作是解码器初始的隐藏状态。
但由于循环神经网络本身的结构特性,如果输入序列过长,模型性能就会明显的
降低。这是因为使用循环神经网络只会将最后一层的隐藏状态作为表征整个输入文本
的语义向量,而句子中靠前的序列就会产生信息丢失问题。同时,在输出序列中,因
为输入的是已经损失了的语义向量,某些词对应的原始文本词已经在编码时丢失了。

图2.8 注意力机制原理示意图
为了解决这个问题,后续的相关工作中引入了注意力机制。注意力机制本质上借
鉴了人眼视觉处理信息的能力,可以概述为两个阶段:判断需要特别注意输入的哪个
部分;然后把资源优先分配给重要的部分。放在神经网络中,注意力机制就可以理解
为:在预测结果的时候把注意力侧重放在不同的特征上。
从数学上来讲,注意力机制[25]的计算可以被描述为一个查询(Query)到一系列
键值对(Key-Value)的映射。注意力机制计算的原理如图 2.8 所示:
其计算方式也可以归纳为两个步骤:
(1)先使用查询 Query 和键 Key 计算权重系数 ,求相似性的方法有点乘、权
重、余弦相似性等等,再用 SoftMax 操作对权重归一化,得到( ( , ))softmax f Q K

 

(2)第二个阶段再对 Value 进行加权求和,计算得到注意力的输出:

“编码器-解码器”框架引入注意力机制后,使用编码器对输入序列进行编码,首
先得到语义向量,然后可以得到一个所有语义向量的加权和,称之为语境
向量 ,使用代表注意力的权重参数,则语境向量可以表示为:


解码过程中,每一个输出词的概率可以由语境向量、前一层的隐状态共同确定:


其中,f 和g 分别代表非线性变换,一般指的是多层神经网络; 代表输出序列
中的一个词, 代表对应的隐状态;此外,注意力的权重参数可以使用另外的神经
网络计算得到的:
 


2.2.2 Transformer 网络


注意力机制在 Seq2Seq 中的应用在各项自然语言生成任务中都有提升。之后
Google 在 2017 年提出了 Transformer[13]模型,使用注意力机制、全连接前馈层、残差
连接组成的网络结构替代了 RNN,在多个自然语言处理任务乃至视觉任务上都有了
很大的提升。
Transformer 的整体结构如图 2.9 所示,也遵循“编码器-解码器”架构,编码器模
块主要由两个子层组成,分别是多头注意力机制(Multi-Head Self-attention Mechanism,
MHSM)和全连接前馈层(Fully Connected Feed-Forward Network),每个子层之后都
添加了层归一化(Layer Normalization,LN)和残差连接(Residual Connection)。

解码器块由三个子层组成,第一层是具有掩蔽功能的多头注意力层,可以防止信息泄露
第二层是整合编码器输出上一层解码器输出的多头注意力层;

第三层是全连接前置反馈层,同样每个子层后都添加了层归一化和残差连接


 

 模型中的点积注意力机制可以由以下公式表示:( , , ) ( )

而多头注意力就是通过h 个不一样的线性变换一起对输入的, ,Q K V 进行投影,并
进行点积注意力计算,最后再把不同的结果拼接起来。多头注意力的公式表示如

其中,d 为模型的维度,并且 为最后的线性投影层的权重矩阵
点积注意力机制与多头注意力机制的对比如图 2.10 所示。

 


图2.10 点积注意力与多头注意力机制示意图
全连接前馈层的作用是为模型提供非线性变化,由两个线性层和一个激活函数组
成,可以由下式表示:1 1 2 2( ) max(0, )FFN x xW b W b= + +
(2-18)
此外,对于文本而言,单词出现位置与顺序也很重要,Transformer 为了能保留文
本中的序列顺序及位置信息,提出了利用正余弦函数来保留序列中标记的相对或绝对
位置的方法。具体做法是利用正余弦函数对序列进行编码,并与输入嵌入语句向量进
行求和。2
( ,2 ) ( 10000 )modeli d
pos iPE sin pos=
(2-19)2
( ,2 1) ( 10000 )modeli d
pos iPE cos pos+ =
(2-20)
2.2.3 复制机制和指针机制
Seq2Seq 模型用于文本摘要有三个问题,即:倾向于生成重复文本、无法处理未
登录词问题(Out-of-Vocabulary,OOV)和无法准确复制真实细节。于是,指针生成
 

 

 

 

 

 


http://www.ppmy.cn/news/398569.html

相关文章

pytorch RuntimeError: size mismatch, m1: [16 x 86016], m2: [25088 x 512] at /opt/conda/conda-bld/pyt

报错内容&#xff1a; Traceback (most recent call last):File "/home/user1/main_arc_face.py", line 534, in <module>main()File "/home/user1/main_arc_face.py", line 315, in mainval_loss, prec1 validate(val_loader, model, criterion)F…

python模块commands执行系统命令

上一篇中提到了执行系统命令的新利器os模块&#xff0c;其中有两个方法可以用来执行系统命令一个是os.popen()一个是os.system()&#xff0c;还有两种可以用来执行系统命令的方法一个是&#xff1a;python自带的commands模块另一个是python的进程管理模块subprocess。这里主要说…

java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName'

今天使用mysql&#xff0c;用java程序往mysql中写数据&#xff0c;出现如下错误&#xff1a; java.sql.SQLException: Incorrect string value: \xE6\x88\x91\xE7\x9A\x84... for column groupName at row 1 甚是纠结&#xff0c;我原本以为应该是以下问题之一&#xff1a; …

Redis Desktop Manager中出现\xAC\xED\x00\x05t\x00乱码问题

问题 最近在使用Redis Tmeplate保存到Redis过程中出现了&#xff0c;以\xAC\xED\x00\x05t\x00\x12开头的乱码问题&#xff0c;具体如下图&#xff1a; 原因 其实就是&#xff0c;下面两个Redis配置注解不在主包名下面&#xff0c;导致Redis Template初始化设置没有生效&…

局部(x,y)坐标 转 WGS84经纬度坐标

局部坐标转WGS84坐标 背景&#xff1a; 最近在做一个小项目&#xff0c;其中需要把局部坐标转换成wgs84坐标。我的局部地图是用激光雷达扫出来的一张图&#xff0c;就是下面这张图 用激光雷达建好图以后&#xff0c;就知道图上每一个点的局部坐标了&#xff0c;局部坐标是&a…

关于\x开头的字符串编码转换中文解决方法

做爬虫可能经常遇到爬取到的数据存在编码问题&#xff0c;简直让人头疼&#xff0c;比如爬取到的是这样的&#xff1a; 例如&#xff1a; \xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c 中文是&#xff1a; 你好世界 上面这个是utf-8编码&#xff0c;但数据类型是字符串类…

python处理带有‘\x‘的字符串,拆分,解码,重组

原始字符 \xaaU\x03\xa6\x00\x04\x00\x03\x01\x00\x01\x11HU\xaa 1.按照\x分割 aaU03a60004000301000111HUaa 2.将所有的大写字母转为16进制 aa5503a600040003010001114855aa 3.将所有的小写字母转为大写字母 AA5503A600040003010001114855AA message"\xaaU\x03\xa6\…

MySQL插入emoji表情错误的3种解决方案,Incorrect string value: '\xF0\x9F\x98\x84'

原因&#xff1a;mysql的UTF-8只支持三个字节的存储&#xff0c;而一般字符是三个字节&#xff0c;但是emoji表情是4个字节&#xff0c;所以存储不了。 而mysql为了解决这个问题&#xff0c;在5.5.3版本之后转而支持了存储4个字节的utf8字符&#xff0c;字符集为utf8mb4.这个相…