Transformer 的可视化解释(第 1 部分):功能概述

简单易懂的 Transformer 指南,介绍如何将其用于 NLP,以及为什么它们比 RNN 更好。Attention 如何帮助提高性能。

Transformer 的可视化解释(第 1 部分):功能概述

我们听到了很多关于 Transformer 的消息,这是有原因的。过去几年,Transformer 席卷了 NLP 世界。Transformer 是一种使用 Attention 来显著提高深度学习 NLP 翻译模型性能的架构。它最早是在论文《Attention is all you need》中提出的,并迅速成为大多数文本数据应用程序的领先架构。

此后,包括谷歌的 BERT 和 OpenAI的 GPT 系列在内的众多项目都在此基础上建立并发布了轻松超越现有最先进基准的性能结果。

什么是 Transformer

Transformer 架构擅长处理本质上具有顺序性的文本数据。它们将一个文本序列作为输入,并生成另一个文本序列作为输出。例如,将输入的英语句子翻译成西班牙语。

Transformer 的可视化解释(第 1 部分):功能概述

其核心是编码器层和解码器层的堆栈。为了避免混淆,我们将单个层称为编码器或解码器,并使用编码器堆栈或解码器堆栈来表示一组编解码器层。

编码器堆栈和解码器堆栈各自有对应的 Embedding 层用于各自的输入。最后有一个输出层来生成最终的输出。

Transformer 的可视化解释(第 1 部分):功能概述

所有编码器都彼此相同。同样,所有解码器也都相同。

Transformer 的可视化解释(第 1 部分):功能概述
  • 编码器包含最重要的自注意力层(用于计算序列中不同单词之间的关系),以及前馈层。
  • 解码器包含自注意力层和前馈层,以及第二个编码器-解码器注意力层。
  • 每个编码器和解码器都有自己的一组权重。

Encoder 是一个可重复使用的模块,是所有 Transformer 架构的决定性组件。除了上述两层之外,它还在两层周围具有残差连接以及两个 LayerNorm 层。

Transformer 的可视化解释(第 1 部分):功能概述

Transformer 架构有很多变体,有些 Transformer 架构根本没有 Decoder,只依赖于 Encoder。

注意力起什么作用?

Transformer 取得突破性性能的关键在于其对 Attention 的运用。

在处理一个单词时,注意力机制使模型能够关注输入中与该单词密切相关的其他单词。

例如,“Ball”与“blue”和“holding”密切相关。另一方面,“blue”与“boy”无关。

Transformer 的可视化解释(第 1 部分):功能概述

Transformer 架构利用自注意力机制,将输入序列中的每个单词与其他单词关联起来。

例如,考虑两个句子:

  • The cat drank the milk because it was hungry.
  • The cat drank the milk because it was sweet.

在第一个句子中,“it”指的是“cat”,而在第二个句子中,“it”指的是“milk”。当模型处理“it”这个词时,自注意力机制会为模型提供更多有关其含义的信息,以便模型能够将“it”与正确的单词联系起来。

Transformer 的可视化解释(第 1 部分):功能概述
深色代表注意力更集中

为了使其能够处理有关句子意图和语义的更多细微差别,Transformer 为每个单词包含多个注意力分数。

例如,在处理单词“it”时,第一个分数会突出显示“cat”,而第二个分数会突出显示“hungry”。因此,当它解码单词“it”时,例如,通过将其翻译成另一种语言,它会将“cat”和“hungry”的一些方面融入到翻译的单词中。

Transformer 的可视化解释(第 1 部分):功能概述

Transformer 在训练和推理过程中的工作方式略有不同。

Transformer 训练

我们先来看一下训练过程中数据的流动情况。训练数据由两部分组成:

  • 源或输入序列(例如,对于翻译问题,用英语说“You are welcome”)
  • 目的地或目标序列(例如,西班牙语中的“De nada”)

Transformer 的目标是学习如何通过使用输入和目标序列来输出目标序列。

Transformer 的可视化解释(第 1 部分):功能概述

Transformer 处理数据如下:

  1. 输入序列被转换为词嵌入(带有位置编码)并输入到编码器。
  2. 编码器堆栈对此进行处理并生成输入序列的编码表示。
  3. 目标序列前面加上一个句子开头的标记,转换成词嵌入(带有位置编码),然后输入到解码器。
  4. 解码器堆栈将其与编码器堆栈的编码表示一起处理,以生成目标序列的编码表示。
  5. 输出层将其转换为词概率和最终的输出序列。
  6. Transformer 的损失函数会将此输出序列与来自训练数据的目标序列进行比较。此损失用于在反向传播期间生成梯度以训练 Transformer。

Transformer 推理

在推理过程中,我们只有输入序列,没有目标序列作为输入传递给解码器。Transformer 的目标是仅从输入序列生成目标序列。

