Attention Is All You Need(Transformer)

目录

Abstract

1 Introduction

2 Backgroung

3 Model Architecture

3.1 Encoder and Decoder Stacks

3.2 Attention

3.2.1 Scaled Dot-Product Attention

self-attention详解

3.2.2 Multi-Head Attention

mutil-head attention详解

3.2.3 Applications of Attention in our Model

3.3 Position-wise Feed-Forward Networks

3.4 Embeddings and Softmax

3.5 Positional Encoding 

4 Why Self-Attention

7 Conclusion

        

        Transformer是继MLP、CNN和RNN之后的第四大类模型,它完全基于注意力机制面,放弃了卷积和循环。作者在论文发表于17年,所以只是挖掘了在机器翻译领域中突出的表现。但是当我们站在现在再回头去看Transformer,他在其他各个方面都有越来越多的应用,开创了新的深度学习的时代。

Attention Is All You Need(Transformer)_第1张图片

P.S. 如果提到Transformer你想到的还是变形金刚,那你确实是变形金刚铁杆粉丝 哈哈哈哈哈哈

回归正题,

论文:https://arxiv.org/abs/1706.03762

官方源码:https://github.com/tensorflow/tensor2tensor

Abstract

        在主流的序列转录模型中依赖于复杂的循环或卷积神经网络,包括编码器和解码器。在这些模型中性能最好的模型还通过注意力机制连接编码器和解码器。作者提出了一种新的简单的网络架构 Transformer,它完全基于注意力机制,完全摒弃了循环和卷积。作者进行了两个关于机器翻译的实验展现出了Transformer更高的质量,同时更可并行化并且需要显着更少的时间来训练。训练的模型在 WMT 2014 英德翻译任务上达到了 28.4 BLEU,比现有的最佳结果还提高了 2 BLEU 以上。在 WMT 2014 英法翻译任务上,建立了一个新的单模型在 BLEU 得分 41.8,这仅仅在 8 个 GPU 上训练 3.5 天。实验表明,Transformer 通过成功地将其应用于具有大量和有限训练数据的English constituency parsing(英语选区解析?),并且可泛化到其他的任务取得不错的结果。

1 Introduction

        RNN、LSTM 和GRU,尤其是在序列建模和转录问题(如语言建模和机器翻译)中占据了非常高且牢固的地位。 此后,越来越多的人继续推动循环语言模型和编码器-解码器架构的发展。

        循环模型通常沿输入和输出序列的符号位置考虑计算。 将位置与计算时间的步骤对齐,它们生成隐藏状态序列 h t ,作为先前隐藏状态 h t-1 和位置 t 的输入的函数。 这种固有的顺序性质排除了训练示例中的并行化,这在更长的序列长度下变得至关重要,因为内存限制限制了示例之间的批处理。 最近的工作通过分解技巧和条件计算显着提高了计算效率,同时在后者的情况下也提高了模型性能。 然而,顺序计算的基本约束仍然存在。

        注意机制已成为各种任务中引人注目的序列建模和转录模型的组成部分,允许对依赖项进行建模,而无需考虑它们在输入或输出序列中的距离。注意力机制也与循环网络结合使用。

        在这项工作中,作者提出了 Transformer,这是一种避免重复的模型架构,而是完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。 Transformer 允许显着更多的并行化,并且在八个 P100 GPU 上经过短短 12 小时的训练后,可以在翻译质量方面达到新的水平。

2 Backgroung

        减少顺序计算的目标也构成了扩展神经 GPU 、ByteNet 和 ConvS2S 的基础,它们都使用卷积神经网络作为基本构建块,并行计算所有输入的隐藏表示和输出位置。在这些模型中,关联来自两个任意输入或输出位置的信号所需的操作数量随着位置之间的距离而增长,对于 ConvS2S 呈线性增长,而对于 ByteNet 则呈对数增长。这使得学习远距离位置之间的依赖关系变得更加困难。在 Transformer 中,这被减少到恒定数量的操作,尽管由于平均注意力加权位置而降低了有效分辨率,我们使用 Multi-Head Attention 多头注意力来抵消这种影响,如 3.2 节所述。

        自注意力,有时称为内部注意力,是一种将单个序列的不同位置关联起来以计算序列表示的注意力机制。自注意力已成功用于各种任务,包括阅读理解、抽象摘要、文本蕴涵和学习任务无关的句子表示。

        端到端记忆网络基于循环注意机制而不是序列对齐循环,并且已被证明在简单语言问答和语言建模任务中表现良好。

        Transformer 是第一个完全依赖自注意力来计算其输入和输出表示而不使用序列对齐 RNN 或卷积的转录模型。

