Attention is all you need 论文笔记

        在NLP领域,之前主流使用的网络是基于复杂的循环神经网络或卷积神经网络的,包含一个encoder和一个decoder。本文提出了Transformer,是一种避免使用循环的模型架构,完全依赖于注意力机制来描述输入与输出之间的依赖关系。

        大多数的序列转换模型都有encoder和decoder结构,编码器将输入序列x(x1,......,xn)映射成一个向量z(z1,......,zn),根据z,解码器再一次生成一个字符的方式生成输出序列y(y1,......,ym)。其中的每一步都是自回归的,前一步的输出会作为下一步的附加输入使用。

1.Model Architecture

        直接看结构吧

                                               

 这就是Transformer的总体结构,左边是encoder右边是decoder。图中包含了Embedding层,Positional Encoding,Multi-head Attention,Add&Norm,Feed Forward等结构。之后会详细介绍。

        下图是我学习过程中的一些理解:

                                       

        图中“1,2,3,4,5,6”代表整个编译码的流程 ,以“Why do we study?”为例:

        首先输入句子,通过编码器,我们可以得到一个隐藏层,隐藏层主要包含了序列中的一些特征,将隐藏层输入到解码器,当解码器收到表示开始的Token后,首先先得到一个“为”字,将“为”字作为附加输入进行下一次预测,又得到“什”字,这样循环,直到收到表示结束的Token,得到“为什么我们要学习呢?”这个序列。

1.1Attention

        说到Attention机制,其实可以描述为一个query和一组keys-values映射到一个输出,其中query,keys,values均是向量。输出是values的加权求和。每个values的权值,是由query和keys通

过一个兼容函数来计算出来的。   

1.1.1   Positional Encoding

        Positional Encoding就是对位置信息的一个编码,因为Transformer这个结构不像RNN那样需要进行迭代的因此,在Transformer中是没有位置信息的,所以需要给Transformer提供每个字的位置信息。

        论文中是使用Sine, Cosine函数来进行位置编码的:                

                

pos代表位置,i代表维度。

                                                        ​​​​​​​        ​​​​​​​                ​​​​​​​​​​​​​                        

1.1.2   Scaled Dot-Product Attention(缩放的点积注意力机制)

结构如下:

                                                

         其中Q,K,V三个矩阵都是同样维度的,全部都是[seq_len , hidden_dim]维度的,seq_len表示句子长度,hidden_dim表示embedding的向量维度。这三个矩阵怎么来的具体我会在最后的结构总结里面说明。现在只需要知道,这三个矩阵维度相同,代表的都是句子的特征信息。 Attention的公式如下:   

  ​​                                         

 这里的Q*K^T代表着Q矩阵和K矩阵的相关程度,我们称为注意力矩阵。除以实际上是做了一个标准正态化(原文中有给出解释,为了softmax的效果更好),最后乘以V作一个加权求和。

1.1.3  Multi-Head Attention

        所谓Multi-Head就是“多头”实际上就是将上面所提到的Q,K,V矩阵进行分块。相比于对整个Q,K,V做一个attention,用不同学习到的映射分别映射h次是更有益的。并行执行attention之后将输出拼接起来,再做一个映射即可。公式如下:

                      

 这里有个需要注意的点,就是超参数h的设定,h代表num_of heads,需要被设置成可以被hidden_dim整除的数。

1.1.4  总体梳理

        下面是我对于Transformer中结构的一些梳理:

​​​​​​​       ​​​​​​​

                                 

 首先对输入的句子做一个Embedding和Positional Encoding(这里的c1,c2......表示一个句子中的词),将二者相加得到最终的X_embedding矩阵,维度是[seg_length , hidden_dim],里面存储的是输入sequence的特征信息,为了更好的学习到X_embedding中的特征,对X_embedding做了三个不同的映射,得到Q,K,V维度与X_embedding一致,之后根据超参数h将Q,K,V分为h个小矩阵,每个矩阵中都包含了每个字的一段特征,作点积后,生成注意力矩阵,如上图所示cick表示第i个字与第k个字之间的相关程度,数值越高,代表相关度越高。对注意力矩阵作softmax代表着某个字与其他字之间的相关度和为1。之后与V进行点积,如图,每一个元素都包含了当前字向量与句子中其他字向量的信息。最后将不同的head拼接起来再进行映射,Softmax输出即可。结构中包含的Add其实是残差连接,目的是防止梯度弥散,Norm是标准化,Feed-Forward前馈网络实际上是Linear->Activate(Relu)->Linear这样的一个结构。到此,Transformer的结构就梳理完毕。

(图解中的矩阵维度可能有误,以文章中的为准,图解只是便于理解)

​​​​​​​

以上理解如有不对,欢迎批评指正!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值