Press "Enter" to skip to content

解码:用简单的英文解释变形金刚

无代码,数学,或提及键,查询和值

自从它们在2017年被引入以来,变压器已经成为机器学习领域的一股重要力量,彻底改变了主要翻译和自动完成服务的能力。

最近,随着像OpenAI的ChatGPT、GPT-4和Meta的LLama等大型语言模型的出现,变压器的流行度更是飙升。这些模型引起了极大的关注和兴奋,它们都建立在变压器架构的基础上。通过利用变压器的力量,这些模型在自然语言理解和生成方面取得了重大突破,并将它们暴露给了公众。

尽管有很多解析变压器工作原理的好资源,但我发现自己处于一个困惑的位置,理解了变压器的数学工作原理,但很难直观地解释一个变压器的工作原理。在进行了许多面试,与同事交谈,并进行了一次有关这个主题的快速演讲之后,似乎有很多人分享了这个问题!

在这篇博文中,我将尽力以高层次的方式解释变压器是如何工作的,而不依赖于代码或数学。我的目标是避免令人困惑的技术术语和与之前架构的比较。虽然我会尽量保持简单,但由于变压器本身非常复杂,这并不容易,但我希望它能提供更好的直觉,让大家了解它们做什么以及如何做到。

什么是变压器?

变压器是一种适合处理输入序列的神经网络架构。在这个上下文中,一个序列的最常见例子就是一句话,我们可以把它看作是一组有序的单词。

这些模型的目标是为序列中的每个元素创建一个数值表示,封装有关元素及其相邻上下文的关键信息。然后,这些生成的数值表示可以传递给下游网络,下游网络可以利用这些信息来执行各种任务,包括生成和分类。

通过创建这样丰富的表示,这些模型使得下游网络能够更好地理解输入序列中的潜在模式和关系,从而增强它们生成连贯和具有上下文相关性的输出的能力。

变压器的关键优势在于其处理序列中的长程依赖关系的能力,以及其高效性;能够并行处理序列。这对于机器翻译、情感分析和文本生成等任务非常有用。

利用Azure OpenAI Service DALL-E模型生成的图像,以下是提示内容:“由Optimus Prime形状的绿色和黑色Matrix代码生成的图像”

什么是变压器的构成部分?

要将输入馈送到变压器中,我们首先必须将其转换为一系列标记;一组表示我们输入的整数。

由于变压器最初应用于自然语言处理领域,我们先考虑这种情况。将句子转换为一系列标记的最简单方法是定义一个词汇表,作为查找表,将单词映射到整数;我们可以预留一个特定的数字来表示不包含在此词汇表中的任何单词,以便我们始终能够分配一个整数值。

解码:用简单的英文解释变形金刚 四海 第2张

在实践中,这是一种天真的文本编码方式,因为像cat和cats这样的词被视为完全不同的标记,尽管它们是同一个动物的单数和复数描述!为了克服这个问题,人们设计了不同的标记化策略,例如字节对编码,将单词分解成较小的块以进行索引。此外,通常有必要添加特殊标记来表示诸如句子开头和结尾等特征,为模型提供额外的上下文。

让我们考虑以下示例,以更好地理解标记化过程。

“你好,今天在Drosval的天气是不是很好?”

Drosval是由GPT-4使用以下提示生成的一个虚构的地名:“你能创造一个听起来像大卫·杰梅尔的德莱尼宇宙中的地名吗?”;故意选择此名称,因为它不应该出现在任何训练模型的词汇表中。

使用来自转换器库bert-base-uncased分词器,将其转换为以下标记序列:

解码:用简单的英文解释变形金刚 四海 第3张

表示每个单词的整数会根据特定的模型训练和标记策略而变化。解码后,我们可以看到每个标记表示的词:

解码:用简单的英文解释变形金刚 四海 第4张

有趣的是,我们可以看到这与我们的输入不同。添加了特殊标记,缩写被拆分成多个标记,虚构的地名由不同的“块”表示。因为我们使用的是“uncased”模型,我们也失去了所有大写字母的上下文。

