![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
2017 年,一组研究人员(来自 Google 和多伦多大学)介绍了一种处理自然语言处理 (NLP) 任务的新方法。他们的革命性论文《注意力就是一切》介绍了 Transformer 模型,这种架构如今已成为许多先进 AI 系统的基础。该模型的性能、可扩展性和多功能性使其得到广泛采用,成为 BERT(双向编码器表示)和 GPT(生成式预训练 Transformer)等最先进模型的支柱。
在 Transformer 模型出现之前,大多数处理语言的 AI 模型都严重依赖于一种称为循环神经网络 (RNN) 或其改进版本长短期记忆网络 (LSTM) 的神经网络。特别是语言建模和机器翻译(也称为序列传导)等问题。这些模型按顺序逐个处理单词,从左到右(或反之亦然)。虽然这种方法很有意义,因为句子中的单词通常依赖于前面的单词,但它有一些明显的缺点:
核心理念:关注建筑
Transformer 模型背后的核心思想是所谓的“注意力”。简单来说,注意力可以帮助模型在尝试理解单词的含义/上下文时专注于句子的特定部分。考虑这个句子,“停在车库里的车是蓝色的。”当你想到“蓝色”这个词时,你自然会关注句子前面的“汽车”这个词,因为它告诉你什么是蓝色。机器翻译模型很难确定“蓝色”是指汽车还是车库。这就是自注意力的作用——它可以帮助模型专注于相关的单词,无论它们在句子中的什么位置。
请注意,注意力并不是一个新概念,而且已经与 RNN 结合使用。Transformer 是第一个完全依赖注意力的传导模型,因此不再需要神经网络。这具有以下优势:
如你所见,新模型不仅消除了神经网络的所有缺点,而且实际上还提高了机器翻译的性能!
由于原始论文可能有点难以理解,这里对论文中描述的模型架构进行更简单的解释。
编码器和解码器堆栈:Transformer 由编码器堆栈(左侧)和解码器堆栈(右侧)组成。编码器堆栈将输入序列(如句子)转换为一组连续的表示,而解码器堆栈将这些表示转换为输出序列(如翻译)。对于每个堆栈,从下到上,以下是通过示例解释模型的核心组件。
编码器中的输入句子处理
输入:您想要翻译的文本。例如“停在车库里的车是蓝色的。”
输入嵌入:将单词转换为固定长度的数值表示(向量),称为嵌入。这些嵌入以模型可以理解的方式捕获单词的语义。从我们的示例中可以看出:
“该” -> [0.9,-0.4,0.2,...]
“汽车” -> [0.5,0.1,-0.7,...]
“那” -> [-0.8, 0.2, 0.8, ...]
对上面句子中的每个单词也同样如此。
位置编码:由于模型处理的是无序的输入嵌入,因此需要一种方法来理解句子中单词的顺序。位置编码将序列中每个单词的位置信息添加到其嵌入中。
位置 1 处的“The”可能会调整为 [0.9 + P1, -0.4 + P1, 0.2 + P1, ...],其中 P1 表示第一个位置的位置编码,从而生成对于位置 P1 唯一的新嵌入。
自注意力机制:如前所述,这允许模型根据上下文关注句子中的不同单词。对于每个单词,自注意力机制计算一个分数,该分数表示在编码当前单词时应该给予其他单词多少关注。
对于“汽车”这个词,自我注意力可能会确定“停放”、“车库”和“蓝色”对于理解其上下文特别相关。
多头注意力:Transformer 模型的新颖部分。多头注意力只是并行运行并线性连接的多个自注意力层/操作。
例如,一个头脑可能关注主要主题(“汽车”)及其属性(“蓝色”),而另一个头脑可能关注关系从句(“停在车库里”)。
多头注意力模块使模型能够理解“蓝色”与汽车相比与车库更相关。
前馈神经网络:在自注意力层之后,输出通过前馈神经网络,该神经网络分别且相同地应用于每个位置(再次强调,可以并行运行!)。它由两个线性变换组成,中间有一个 ReLU 激活。
添加和规范:残差连接(添加)用于将层的输入添加到其输出,然后对其进行规范化(规范)。这有助于训练深度网络,防止梯度消失或爆炸。
在解码器中生成翻译
在 NLP 中,通常使用特殊字符 <SOS> 表示序列开始标记的开始,使用 <EOS> 表示序列的结束。解码器从编码器获取处理后的输入,并生成法语翻译“La voiture qui était garée dans le garage est bleue”。此部分的工作原理如下:
解码器的输入:解码器从编码器的英语句子的编码表示开始。如果您注意到,解码器还将自己的输出作为输入。由于它没有初始单词的输入,我们在开头插入 <SOS> 标记(因此向右移动)并删除最后一个单词。这个移位序列就是输入到解码器中的。
掩蔽自注意力:在解码器中,掩蔽自注意力机制确保输出序列中的每个单词只能关注其之前的单词。这可以防止模型向前看,并确保它从左到右一次生成一个单词的翻译。
例如,当解码器即将生成单词“La”(法语的第一个单词)时,它只知道<SOS>中的上下文,而不知道“Voiture”这样的未来单词。
前馈神经网络:解码器应用另一个前馈神经网络进一步处理这些信息,逐步完善翻译。
在解码器中,通过多层掩蔽自注意力、编码器-解码器注意力和前馈网络处理输入句子后,我们获得了目标句子(在我们的例子中是法语)中每个位置的一系列连续表示(浮点向量)。这些表示需要转换成实际的单词。这就是最后的线性和 softmax 层发挥作用的地方。
解码器基本上执行以下操作:
通过结合这些步骤,Transformer 可以比以前的模型更有效地理解整个句子的结构和含义。自注意力机制和并行处理使 Transformer 能够有效地捕捉源语言和目标语言的细微差别和结构,使其在机器翻译等任务上非常熟练。