3 Model Architecture

        大多数竞争性神经序列转导模型具有编码器-解码器结构 。 这里,编码器将符号表示的输入序列 (x 1 , ..., x n ) 映射到连续表示的序列 z = (z 1 , ..., z n )。 给定 z,解码器然后生成符号的输出序列 (y 1 , ..., y m ),一次一个元素。 在每个步骤中,模型都是自回归的,在生成下一个时将先前生成的符号用作附加输入。

        Transformer 遵循这种整体架构,对编码器和解码器使用堆叠的自注意力和逐点全连接层,分别如图 1 的左半部分和右半部分所示。 

Attention Is All You Need(Transformer)_第2张图片

3.1 Encoder and Decoder Stacks

        编码器:编码器由 N = 6 个相同层的堆栈组成。每层有两个子层。第一个是 multi-head self-attention mechanism 多头自注意力机制,第二个是简单的 positionwise fully connected feed-forward network 位置全连接前馈网络。我们在两个子层中的每一个周围使用残差连接 ,然后进行 layer normalization 层归一化。即每个子层的输出为 LayerNorm(x + Sublayer(x)) ,其中 Sublayer(x) 是子层自己实现的函数。为了促进这些残差连接,模型中的所有子层以及嵌入层都会产生维度d_{model} = 512 的输出。

        解码器:解码器也由 N = 6 个相同的层组成。除了每个编码器层中的两个子层之外,解码器还插入了第三个子层,该子层对编码器堆栈的输出执行多头注意力。与编码器类似,我们在每个子层周围使用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自注意力子层,以防止位置关注后续位置。这种掩蔽与输出嵌入偏移一个位置的事实相结合( Masked ),确保对位置 i 的预测只能依赖于位置小于 i 的已知输出。

3.2 Attention

        注意力函数可以描述为将 query 和一组 key-value 对映射到输出,其中 query 、key 、value 和output 都是向量。 输出计算为值的加权和,其中分配给每个值的权重由 query 与相应 key 的兼容性函数计算。

3.2.1 Scaled Dot-Product Attention

Attention Is All You Need(Transformer)_第3张图片

        Scaled Dot-Product Attention(图 2)。输入由 query 、维度为 d_{k} 的 key 和维度为 d_{v} 的 value 组成。我们计算 query 和 key 的点积,然后除以 \sqrt{d_{k}} ,并应用 softmax 函数来获得值的权重。

        在实践中,我们同时计算一组 query 的注意力函数,并打包到矩阵 Q 中。key 和 value 也打包到矩阵 K 和 V 中。 我们将输出矩阵计算为:

Attention Is All You Need(Transformer)_第4张图片

        两个最常用的注意功能是加性注意力机制和点积(乘法)注意力机制。 点积注意力与作者提出的算法相同,只是多了一个比例因子  \frac{1}{\sqrt{d_{k}}} 。加性注意力使用具有单个隐藏层的前馈网络计算兼容性函数。 虽然两者在理论上的复杂性相似,但点积注意力在实践中更快且更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

        虽然对于较小的 d_{k} 值,这两种机制的性能相似,但在不缩放较大的 d_{k} 值的情况下,加法注意力优于点积注意力。 我们怀疑对于较大的 d_{k} 值,点积的幅度会变大,从而将 softmax 函数推入具有极小梯度的区域。 为了抵消这种影响,我们将点积按 \frac{1}{\sqrt{d_{k}}} 缩放。 


P.S. 下面截取另一个博主太阳花的小绿豆对于Transformer的详解,这个详细解释Self-Attention以及Multi-Head Attention,我在这里引用一下方便学习理解!B站也有这个up主,神仙导师!


Attention Is All You Need(Transformer)_第5张图片​​​​​​​

3.2.2 Multi-Head Attention

        与使用 d_{module} 维的 key、value 和 query 执行单个注意功能不同,作者发现将 query、key 和 value 分别用不同的、学习的线性投影到 d_{k}d_{k}d_{v} 维线性投影 h 次是有益的。 然后,在每个query、key 和 value 的投影版本上,并行执行注意功能,产生 d_{v} 维输出值。 这些被连接起来并再次投影,产生最终值,如图 2 右所示。

        多头注意力允许模型共同关注来自不同位置的不同表示子空间的信息。 对于单个注意力头,平均化会抑制这一点。 

Attention Is All You Need(Transformer)_第6张图片

Attention Is All You Need(Transformer)_第7张图片