然而,虽然我们在示例中使用了一个句子,但transformers并不限于文本输入;这种架构在视觉任务上也展示了良好的结果。将图像转换为序列时,ViT的作者将图像切割成非重叠的16×16像素块,并将它们连接成一个长向量,然后将其传递到模型中。如果我们在推荐系统中使用transformer,一种方法可以是将用户最后浏览的n个商品的item id作为输入提供给网络。如果我们能为领域中的输入标记创建有意义的表示,我们就可以将其输入到transformer网络中。

嵌入我们的标记

一旦我们有了代表输入的整数序列,我们就可以将它们转换为嵌入。嵌入是一种用机器学习算法轻松处理的信息表示方式;它们旨在以压缩格式表示编码的令牌的含义,通过将信息表示为一系列数字。最初,嵌入是用随机数序列初始化的,并且在训练过程中学习到有意义的表示。然而,这些嵌入有一个固有的限制:它们不考虑令牌出现的上下文。这涉及两个方面。

根据任务的不同,在嵌入我们的标记时,我们可能还希望保留标记的顺序;这在NLP等领域尤为重要,否则我们基本上得到一个词袋模型。为了解决这个问题,我们对我们的嵌入应用位置编码。虽然有创建位置编码的多种方式,但主要思想是我们另外有一组嵌入,表示输入序列中每个标记的位置,这些嵌入与我们的标记嵌入组合在一起。

解码:用简单的英文解释变形金刚 四海 第5张

另一个问题是,令牌的含义可能会因其周围令牌的不同而不同。考虑以下句子:

天黑了,是谁关掉了灯?

哇,这个包裹真的很轻!

在这里,“轻”一词在两种不同的语境中使用,有完全不同的含义!然而,根据分词策略的不同,嵌入将是相同的。在变换器中,这是通过其注意机制来处理的。

概念上,注意力是什么?

在变换器架构中,最重要的机制之一是称为注意力(attention)的机制,它使网络能够理解输入序列中哪些部分对于给定任务最相关。对于序列中的每个标记,注意力机制确定在给定上下文中理解当前标记最重要的其他标记。在我们探讨变换器中如何实现这一点之前,让我们从简单的角度开始,试着理解注意力机制在概念上试图实现什么,以建立我们的直觉。

理解注意力的一种方法是将其视为一种方法,通过一个嵌入来替换每个标记的嵌入,其中包含了关于其相邻标记的信息;而不是无论上下文如何都使用相同的嵌入。如果我们知道哪些标记与当前标记相关,捕捉这个上下文的一种方式就是创建一个加权平均值-或者更一般地说,一个线性组合-这些嵌入。

解码:用简单的英文解释变形金刚 四海 第6张

让我们来看一个简单的例子,看看这在我们之前看到的句子之一中是如何实现的。在应用注意力之前,序列中的嵌入没有其相邻元素的上下文。因此,我们可以将词语”light”的嵌入可视化为以下线性组合。

解码:用简单的英文解释变形金刚 四海 第7张

在这里,我们可以看到我们的权重只是单位矩阵。应用注意机制后,我们希望学习一个权重矩阵,使我们可以以类似于以下方式表达我们的light嵌入。

解码:用简单的英文解释变形金刚 四海 第8张

这一次,较大的权重赋予了与我们选择的标记的序列最相关部分相对应的嵌入;这应该确保最重要的上下文被捕捉在新的嵌入向量中。

包含有关其当前上下文的信息的嵌入有时被称为上下文化嵌入,这是我们最终要创建的。

现在我们对注意力试图实现的目标有了高层次的理解,让我们在下一节中探讨如何实际实现这一点。

注意力如何计算?

有多种类型的注意力,其主要区别在于用于执行线性组合的权重的计算方法。在这里,我们将考虑缩放点积注意力,因为这是最常见的方法。在本节中,假设我们所有的嵌入都已经被位置编码。

回顾一下,我们的目标是使用原始嵌入的线性组合创建上下文化嵌入,让我们从简单的开始,假设我们可以将所有需要的信息编码到我们学习到的嵌入向量中,而我们需要计算的只是权重。

为了计算权重,我们必须首先确定哪些标记对彼此是相关的。为了实现这一点,我们需要建立两个嵌入之间的相似性的概念。表示这种相似性的一种方法是使用点积,其中我们希望学习的嵌入表示更高的分数意味着两个单词更相似。

解码:用简单的英文解释变形金刚 四海 第9张

