Introduction
本文主要介绍了 Google 于 2017 年的论文Attention Is All You Need。该论文被认为是
Transformer 架构的开出鼻祖,其中抛弃了传统 RNN 和 CNN 的循环和卷积结构,完全通过注意力机制来处理语言转导(transduction)问题。
What is Transformer
Transformer 结构是一个完全通过注意力机制来描绘输入和输出之间的依赖关系,避免类似 RNN 的循环结构和 CNN
的卷积结构,通过高效的矩阵运算来提高并行化的序列语言转导模型(sequence transduction model)。Transformer 通过
Self-Attention、Multi-Head Attention 和 Cross Attention 来实现注意力机制以及 encoder-decoder 之间的关联。
Background
大多数具有竞争力的神经序列转导模型具有 encoder-decoder 结构。在这里,encoder 将符号表示的输入序列
映射到连续表示序列 。给定 ,decoder 然后生成一个符号的输出序列
,一次一个元素。在每一步,模型都是自回归(auto-regressive)的,即在生成下一步时,使用先前生成的符号作为额外的输入。
Self-Attention
在论文中也被叫做 Scaled Dot-Product Attention
- queries and keys: dimension
- values: dimension
- 计算 query 和所有 keys 的内积,然后除以 , 然后通过一个 softmax 函数做归一化。从而得到了权重。
- 为什么添加 :常见的 attention 机制包括 dot-product 和 additive attention。后者在没有缩放的情况下,能够比前者表现的更加出色。因此本文作者怀疑是因为 dot product 的结果过大,取了 softmax 之后让结果落在了梯度较大的区间。
Multi-Head Attention
通过多个相同的 Self-Attention 叠加实现。Multi-Head Attention 允许模型共同关注来自不同位置的不同表示子空间的信息。对于单个注意力头,平均会抑制这种情况。
Application of Attention
Transformer 通过三种不同的方式使用 multi-head attention
- Cross Attention:也就是 encoder-decoder 之间的 attention,queries 来自之前的 decoder 层,memory keys 和 values 来自 encoder 的输出。这允许 decoder 中的每个位置都关注 input sequence 中的所有位置。
- encoder:encoder 包含 self-attention 层。keys, values 和 queries 都来自相同的地方。在本文中是 encoder 中前一层的输出。encoder 中的每个位置都可以处理 encoder 上一层中的所有位置。
- Masked Multi-Head Attention:decoder 中的 Attention。需要防止 decoder 的信息向左流动,从而保证 auto-regressive 的属性(即只能看到自己之前的位置信息)。通过在 scaled dot-product attention 内部实现: mask softmax 函数中对应着非法连接输入(比如说 和位置 2 的 value 就是非法的)的 values(设置为 )。
Position-wise Feed-Forward Networks
全连接前馈网络,分别应用于每个位置。通过两个线性变换和一个 ReLU 激活函数在两个变换之间实现。( 其实就是个 ReLU)。
Position Embedding
利用 sequence 的顺序,需要注入一些有关 sequence 中 tokens 的相对或者绝对位置的信息。这就是 positional encodings。将 input embeddings 加入到 encoder 和 decoder Stack 底部的 input embeddings。
有很多种 positional encodings 的选择:可学习的或者固定的。
本文:sine 和 cosine(固定的)。
Transformer vs. CNN/RNN
Transformer 省去了 CNN 中的卷积操作和 RNN 中的循环操作,能够通过矩阵运算快速的计算注意力得分,从而得到输入输出之间的关系。Transformer 显著提高了并行化的水平,而且对于全局的注意力有着极大的提升(即无论位置多远,Transformer 架构都能够得到两个位置之间的依赖关系)。