掌握Transformer之概述

文摘   科技   2024-09-12 07:00   江苏  
点击蓝字
 
关注我们










01


引言



我们经常听人们提到Transformer,这是有道理的。在过去几年里,Transformer结构在 NLP领域中掀起了一场风暴。Transformer 是一种使用注意力机制来显著提高深度学习NLP领域机器翻译模型性能的架构。它首次出现在论文《Attention is all you need》中,并迅速成为大多数文本数据应用的领先架构。


此后,包括谷歌的BERT和OpenAI的GPT系列在内的许多项目都在此基础上进行了改进,并公布了其性能结果,这些结果都大大超越了之前多项NLP任务的最先进基准。


在本文中,我们将介绍Transformer的基础知识、架构和内部工作原理。我将以自上而下的方式介绍Transformer的功能。闲话少说,我们直接开始吧!






02


什么是Transformer?


Transformer结构擅长处理具有顺序性的文本数据。例如,将输入的英语句子翻译成西班牙语。如下图示:

该结构的核心是编码器层和解码器层的堆叠。为避免混淆,我们将把单个层称为编码器或解码器,而把一组编码器层称为编码器堆叠stack或解码器堆叠stack。编码器堆叠stack和解码器堆叠stack各有相应的嵌入层,用于处理各自的输入。最后,还有一个输出层来生成最终输出。

所有编码器彼此相同。同样,所有解码器也完全相同。编码器和解码器的内部构成如下:

仔细观察上述结构,可以得到如下结论:

  • 编码器包含最重要的自注意力层(用于计算序列中不同单词之间的关系)和前馈神经网络层。

  • 解码器也包含自注意力层和前馈神经网络层,还多了一个编码器-解码器注意力层。
  • 每个编码器和解码器都有自己的权重。

此外,编码器是一个可重复使用的模块,是所有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.

在第一个句子中,"it"指的是 "cat",而在第二个句子中,"it"指的是 "milk"。当模型在处理"it"这个单词时,自注意力机制会为模型提供更多有关其含义的信息,从而能将单词"it"与正确的词联系起来。
深色代表更高的注意力得分


此外,为了使模型能够处理句子意图和语义的更多细微差别,Transformers 为每个单词设定了多个注意力分数。例如在处理 “it”这个单词时,第一个分数会突出显示 "cat",而第二个分数则会突出显示 "hungry"。如下所示:

因此,解码器在解码 "it"这个单词时,例如将其翻译成另一种语言,它就会将"cat "和"hungry"的某些方面融入翻译词中。





04


  训练Transformer


