text: 减少序列计算的任务目标构成了ExtendedNeuralGPU、ByteNet和ConvS2S的基础，它们都是使用卷积神经网络作为基本构建块，因而能对所有输入与输出位置的隐藏表征执行并行计算。在这些模型中，两个任意输入与输出位置的信号关联所需要的运算数量与它们的位置距离成正比，对于ConvS2S为线性增长，对于ByteNet为对数增长。这种现象使得学习较远位置的依赖关系非常困难。而在Transformer中，这种成本会减少到一个固定的运算数量，尽管平均注意力位置加权会减少有效表征力，但使用Multi-HeadAttention注意力机制可以抵消这种成本。
  自注意力（Self-attention），有时也称为内部注意力，它是一种涉及单序列不同位置的注意力机制，并能计算序列的表征。自注意力在多种任务中都有非常成功的应用，例如阅读理解、摘要概括、文字蕴含和语句表征等。自注意力这种在序列内部执行Attention的方法可以视为搜索序列内部的隐藏关系，这种内部关系对于翻译以及序列任务的性能非常重要。
  然而就我们所知道的，Transformer是第一种完全依赖于自注意力以计算输入与输出表征的方法，这意味着它没有使用序列对齐的RNN或卷积网络。从Transformer的结构就可以看出，它并没有使用深度网络抽取序列特征，顶多使用几个线性变换对特征进行变换。
  本文主要从模型架构、训练配置和两个实际翻译模型开始介绍AshishVaswani等人的原论文与HarvardNLP团队实现的代码。在模型架构中，我们将讨论编码器、解码器、注意力机制以及位置编码等关键组成部分，而训练配置将讨论如何抽取批量数据、设定训练循环、选择最优化方法和正则化器等。最后我们将跟随AlexanderRush等人的实现训练两个神经机器翻译系统，其中一个仅使用简单的合成数据，而另一个则是真实的IWSLT德语-英语翻译数据集。
  大多数神经序列模型都使用编码器-解码器框架，其中编码器将表征符号的输入序列(x_1,…,x_n)映射到连续表征z=(z_1,…,z_n)。给定中间变量z，解码器将会生成一个输出序列(y_1,…,y_m)。在每一个时间步上，模型都是自回归的（auto-regressive），当生成序列中的下一个元素时，先前生成的元素会作为输入。
  以下展示了一个标准的编码器-解码器框架，EncoderDecoder类定义了先编码后解码的过程，例如先将英文序列编码为一个隐向量，在基于这个中间表征解码为中文序列。