注意力机制的主要思想是,编码器不再像图1-3那样对整个输入序列只生成一个状态了,而是为每个表示都生成一个状态,即解码器可以访问编码器所有隐藏状态。但是,同时处理所有状态会给解码器带来巨大的输入数量,因此需要一些机制来按优先级使用状态。这就是注意力的用武之地:它让解码器在每个解码时间步为每个编码器状态分配不同量的权重或“注意力”。此过程如图1-4所示,其中展示了注意力在预测输出序列中的词元sind中的作用。
图1-4:整合了注意力机制的成对RNN的编码器-解码器架构
通过关注每个时间步最相关的输入标注,这些基于注意力的模型能够学习生成翻译中的单词与源句子中的单词之间的非平凡对应(nontrivial alignment) [7] 。例如,图1-5可视化了英语到法语翻译模型的注意力权重,其中每个像素表示一个权重。图1-5展示了解码器如何能够正确对应单词“zone”和“Area”,它们在两种语言中的顺序不同。
尽管注意力机制能够带来更好的翻译,但在编码器和解码器中使用循环神经网络模型仍然存在一个重大缺点:计算本质上是顺序的,不能跨输入序列并行化。
Transformer引入了一种新的建模范式:完全放弃循环,改为使用一种特殊形式的注意力——自注意力。我们将在第3章更详细地介绍自注意力,这里先简单描述一下其基本思想:允许注意力对神经网络同一层中的所有状态进行操作。如图1-6所示,其中编码器和解码器都有自己的自注意力机制,其输出被馈送到前馈神经网络(FF NN)。这种架构的训练速度比循环神经网络模型快得多,从而为NLP许多最新突破铺平了道路。
图1-5:RNN编码器-解码器对英语单词和生成的法语翻译的对应(由Dzmitry Bahdanau提供)
图1-6:原始Transformer的编码器-解码器架构
在最初的Transformer论文中,翻译模型是在各种语言的大型句子对语料库上从头开始训练的。然而,在许多NLP实际应用中,我们无法访问大量的标注文本数据来训练我们的模型。因此我们引入了Transformer革命的最后一部分:迁移学习。