因此,就像在 Seq2Seq 模型中一样,我们在循环中生成输出,并将前一个时间步的输出序列提供给下一个时间步的解码器,直到遇到句子结束标记。

与 Seq2Seq 模型的不同之处在于,在每个时间步,我们重新输入迄今为止生成的整个输出序列,而不仅仅是最后一个字。

Transformer 的可视化解释(第 1 部分):功能概述
第一个时间步后的推理流程

推理过程中的数据流是:

  1. 输入序列被转换为词嵌入(带有位置编码)并输入到编码器。
  2. 编码器堆栈对此进行处理并生成输入序列的编码表示。
  3. 使用一个只有句首标记的空序列来代替目标序列,该空序列被转换为词嵌入(使用位置编码)并输入到解码器。
  4. 解码器堆栈将其与编码器堆栈的编码表示一起处理,以生成目标序列的编码表示。
  5. 输出层将其转换为词概率并产生输出序列。
  6. 将输出序列的最后一个单词作为预测单词。该单词现在被填充到解码器输入序列的第二个位置,该序列现在包含一个句首标记和第一个单词。
  7. 回到步骤 3,和之前一样,将新的解码器序列输入模型。然后取出输出的第二个单词并将其附加到解码器序列。重复此操作,直到它预测出句末标记。请注意,由于编码器序列在每次迭代中都不会改变,因此我们不必每次都重复步骤 1 和 2。

Teacher Forcing

在训练期间将目标序列提供给解码器的方法称为 Teacher Forcing。为什么要这样做呢?

在训练过程中,可以使用与推理过程中相同的方法。换句话说,循环运行 Transformer,从输出序列中取出最后一个单词,将其附加到解码器输入,并将其提供给解码器进行下一次迭代。最后,当预测到句末标记时,损失函数会将生成的输出序列与目标序列进行比较,以训练网络。

这种循环不仅会导致训练时间更长,还会使模型训练变得更加困难。模型必须根据可能错误的第一个预测词来预测第二个词,依此类推。

相反,通过将目标序列提供给解码器,相当于给它一个提示,就像老师一样。即使它预测的第一个单词是错误的,它也可以使用正确的第一个单词来预测第二个单词,这样这些错误就不会不断累积。

此外,Transformer 能够并行输出所有单词,无需循环,大大加快了训练速度。

Transformer 有何用途?

Transformer 用途广泛,可用于大多数 NLP 任务,例如语言模型和文本分类。它们经常用于机器翻译、文本摘要、问答、命名实体识别和语音识别等应用的序列到序列模型中。

针对不同的问题,Transformer 架构有多种不同的风格。基本编码器层是这些架构的通用构建块,根据要解决的问题,有不同的特定于应用程序的“头部”。

Transformer 分类架构

例如,情绪分析应用程序会将文本文档作为输入。分类头会获取 Transformer 的输出并生成类别标签的预测,例如正面或负面情绪。

Transformer 的可视化解释(第 1 部分):功能概述

Transformer 语言模型架构

语言模型架构会将输入序列(例如文本句子)的初始部分作为输入,并通过预测后续句子来生成新文本。语言模型头会获取 Transformer 的输出并为词汇表中每个单词生成一个概率,概率最高的单词将成为句子中下一个单词的预测输出。

Transformer 的可视化解释(第 1 部分):功能概述

Transformer 比 RNN 好在哪里?

过去 RNN 及其同类 LSTM 和 GRU 是所有 NLP 应用程序事实上的架构,直到 Transformers 出现并取代了它们。

基于RNN的序列到序列模型表现良好,在Attention机制刚被引入时,就被用来增强其性能。

但是,它们有两个局限性:

  • 处理长句子中相距较远的单词之间的长程依赖关系是一项挑战。
  • 按顺序逐个单词地处理输入序列,必须先完成时间步 t – 1的计算,才能进行时间​​步 t 的计算。这会减慢训练和推理的速度。

另外,使用 CNN,所有输出都可以并行计算,这使得卷积更快。然而,它们在处理长距离依赖关系方面也有局限性:

  • 在卷积层中,只有图像中距离足够近、适合内核大小的部分(或文本数据中的单词)才能相互交互。对于距离较远的部分,需要一个具有很多层的更深的网络。

Transformer 架构解决了这两个限制。它完全摆脱了 RNN,完全依赖于 Attention 的优势。

  • 可以并行处理序列中的所有单词,从而大大加快计算速度。
Transformer 的可视化解释(第 1 部分):功能概述
  • 输入序列中单词之间的距离并不重要。它同样擅长计算相邻单词和相距较远的单词之间的依赖关系。

现在我们对 Transformer 有了高层次的了解,我们可以在下下一篇文章中更深入地了解其内部功能,以了解其工作原理的细节。

© 版权声明

相关文章