由于对于每个标记,我们需要计算其与序列中的每个其他标记的关联性,我们可以将其推广为矩阵乘法,这为我们提供了我们的权重矩阵;这通常被称为注意力得分。为确保我们的权重总和为一,我们还应用了SoftMax函数。然而,由于矩阵乘法可能产生任意大的数字,这可能导致SoftMax函数在大的注意力得分时返回非常小的梯度;这可能会导致训练过程中的梯度消失问题(vanishing gradient problem)。为了解决这个问题,注意力得分在应用SoftMax之前乘以一个缩放因子。

现在,要获得我们的上下文化嵌入矩阵,我们可以将我们的注意力分数与原始嵌入矩阵相乘;这相当于对我们的嵌入进行线性组合。

解码:用简单的英文解释变形金刚 四海 第10张

简化的注意力计算:假设嵌入是位置编码的

尽管模型可能学习到足够复杂的嵌入来生成注意力分数和随后的上下文化嵌入;但我们试图将大量信息压缩到通常相当小的嵌入维度中。

因此,为了使模型学习任务稍微容易些,让我们引入一些更多可学习的参数!不直接使用我们的嵌入矩阵,而是将其通过三个独立的线性层(矩阵乘法)传递;这样可以使模型能够“关注”嵌入的不同部分。下面的图片描述了这个过程:

缩放的点积自注意力:假设嵌入是位置编码的

从图片中可以看出,线性投影被标记为Q,K和V。在原始论文中,这些投影被称为查询(Query),键(Key)和值(Value),据称源自信息检索。个人而言,我从未觉得这种类比有助于我理解,所以我在这里遵循了文献中的术语,并明确指出这些线性层是独立的。

现在我们了解了这个过程的工作原理,我们可以将注意力计算视为一个具有三个输入的单个块,这些输入将传递给Q,K和V。

解码:用简单的英文解释变形金刚 四海 第13张

当我们将相同的嵌入矩阵传递给Q,K和V时,这被称为自注意力。

什么是多头注意力?

实际上,我们经常并行使用多个自注意力块,使得变压器能够同时关注输入序列的不同部分-这被称为多头注意力。

多头注意力的想法非常简单,多个独立的自注意力块的输出被串联在一起,然后通过一个线性层。此线性层使模型能够学习如何将每个注意力头的上下文信息相结合。

实际上,每个自注意力块中使用的隐藏维度大小通常被选择为原始嵌入尺寸除以注意力头的数量;以保持嵌入矩阵的形状。

解码:用简单的英文解释变形金刚 四海 第14张

变压器的其他组成部分有哪些?

尽管引入变压器的论文(现在臭名昭著)被命名为“关注就是一切”,但这有些令人困惑,因为变压器除了注意力之外还有更多组件!

一个变压器块还包含以下内容:

  • 前馈神经网络(FFN):应用于批次和序列中的每个令牌嵌入的双层神经网络。FFN块的作用是引入附加的可学习参数到变压器中,这些参数负责确保上下文嵌入是明确的并且分散。原始论文使用了GeLU激活函数,但是FFN的组成部分可以因体系结构而异。
  • 层归一化:有助于稳定深度神经网络的训练,包括变压器。它对每个序列的激活进行归一化,防止其在训练过程中变得过大或过小,这可能导致梯度相关的问题,如梯度消失或梯度爆炸。这种稳定性对于有效训练非常深的变压器模型至关重要。
  • 跳跃连接:与ResNet体系结构中一样,使用残差连接来减轻梯度消失问题并提高训练的稳定性。

尽管自从引入以来,Transformer架构一直相对稳定,但层归一化块的位置可能会根据Transformer架构的不同而有所变化。最初的架构,现在被称为后层归一化,如下所示:

解码:用简单的英文解释变形金刚 四海 第15张

最近架构中最常见的放置位置如下图所示,即前层归一化,在跳跃连接中将归一化块置于自注意力和FFN块之前。

解码:用简单的英文解释变形金刚 四海 第16张

不同类型的Transformer有哪些?

尽管现在有很多不同的Transformer架构,大多数可以归为三种主要类型。

编码器架构

