贴一下汇总贴:论文阅读记录
论文链接:《Attention Is All You Need》
一、摘要
主导序列转导模型基于包括编码器和解码器的复杂递归或卷积神经网络。性能最好的型号还通过一种注意力机制连接编码器和解码器。我们提出了一个新的简单的网络架构,变压器,完全基于注意力机制,完全免除了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更具可并行性,并且需要更少的训练时间。我们的模型在WMT 2014年英语-德语翻译任务中达到28.4 BLEU,比现有的最佳结果(包括合奏)提高了2 BLEU以上。在WMT 2014年英语到法语翻译任务中,我们的模型在八个图形处理器上训练3.5天后建立了新的单一模型最先进的BLEU评分41.8,这是文献中最佳模型训练成本的一小部分。我们表明,通过将该转换器成功地应用于具有大量和有限训练数据的英语选区解析,它可以很好地推广到其他任务。
二、Introduction
上面的这种结构的弊端: 就是需要递归迭代运行,没法并行化,这样对于很长的句子来说,很可能出现梯度消失的情况,并且计算量也很大,速度比较慢。所以需要改进。
Attention是利用局部聚焦的思想去建立注意力模型,但目前这样的机制都是和RNN连接。(self-attention, 有时也称为内注意,是一种将单个序列的不同位置联系起来以计算序列表示的注意机制。)
所以提出了一种Transformer模型,这种模型不用RNN或者说CNN这种递归机制,而是完全依赖于Attention。
三、模型介绍
从这个结构的宏观角度上,我们可以看到Transformer模型也是用了Encoder-Decoder结构,编码器部分负责把自然语言序列映射成为隐藏层(就上面那个九宫格),含有自然语言序列的数学表达,然后解码器把隐藏层再映射为自然语言序列,从而使我们可以解决各种问题,比如情感分类,命名实体识别,语义关系抽取,机器翻译,摘要生成等等。
先简单说一下上面的结构的工作流程:
比如我做一个机器翻译(Why do we work?) -> 为什么要工作?
- 输入自然语言序列: Why do we work?
- 编码器输出的隐藏层是Why do we work的一种数学表示,类似于提取了每一个词的信息,然后汇总,转换成了这句话的数学向量。然后输入到解码器
- 输入符号到解码器
- 就会得到第一个字“为”
- 将得到的第一个字“为”落下来再输入到编码器
- 得到第二个字“什”
- 将得到的第二个字落下来输入,得到“么”,重复,直到解码器输出, 翻译完成。
(一)编码器部分的工作细节
编码器部分是由N个transformer block堆叠而成的,我们就拿一个transformer block来进一步观察,每一个transformer block又有两个子层,第一个是多头注意力部分,第二个是feed-forward部分。
我们输入句子:Why do we work? 的时候,它的编码流程进一步细化:
- 首先输入进来之后,经过Input Embedding层每个字进行embedding编码(这个后面会说),然后再编入位置信息(position Encoding),形成带有位置信息的embedding编码。
- 然后进入多头注意力部分,这部分是多角度的self-attention部分,在里面每个字的信息会依据权重进行交换融合,这样每一个字会带上其他字的信息(信息多少依据权重决定),然后进入feed-forward部分进行进一步的计算,最后就会得到输入句子的数学表示了。
- 位置嵌入
transformer中的位置嵌入
- 多头注意力机制
transformer中的多头注意力机制
- 前馈神经网络(FeedForward)
我们上面通过多头注意力机制得到了Z,下面就是把Z再做两层线性变换,然后relu激活就得到最后的R矩阵了。(相当于一个两层的神经网络)
F F N ( x ) = max ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x)=\max (0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2
- Layer Normalization和残差连接
-
残差连接
我们在上一步得到了经过注意力矩阵加权之后的 V V V,也就是 A t t e n t i o n ( Q , K , V ) Attention(Q,K,V) Attention(Q,K,V),我们对它进行一下转置, 使其和 X e m b e d d i n g X_{embedding} Xembedding的维度一致, 也就是 [ b a t c h s i z e , s e q u e n c e l e n g t h , e m b e d d i n g d i m e n s i o n ] [batch\;size,sequence\;length,embedding\;dimension] [batchsize,sequencelength,embeddingdimension],然后把他们加起来做残差连接, 直接进行元素相加, 因为他们的维度一致: X e m b e d d i n g + A t t e n t i o n ( A , K , V ) X_{embedding}+Attention(A,K,V) Xembedding+Attention(A,K,V)在之后的运算里, 每经过一个模块的运算, 都要把运算之前的值和运算之后的值相加, 从而得到残差连接, 训练的时候可以使梯度直接走捷径反传到最初始层: X + S u b L a y e r ( X ) X+SubLayer(X) X+SubLayer(X) -
LayerNorm
L a y e r N o r m a l i z a t i o n LayerNormalization LayerNormalization的作用是把神经网络中隐藏层归一为标准正态分布, 也就是 i . i . d i.i.d i.i.d独立同分布, 以起到加快训练速度, 加速收敛的作用: