当前位置:首页> AI教程> Transformer模型架构中的Attention模块详解

Transformer模型架构中的Attention模块详解

释放双眼,带上耳机,听听看~!
本文详细解释了Transformer模型架构中的Attention模块,包括注意力机制的作用、论文《Attention Is All You Need》的创新点以及编码器-解码器的具体组成。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,arxiv.org/abs/1706.03…

一. 注意力机制

注意力机制是目前常用在序列建模和转换模型中,作为其中的一个组成部分,允许对依赖关系进行建模,不考虑在输入或输出序列的距离。然而,在除少数情况下,所有这种注意力机制与循环网络一起使用。主要的序列转换模型是基于复杂的循环或包括一个编码器和一个解码器的卷积神经网络,表现最好的模型也通过一个注意力机制连接编码器和解码器。

二. 论文创新点

《Attention Is All You Need》 是Google于2017年6月发布在arxiv上的一篇论文。
论文的创新点在于抛弃了之前传统的 encoder-decoder模型 必须结合 CNN 或 RNN 的固有模式,只用 attention,提出了一种新的网络架构Transformer。论文的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果,创新之处在于提出了两个新的Attention机制,分别叫做 Scaled Dot-Product Attention 和 Multi-Head Attention。

那么本篇文章主要讲解下Transformer模型架构中的Attention模块。

三. 模型架构

(1)编码器-解码器

  • 编码器:
    将一个符号表示为 (x1,…,xn)(x_1,…,x_n) 的输入序列映射为一个连续表示序列 z=(z1,…,zn)z = (z_1,…,z_n),将一些原始的输入变为机器学习可以理解的向量。我们可以这样理解:假设输入是一个长为 n 的句子,那么 ztz_t 就表示这个句子中第 t 个词的向量表示。

  • 解码器:
    首先会拿到编码器的输出z,生成一个长为m的序列(这里n和m可以不等长)。解码器和编码器的不同是,拿汉译英来讲,编码器是一次看完所有的中文句子,而解码器只能一次生成一个英语单词。

Transformer模型架构中的Attention模块详解

上图是 Transformer的模型架构,首先左边是一个编码器,input输入;右边是一个解码器,因为使用了自回归模型,所以它的下一个输出需要基于上一个输出进行推断,即主框架中的outputs。

(2)编码器具体组成

论文中使用的编码器是由6个相同的层组成的。每个层都有2个子层,第一层是 Multi-Head Attention多头注意力机制,第二层是 前馈神经网络(也就是MLP),然后两个子层之间使用 残差连接layer Normalization

思考:
Layer Normalization 是针对自然语言处理领域提出的层归一化,那么大家可以思考这里为什么不直接使用Batch Normalization?
因为在 RNN 这类时序网络中,时序的长度并不是一个定值,网络深度也不一定相同,比如说每句话的长短都不一定相同,所有很难去使用 BN,但是在图像处理领域中 BN 比 LN 是更有效的。

所以每个子层的输出是 LayerNorm(x+ Sublayer(x));另一个为了方便残差连接,所以规定模型中的所有子层,以及嵌入层的输出维数模型是512。(嵌入层Embedding: 目的是将所有的索引标号映射到致密的低维向量中,通俗讲就是将输入的内容转为机器学习可识别的向量表示)

(3)解码器具体组成

解码器也是由6个相同的层组成。除了相同于编码层中的两个子层外,解码器还插入了第三个子层 Masked Multi-Head Attention。子层之间同样使用 残差连接和layer Normalization

思考:
这里为什么需要加入Masked Multi-Head Attention层?

对于解码器来说,我们使用了自回归模型,那么自回归模型有个特点,当前的输入输出集需要基于上一个的输出进行推断,那么这意味着在做预测时,t 时刻只能看到从 t1t_1tn−1t_n-1 的输出,不能看到 tt 时刻之后的输入。但是在注意力机制里面,每次都可以看到整个完整的输入,所以为了确保上面一点,需要加入Masked Multi-Head Attention层。

四. Attention 注意力层

注意力函数 是将一个query和一些key-value对 映射成输出的函数,其中query、keys、values和输出都是向量。论文中提到输出是values的加权和,那么权重又是怎么得出的?对于每一个value的权重,它是根据value对应的key和query的相似度算来的。

那么Attention的结构也就是下面的形式:

Transformer模型架构中的Attention模块详解

(1)Scaled Dot-Product Attention

Transformer模型架构中的Attention模块详解

Transformer模型中使用的是点积Attention,对query和key作内积运算,两个向量作内积的话,如果两个向量的模一样,余弦值越大,两个向量的相似度越高;如果等于0,两个向量正交,无相似度。假设给出n个key-value,那么query会和每一个key作内积运算,然后除以向量的长度
Transformer模型架构中的Attention模块详解,再放进softmax后就能得到n个非负且加起来和为1的权重。将权重作用于value,即可得到输出,输出的维度和value的维度相同。

思考:这里除以
Transformer模型架构中的Attention模块详解的作用?

当向量的长度都比较小时,除不除
Transformer模型架构中的Attention模块详解是影响不大的,但如果两个向量的长度都特别大,作点积时有可能值会比较大,那么再放入softmax函数中,长度最大的值得出的值会更加靠近1,长度小的值会更加靠近0。这样得出的置信分类有可能是不正确的,算出来的梯度会比较小,因为通过softmax我们希望得到的结果是:和真实值相似的预测值的置信度尽量靠近1,不相似的地方尽量靠近0。

Transformer模型架构中的Attention模块详解

(2)Multi-Head Attention

Transformer模型架构中的Attention模块详解

多头注意力机制流程:

原始的输入 V,K,Q进入到 线性层,投影到较低的维度,然后做h次的Scaled Dot-Product Attention,会得到h个输出,然后合并在一起,再做一次线性的投影。

使用Multi-Head Attention的作用是什么?

因为Scaled Dot-Product Attention并没有什么可以学习的参数,但为了识别不一样的模式,所以我们需要一个可以不断学习的参数以适应不同的变化。在多头注意力机制里面,通过线性层投影到低纬是可以学的,通过不断的训练可以学到不一样的投影方法,使得在投影的那个度量空间里面可以匹配不同模型需要的相似函数。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

EM算法在机器学习中的应用

2023-12-16 20:29:14

AI教程

基于深度学习的高精度鸟类目标检测识别系统

2023-12-16 20:46:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索