01
引言
我们经常听人们提到Transformer,这是有道理的。在过去几年里,Transformer结构在 NLP领域中掀起了一场风暴。Transformer 是一种使用注意力机制来显著提高深度学习NLP领域机器翻译模型性能的架构。它首次出现在论文《Attention is all you need》中,并迅速成为大多数文本数据应用的领先架构。
此后,包括谷歌的BERT和OpenAI的GPT系列在内的许多项目都在此基础上进行了改进,并公布了其性能结果,这些结果都大大超越了之前多项NLP任务的最先进基准。
在本文中,我们将介绍Transformer的基础知识、架构和内部工作原理。我将以自上而下的方式介绍Transformer的功能。闲话少说,我们直接开始吧!
02
什么是Transformer?
Transformer结构擅长处理具有顺序性的文本数据。例如,将输入的英语句子翻译成西班牙语。如下图示:
仔细观察上述结构,可以得到如下结论:
编码器包含最重要的自注意力层(用于计算序列中不同单词之间的关系)和前馈神经网络层。
解码器也包含自注意力层和前馈神经网络层,还多了一个编码器-解码器注意力层。 每个编码器和解码器都有自己的权重。
此外,编码器是一个可重复使用的模块,是所有Transformer架构中的决定性组件。除上述两层外,它还具有两个Residual skip以及两个LayerNorm层。
03
注意力机制有什么作用
Transformer结构之所以具有突破性的性能,关键在于它对 "注意力机制"的运用。在处理一个单词时,"注意力机制"能让模型关注输入中与该单词密切相关的其他单词。我们来看个样例句子,如下:
我们知道,单词“ball”与 "blue"和 "holding"密切相关。另一方面,"blue"与 "boy"没有直接的关系。Transformer 架构通过将输入序列中的每个单词与其他单词相关联来实现自注意力机制。
The cat drank the milk because it was hungry.
The cat drank the milk because it was sweet.
此外,为了使模型能够处理句子意图和语义的更多细微差别,Transformers 为每个单词设定了多个注意力分数。例如在处理 “it”这个单词时,第一个分数会突出显示 "cat",而第二个分数则会突出显示 "hungry"。如下所示:
因此,解码器在解码 "it"这个单词时,例如将其翻译成另一种语言,它就会将"cat "和"hungry"的某些方面融入翻译词中。
04
训练Transformer
输入序列 (如英语翻译成西班牙语任务中的“you are welcome”)
目标序列 (对应的西班牙语"De nada")
在训练阶段Transformer是这样处理数据的:
输入序列被转换成嵌入表示(带位置编码),并输入编码器。 编码器stack对此进行处理,并生成输入序列的编码表示。 在目标序列前加上句首标记,将其转换为嵌入表示(使用位置编码),然后送入解码器。 解码器stack将其与编码器stack的编码表示一起处理,生成目标序列的编码表示。 输出层将其转换为单词概率和最终输出序列。 Transformer的损失函数将输出序列与训练数据中的目标序列进行比较。在反向传播过程中,该损失用于生成梯度来训练Transformer。
05
Transformer的推理
因此,就像在 Seq2Seq 模型中一样,我们循环生成输出,并在下一个step将上一个step的输出序列作为解码器的输入,直到遇到句末标记。
与 Seq2Seq 模型的不同之处在于,在每个step,我们都会重新输入迄今为止生成的整个输出序列,而不仅仅是最后一个单词。
第一个step之后的推理流程
输入序列被转换成嵌入表示(带位置编码),并输入编码器。 编码器stack对此进行处理,并生成输入序列的编码表示。
我们使用一个只有句首标记的空序列来代替目标序列。这将被转换为嵌入表示(使用位置编码),并输入解码器。
解码器stack将其与编码器stack的编码表示一起处理,生成目标序列的编码表示。
输出层将其转换为单词概率,并生成输出序列。
我们将输出序列的最后一个词作为预测词。现在,该单词被填充到解码器输入序列的第二个位置,该序列现在包含一个句子起始标记和第一个单词。
回到第 3 步。与之前一样,将新的解码器序列输入模型。然后将输出的第二个单词添加到解码器序列中。重复上述步骤,直到预测出一个句末标记为止。请注意,由于每次迭代时编码器序列都不会改变,因此我们不必每次都重复步骤 #1 和 #2。
06
Teacher Forcing
07
Transformer的用途
文本文档情感词分类
08
相比RNN的优势
在Transformer结构出现之前,RNNs 及其表兄弟 LSTMs 和 GRUs 曾是所有 NLP 应用的典型架构。基于RNN的序列到序列模型表现出色,然而,RNNs有两个局限性:
处理长句子中相距甚远的单词之间的长距离依赖关系是一项挑战。 它们每次按顺序处理输入序列中的一个单词,这意味着在完成时间步骤 t - 1 的计算之前,它无法进行时间步骤 t 的计算。
可以并行处理序列中的所有单词,从而大大加快了计算速度。 输入序列中单词之间的距离并不重要。它同样擅长计算相邻单词和相距甚远的单词之间的依赖关系。
现在我们已经对Transformer有了一个高层次的概念了解,我们可以在下一篇文章中深入了解其内部功能,探讨其内部的工作细节。
您学废了嘛?
点击上方小卡片关注我
添加个人微信,进专属粉丝群!