编码器模型旨在生成用于下游任务(如分类或命名实体识别)的上下文嵌入,因为注意机制能够作用于整个输入序列;这是本文迄今为止探讨的架构类型。最受欢迎的仅编码器Transformer系列是BERT及其变体。

在通过一个或多个Transformer块传递数据后,我们得到一种复杂的上下文化嵌入矩阵,表示序列中每个标记的嵌入。然而,为了将其用于分类等下游任务,我们只需要进行一次预测。传统上,取第一个标记,并通过一个分类头部进行处理;通常包含Dropout和Linear层。这些层的输出可以通过SoftMax函数传递,将其转换为类别概率。下图展示了这个过程的示例。

解码:用简单的英文解释变形金刚 四海 第17张

解码器架构

与编码器架构几乎相同,关键区别在于解码器架构采用了掩码(或因果)自注意力层,因此注意机制仅能关注当前元素和前面元素的输入序列;这意味着生成的上下文嵌入仅考虑前面的上下文。流行的仅解码器模型包括GPT系列

解码:用简单的英文解释变形金刚 四海 第18张

这通常通过使用二进制下三角矩阵屏蔽注意力分数,并将未被屏蔽的元素替换为负无穷来实现;通过以下SoftMax操作传递时,这将确保这些位置的注意力分数等于零。我们可以更新之前的自注意力图,将其包含如下。

带位置编码嵌入的掩码自注意力计算

由于只能从当前位置和向前进行关注,解码器架构通常用于自回归任务,如序列生成。然而,与使用编码器生成序列时相比,使用上下文嵌入生成序列时还需要考虑一些其他因素。下图显示了其中一个例子。

解码:用简单的英文解释变形金刚 四海 第20张

我们可以注意到,尽管解码器为输入序列中的每个标记生成了上下文嵌入,但通常我们将与最后一个标记对应的嵌入作为生成序列时后续层的输入。

此外,在对逻辑值应用SoftMax函数后,如果不进行过滤,我们将获得模型词汇表中每个标记的概率分布;这可能非常庞大!通常,我们希望使用各种过滤策略减少潜在选项的数量,最常见的方法之一有:

  • 温度调整:温度是SoftMax操作中的一个参数,影响生成文本的随机性。它通过改变输出词汇的概率分布来决定模型输出的创造性或专注度。较高的温度会使分布变得更加平坦,产生更多样的输出。
  • Top-P采样:这种方法基于给定的概率阈值来过滤下一个标记的潜在候选数量,并根据超过该阈值的候选重新分配概率分布。
  • Top-K采样:这种方法根据它们的对数几率或概率分数(根据实现方式而定),将潜在候选数量限制为最有可能的K个标记。

关于这些方法的更多细节可以在此处找到。

一旦我们改变或减少了下一个标记的概率分布,我们可以从中进行采样以获得我们的预测结果,这相当于从一个多项分布中进行采样。然后,预测的标记附加到输入序列中,并重新输入模型,直到生成所需数量的标记,或者模型生成一个停止标记;即表示序列结束的特殊标记。

编码器-解码器架构

最初,Transformer被提出作为机器翻译的架构,并使用编码器和解码器实现这一目标;使用编码器创建中间表示,然后使用解码器将其转换为所需的输出格式。尽管编码器-解码器Transformer已经变得不太常见,但是T5等架构表明,诸如问答、摘要和分类等任务可以被构建为序列到序列问题,并使用这种方法解决。

编码器-解码器架构的关键区别在于解码器使用编码器-解码器注意力,它在注意力计算过程中使用编码器的输出(作为K和V),以及解码器块的输入(作为Q)。这与自注意力不同,自注意力对于所有输入使用相同的输入嵌入矩阵。除此之外,整个生成过程与仅使用解码器架构非常相似。

如下图所示,我们可以将编码器-解码器架构可视化。为了简化图示,我选择描绘原始论文中的后层标准变体的变压器架构;即层标准化层位于注意力块之后。

解码:用简单的英文解释变形金刚 四海 第21张

结论

希望这些信息能够让您对变压器的工作方式有所了解,有助于以一种较易理解的方式解释其中的一些细节,并成为理解现代变压器架构的良好起点!

Chris Hughes在LinkedIn上

除非另有说明,所有图片均由作者创建。

参考资料

Leave a Reply

Your email address will not be published. Required fields are marked *