Transformer在训练和推理时的工作方式略有不同。让我们先来看看训练期间的数据流。训练数据主要由两部分组成:
  • 输入序列 (如英语翻译成西班牙语任务中的“you are welcome”)

  • 目标序列 (对应的西班牙语"De nada"
Transformer的目标是通过使用输入和目标序列,学习如何输出目标序列。

Transformer的训练过程

在训练阶段Transformer是这样处理数据的:

  • 输入序列被转换成嵌入表示(带位置编码),并输入编码器。
  • 编码器stack对此进行处理,并生成输入序列的编码表示。
  • 在目标序列前加上句首标记,将其转换为嵌入表示(使用位置编码),然后送入解码器。
  • 解码器stack将其与编码器stack的编码表示一起处理,生成目标序列的编码表示。
  • 输出层将其转换为单词概率和最终输出序列。
  • Transformer的损失函数将输出序列与训练数据中的目标序列进行比较。在反向传播过程中,该损失用于生成梯度来训练Transformer。





05


  Transformer的推理


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

因此,就像在 Seq2Seq 模型中一样,我们循环生成输出,并在下一个step将上一个step的输出序列作为解码器的输入,直到遇到句末标记。

与 Seq2Seq 模型的不同之处在于,在每个step,我们都会重新输入迄今为止生成的整个输出序列,而不仅仅是最后一个单词

第一个step之后的推理流程

在推理阶段中的数据流如下:
  • 输入序列被转换成嵌入表示(带位置编码),并输入编码器。
  • 编码器stack对此进行处理,并生成输入序列的编码表示。

  • 我们使用一个只有句首标记的空序列来代替目标序列。这将被转换为嵌入表示(使用位置编码),并输入解码器。

  • 解码器stack将其与编码器stack的编码表示一起处理,生成目标序列的编码表示。

  • 输出层将其转换为单词概率,并生成输出序列。

  • 我们将输出序列的最后一个词作为预测词。现在,该单词被填充到解码器输入序列的第二个位置,该序列现在包含一个句子起始标记和第一个单词。

  • 回到第 3 步。与之前一样,将新的解码器序列输入模型。然后将输出的第二个单词添加到解码器序列中。重复上述步骤,直到预测出一个句末标记为止。请注意,由于每次迭代时编码器序列都不会改变,因此我们不必每次都重复步骤 #1 和 #2。







06


  Teacher Forcing

在训练过程中向解码器输入目标序列的方法被称为 “Teacher Forcing”。我们为什么要这样做,这个词是什么意思?
在训练过程中,我们可以使用与推理过程中相同的方法。换句话说,循环运行多次Transformer,每次从输出序列中提取最后一个词,将其附加到解码器输入中,并将其输入解码器进行下一次迭代。最后,当预测到句末标记时,损失函数会将生成的输出序列与目标序列进行比较,以训练网络。
这种循环不仅会导致训练时间大大延长,还会增加模型训练的难度。模型必须根据可能错误的第一个预测词来预测第二个词,以此类推。
相反,通过向解码器输入目标序列,我们可以说是给了它一个提示,就像老师一样。即使解码器预测出了错误的第一个单词,它也可以利用正确的第一个单词来预测第二个单词,这样错误就不会继续累积。
此外,Transformer 还能并行输出所有单词,无需循环,从而大大加快了训练速度。





07


  Transformer的用途

Transformer用途广泛,可用于大多数 NLP 任务,如语言模型和文本分类。它们常用于机器翻译、文本总结、问答、命名实体识别和语音识别等应用中的序列到序列模型。
针对不同的问题,有不同的Transformer架构。基本的编码器层被用作这些架构的通用组件,并根据要解决的问题配备不同的特定应用的head头。
例如,情感分析应用程序将文本文档作为输入。分类头接收Transformer的输出,并生成类别标签预测,如积极或消极情感。

文本文档情感词分类






08


  相比RNN的优势

在Transformer结构出现之前,RNNs 及其表兄弟 LSTMs 和 GRUs 曾是所有 NLP 应用的典型架构。基于RNN的序列到序列模型表现出色,然而,RNNs有两个局限性:

  • 处理长句子中相距甚远的单词之间的长距离依赖关系是一项挑战。
  • 它们每次按顺序处理输入序列中的一个单词,这意味着在完成时间步骤 t - 1 的计算之前,它无法进行时间步骤 t 的计算。
作为对比,CNN 的所有输出都可以并行计算,这使得卷积速度大大提高。不过,CNNs在处理长距离依赖关系时也有局限性:在卷积层中,只有图像中足够接近、适合kernel size的部分才能相互影响。对于相距较远的像素,则需要更深的多层网络。
Transformer 架构解决了这两个局限性。它完全摆脱了 RNN,完全依靠注意力的优势:
  • 可以并行处理序列中的所有单词,从而大大加快了计算速度。
  • 输入序列中单词之间的距离并不重要。它同样擅长计算相邻单词和相距甚远的单词之间的依赖关系。


现在我们已经对Transformer有了一个高层次的概念了解,我们可以在下一篇文章中深入了解其内部功能,探讨其内部的工作细节。

您学废了嘛?







点击上方小卡片关注我




添加个人微信,进专属粉丝群!



AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
 最新文章