3.2.3 Applications of Attention in our Model

Transformer 三种不同的方式使用多头注意力:

  • 在“编码器-解码器注意力”层中,query 来自前一个解码器层,memory key 和 value 来自编码器的输出。这允许解码器中的每个位置参与输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制。
  • 编码器包含自注意力层。在自注意力层中,所有的 key、value 和 query 都来自同一个地方,在这种情况下,是编码器中前一层的输出。编码器中的每个位置都可以关注编码器上一层中的所有位置。
  • 类似地,解码器中的自注意力层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。我们需要防止解码器中的信息向左流动以保持自回归特性。我们通过屏蔽掉(设置为 -∞)softmax 输入中与非法连接相对应的所有 value 来实现缩放点积注意力的内部。

3.3 Position-wise Feed-Forward Networks

        除了注意力子层之外,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别相同地应用于每个位置。 这包括两个线性变换,中间有一个 ReLU 激活。

        虽然线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。 另一种描述方式是内核大小为 1 的两个卷积。输入和输出的维数为 d_{module} = 512,内层有维数 d_{ff} = 2048 。


         沐导对于 Multi-head attention + Position-wise Feed-Forward Networks 和 RNN 的对比,方便大家对两种方式的理解,看transformer是怎么完成rnn序列信息的提取抽象为机器所能理解的空间向量 z。 

Attention Is All You Need(Transformer)_第8张图片


3.4 Embeddings and Softmax

        与其他序列转录模型类似,作者通过使用 embeddings 将输入 token 和输出 token 转换为维度为 d_{module} 的向量。 还使用 usual learned linear transformation 和 softmax 函数将解码器输出转换为预测的下一个 token 概率。 在我们的模型中,我们在两个 embedding 层和 pre-softmax 线性变换之间共享相同的权重矩阵。 在 embedding 层中,将这些权重乘以 \sqrt{d_{module}}  模型。(学embedding的时候经过 L2 Norm,通常来说会映射到1,因为维度过大的话,权重就会减小。后面还要加上 positional encoding,所以维度要统一  )

3.5 Positional Encoding 

        由于模型不包含循环和卷积,为了让模型利用序列的顺序,必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器的输入 embedding 中添加“位置编码”。位置编码与嵌入具有相同的维度 d_{module},因此可以将两者相加。位置编码有很多选择,学习的和固定的。
        在这项工作中,我们使用不同频率的正弦和余弦函数:

Attention Is All You Need(Transformer)_第9张图片

        其中 pos 是位置,i 是维度。也就是说,位置编码的每个维度对应一个正弦曲线。波长形成从 2 \pi10000 \cdot 2\pi 的几何级数。这个函数是因为我们假设它可以让模型轻松地学习通过相对位置来参与,因为对于任何固定的偏移量 kPE_{pos+k} 可以表示为 PE_{pos} 的线性函数。

        作者还尝试使用学习的位置嵌入,发现这两个版本产生了几乎相同的结果 (see Table 3 row (E)) 。最后选择了正弦版本,因为它可以让模型推断出比训练期间遇到的序列长度更长的序列长度。

4 Why Self-Attention

本文对于self-attention解释还是比较受限的,主要还是围绕表1进行展开。

Attention Is All You Need(Transformer)_第10张图片

 希望:计算复杂度越低越好,顺序计算也少越好,信息点之间距离越短越好。

Self-Attention:n是序列的长度,d是向量的长度。自注意力就是   一些矩阵做运算n个query,维度是d,key的也是如此,query·key 时间复杂度是 n^{2}\cdot d,剩下的矩阵运算类似。顺序计算因为是矩阵运算,所以可以看做1。因为attention里面是 query 和 key 做运算,最后和 value 做运算,同时完成,不需要考虑距离,所以看作1。

7 Conclusion

        在这项工作中,作者提出了 Transformer,这是第一个完全基于注意力的序列转录模型,用multi-headed self-attention多头自注意力取代了编码器-解码器架构中最常用的循环层。

        对于翻译任务,Transformer 的训练速度明显快于基于循环或卷积层的架构。在 WMT 2014 英语到德语和 WMT 2014 英语到法语的翻译任务上,都达到了新高度。在前一项任务中,作者提出的最好的模型甚至优于所有先前所有的算法。

        作者对基于注意力的模型的未来感到兴奋,并计划将它们应用于其他任务。计划将 Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。减少生成的顺序是我们的另一个研究目标。(不得不说,作者真的很有远见!)

你可能感兴趣的:(论文阅读,transformer,深度学习,自然语言处理)