????????变形金刚是机器学习的一个新发展,最近引起了很大的轰动。他们非常善于跟踪上下文,这就是为什么他们写的文本有意义。在本章中,我们将介绍它们的体系结构以及它们的工作原理。
????????Transformer 模型是机器学习中最令人兴奋的新发展之一。它们在论文《注意力就是你所需要的一切》中进行了介绍。变形金刚可以用来写故事、散文、诗歌、回答问题、在语言之间翻译、与人类聊天,它们甚至可以通过人类很难的考试!但它们是什么?您会很高兴地知道,Transformer 模型的架构并不那么复杂,它只是一些非常有用的组件的串联,每个组件都有自己的功能。在本章中,您将学习所有这些组件。
????????简而言之,变压器是做什么的?想象一下,您正在手机上写一条短信。在每个单词之后,您可能会收到三个建议给您的单词。例如,如果您键入“您好,好吗”,手机可能会建议将“您”或“您的”等词作为下一个字词。当然,如果你继续在手机中选择建议的单词,你很快就会发现这些单词形成的信息没有意义。如果你看每组 3 或 4 个连续的单词,它可能是有道理的,但这些单词并不与任何有意义的东西联系起来。这是因为手机中使用的模型并不包含消息的整体上下文,它只是预测哪个词更有可能在最后几个词之后出现。另一方面,变形金刚会跟踪所写内容的上下文,这就是为什么他们编写的文本有意义的原因。
????????手机可以建议在短信中使用的下一个单词,但无法生成连贯的文本。
手机可以建议在短信中使用的下一个单词,但无法生成连贯的文本。
????????老实说,当我第一次发现变形金刚一次构建一个单词的文本时,我简直不敢相信。首先,这不是人类造句和思考的方式。我们首先形成一个基本的想法,然后开始提炼它并添加文字。这也不是 ML 模型做其他事情的方式。例如,映像不是以这种方式构建的。大多数基于神经网络的图形模型形成图像的粗略版本,然后慢慢细化或添加细节,直到完美为止。那么,为什么 transformer 模型要逐字构建文本呢?一个答案是,因为这真的很有效。更令人满意的是,由于变形金刚非常善于跟踪上下文,因此他们选择的下一个词正是它继续推进一个想法所需要的。
????????变压器是如何训练的?事实上,互联网上有大量数据,所有数据。因此,当你在变压器中输入“你好,好吗”这句话时,它就知道,根据互联网上的所有文字,最好的下一个词是“你”。如果你给它一个更复杂的命令,比如说,“写一个故事”,它可能会发现下一个要用的词是“一次”。然后它将这个单词添加到命令中,并找出一个好的下一个单词是“upon”,依此类推。一字一句地,它会一直持续下去,直到它写出一个故事。
命令:写一个故事。
响应:一次
下一个命令:写一个故事。一次
响应:在
下一个命令:写一个故事。Once Upon
回应:a
下一个命令:写一个故事。从前的回应
:时间
下一个命令:写一个故事。曾几何时
回应:有
????????现在我们知道了变压器的作用,让我们来看看它们的架构。如果你看过变压器模型的架构,你可能会像我第一次看到它时一样惊叹不已,它看起来很复杂!但是,当您将其分解为最重要的部分时,它并没有那么糟糕。变压器有4个主要部分:
????????第四个是变压器块,是最复杂的。其中许多可以连接起来,每个都包含两个主要部分:注意力和前馈分量。
转换器模型的架构
????????标牌化是最基本的步骤。它由一个大型标记数据集组成,包括所有单词、标点符号等。标记化步骤获取每个单词、前缀、后缀和标点符号,并将它们发送到库中的已知标记。
????????一旦输入被标记化,就该把单词变成数字了。为此,我们使用嵌入。在上一章中,您了解了文本嵌入如何将每段文本发送到数字向量(列表)。如果两段文本相似,则其对应向量中的数字彼此相似(分量,即同一位置的每对数字相似)。否则,如果两条文本不同,则其对应向量中的数字不同。
通常,嵌入将每个单词(标记)发送到一长串数字。
????????一旦我们有了与句子中每个标记对应的向量,下一步就是将所有这些转换为一个向量进行处理。将一堆向量转换为一个向量的最常见方法是按组件添加它们。这意味着,我们分别添加每个坐标。例如,如果向量(长度为 2)为 [1,2] 和 [3,4],则它们对应的总和为 [1+3, 2+4],等于 [4, 6]。这可行,但有一个小警告。加法是可交换的,这意味着如果以不同的顺序将相同的数字相加,则会得到相同的结果。在这种情况下,句子“我不难过,我很开心”和句子“我不开心,我很伤心”将产生相同的向量,因为它们具有相同的单词,只是顺序不同。这不好。因此,我们必须想出一些方法,为这两个句子提供不同的向量。有几种方法有效,我们将采用其中一种:位置编码。位置编码包括将一系列预定义的向量添加到单词的嵌入向量中。这确保了我们为每个句子获得一个唯一的向量,并且具有不同顺序的相同单词的句子将被分配不同的向量。在下面的示例中,与单词“Write”、“a”、“story”和“.”对应的向量成为带有有关其位置信息的修改向量,标记为“Write (1)”、“a (2)”、“story (3)”和“。(4)".
位置编码为每个单词添加一个位置向量,以便跟踪单词的位置。
????????让我们回顾一下到目前为止的情况。单词进入并转换为标记(标记化),标记化的单词被转换为数字(嵌入),然后考虑顺序(位置编码)。这为我们提供了输入到模型的每个令牌的向量。现在,下一步是预测这句话中的下一个单词。这是通过一个非常大的神经网络完成的,该神经网络精确地按照该目标进行训练,以预测句子中的下一个单词。
????????我们可以训练这样一个庞大的网络,但我们可以通过添加一个关键步骤来极大地改善它:注意力组件。在开创性的论文《注意力就是你所需要的一切》中介绍,它是变压器模型的关键成分之一,也是它们工作得如此之好的原因之一。注意在上一节中已经解释过,但现在,把它想象成一种为文本中的每个单词添加上下文的方法。
????????注意分量被添加到前馈网络的每个块上。因此,如果你想象一个大型前馈神经网络,其目标是预测下一个单词,由几个较小的神经网络块组成,那么每个块都会添加一个注意力分量。变压器的每个组件,称为变压器块,然后由两个主要组件组成:
变压器是许多变压器块的串联。其中每一个都由一个注意力组件和一个前馈组件(神经网络)组成。
????????下一步是注意力。正如你所了解的,注意力机制处理了一个非常重要的问题:上下文问题。有时,如您所知,同一个词可以具有不同的含义。这往往会混淆语言模型,因为嵌入只是将单词发送到向量,而不知道它们使用的单词定义。
????????注意力是一种非常有用的技术,可以帮助语言模型理解上下文。为了理解注意力是如何运作的,请考虑以下两句话:
????????正如你所看到的,“银行”这个词出现在两者中,但有不同的定义。在第 1 句中,我们指的是河边的土地,在第二句中,我们指的是持有金钱的机构。计算机对此一无所知,因此我们需要以某种方式将这些知识注入其中。什么可以帮助我们?好吧,似乎句子中的其他词可以拯救我们。对于第一句话,“the”和“of”这两个词对我们没有好处。但是“河流”这个词让我们知道我们谈论的是河边的土地。同样,在第 2 句中,“货币”一词有助于我们理解“银行”一词现在指的是持有货币的机构。
注意力有助于根据句子(或文本)中的其他单词为每个单词提供上下文。
????????简而言之,注意力的作用是将句子(或文本片段)中的单词移近单词嵌入。这样,“银行里的钱”这句话中的“银行”一词将更接近“钱”一词。同样,在“河岸”这句话中,“河岸”一词将移近“河”一词。这样,两个句子中每个句子中经过修改的单词“bank”将携带相邻单词的一些信息,从而为其添加上下文。
????????变压器模型中使用的注意力步骤实际上要强大得多,它被称为多头注意力。在多头注意力中,使用几种不同的嵌入来修改向量并为其添加上下文。多头注意力帮助语言模型在处理和生成文本时达到更高的效率水平。
????????现在您知道转换器是由许多层转换器块组成的,每层都包含一个注意力层和一个前馈层,您可以将其视为一个大型神经网络,用于预测句子中的下一个单词。转换器输出所有单词的分数,其中最高分数分配给句子中最有可能下一个单词的单词。
????????转换器的最后一步是 softmax 层,它将这些分数转换为概率(加到 1),其中最高分数对应于最高概率。然后,我们可以从这些概率中抽取下一个单词的样本。在下面的示例中,转换器为“Once”提供了 0.5 的最高概率,为“Somewhere”和“There”提供了 0.3 和 0.2 的概率。采样后,选择单词“once”,这就是转换器的输出。
softmax 层将分数转换为概率,这些分数用于选择文本中的下一个单词。
????????现在怎么办?好吧,我们重复这一步。我们现在输入文本“写一个故事。一旦“进入模型,最有可能的是,输出将是”upon”。一遍又一遍地重复这一步,变形金刚最终会写出一个故事,比如“从前,有一个......”。
????????既然您知道了变压器的工作原理,我们还有一些工作要做。想象一下:你问变压器“阿尔及利亚的首都是哪里?我们希望它回答“阿尔及尔”,然后继续前进。但是,变压器是在整个互联网上训练的。互联网是一个很大的地方,它不一定是最好的问答库。例如,许多页面都会有一长串没有答案的问题。在这种情况下,“阿尔及利亚的首都是什么?”之后的下一句话可能是另一个问题,例如“阿尔及利亚的人口是多少?”或“布基纳法索的首都是什么?”。转换器不是思考他们反应的人,它只是模仿它在互联网上看到的内容(或提供的任何数据集)。那么我们如何让变压器回答问题呢?
????????答案是培训后。就像你教一个人做某些任务一样,你可以得到一个转换器来执行任务。一旦一个转换器在整个互联网上被训练,那么它就会在一个大型数据集上再次被训练,该数据集对应于许多问题及其各自的答案。变形金刚(和人类一样)对他们所学到的最后一件事有偏见,因此后期培训已被证明是帮助变形金刚成功完成他们被要求完成的任务的非常有用的一步。
????????后期培训还有助于完成许多其他任务。例如,人们可以用大量的对话数据集对一个转换器进行后期训练,以帮助它作为一个聊天机器人表现良好,或者帮助我们写故事、诗歌甚至代码。