赞
踩
本文用最浅显的语言描述了transformer的模型,可以用作学习transformer模型的启蒙篇。强烈推荐!
原地址如下:
https://txt.cohere.com/what-are-transformer-models/
Transformers是机器学习领域近期引起了很大轰动的一项新发展。它们在跟踪上下文方面表现非常出色,这也是它们所生成的文本有条理性的原因。在本篇博客文章中,我们将介绍它们的架构和工作原理。
Transformer模型是机器学习中最令人兴奋的新发展之一。它们在论文《Attention is All You Need》中首次提出。Transformer模型可用于撰写故事、文章、诗歌,回答问题,进行语言翻译,与人类对话,甚至能够通过对人类来说困难的考试!但它们究竟是什么呢?你会高兴地知道,Transformer模型的架构并不复杂,它只是一系列非常有用的组件的串联,每个组件都有自己的功能。在本篇文章中,您将了解所有这些组件。
这篇博客文章提供了简单的概念介绍。如果您想要更详细地了解Transformer模型及其工作原理,请参阅Jay Alammar撰写的这两篇出色文章。(所附链接已经改成中文版本)
The illustrated transformer
How GPT3 works
简而言之,Transformer的作用是什么?想象一下,你正在手机上写一条短信。每输入一个单词后,手机可能会给出三个单词的建议。例如,如果你输入“你好,你”,手机可能会建议下一个单词是“是”或者“的”。当然,如果你继续选择手机上的建议单词,很快你会发现由这些单词组成的消息毫无意义。如果你观察每组连续的3个或4个单词,它们可能是有意义的,但这些单词并没有连结起来形成有意义的句子。这是因为手机中使用的模型并没有将消息的整体上下文考虑在内,它只是预测在最后几个单词之后可能出现的单词。而Transformer则能够跟踪所写内容的上下文,这就是为什么它们所生成的文本有条理的原因。
手机可以建议在短信中使用的下一个单词,但它没有生成连贯文本的能力。
说实话,当我第一次了解到Transformer逐字逐词构建文本时,我简直难以置信。
首先,这不是人类构建句子和思维的方式。我们通常会形成一个基本的思想,然后逐渐细化并添加单词。
这种逐字逐词的方式也不是机器学习模型处理其他任务的方式。例如,图像生成并不是以这种方式进行的。大多数基于神经网络的图像模型通常会首先生成一个粗略的图像版本,然后逐步完善或添加细节,直到达到完美的效果。
那么为什么Transformer模型会以逐字逐词的方式构建文本呢?一个答案是,因为这种方式非常高效。更令人满意的解释是,Transformer在跟踪上下文方面表现出色,它选择的下一个单词恰好是为了延续一个思想的表达。
那么Transformer是如何进行训练的呢?它通过使用大量的数据,实际上就是整个互联网上的所有文本数据。因此,当你将句子“你好,你”的输入输入到Transformer中时,它可以利用互联网上的全部文本数据来推断出下一个最佳的单词是“你”。如果你给它一个更复杂的输入,比如“写一个故事。”,它可能会推断出一个很好的下一个单词是“从前”。然后,它将这个结果添加到输入中,接着进行推断, 得出下一个合适的单词是“有一次”,以此类推。它会逐字逐词地进行这个过程,直到完成整个故事的写作。
Command: Write a story. Response: Once Next command: Write a story. Once Response: upon Next command: Write a story. Once upon Response: a Next command: Write a story. Once upon a Response: time Next command: Write a story. Once upon a time Response: there etc.
现在我们已经了解了Transformer的功能,让我们来探索一下它们的架构。如果你看过Transformer模型的结构,你可能会像我第一次看到时一样感到惊叹,因为它看起来相当复杂!然而,如果你将其分解为几个最重要的部分,其实并不那么难理解。Transformer模型主要由以下四个组件构成:
分词(Tokenization)
嵌入(Embedding)
位置编码(Positional encoding)
Transformer块(包含多个)(Transformer block)
归一化(Softmax)
其中,Transformer块是最复杂的部分。我们可以将多个Transformer块连接在一起,而每个块都由两个主要组件组成:自注意力(self-attention)和前馈网络(feedforward network)。
The architecture of a transformer model
让我们逐个学习这些部分。
分词是语言处理的基本步骤之一。首先,我们需要一个庞大的标记(token)数据集,其中包含了所有单词、标点符号等的对应标记。在分词过程中,输入的每个单词、前缀、后缀和标点符号都会被提取,并发送到包含标记数据集的数据库中,以将输入转换为已知标记的序列。
分词:将单词转换为标记。
例如,如果句子是“Write a story”,那么对应的四个标记将是“Write“, “a“, “story“, 和“.“。
一旦输入经过分词处理,就需要将单词转换为数字表示。为此,我们使用嵌入(embedding)技术。嵌入是任何大型语言模型中最重要的组成部分之一,它充当了将文本转换为数字的桥梁。由于人类善于处理文本,而计算机善于处理数字,嵌入的强大程度决定了语言模型的能力。
简单来说,文本嵌入将每个文本片段转换为一个数字向量(列表)。如果两个文本片段相似,它们对应向量中的数字也会相似(逐个组件地比较,意味着相同位置上的数字相似)。相反,如果两个文本片段不同,它们对应向量中的数字也会不同。如果您想获取更多信息,请查看有关文本嵌入的这篇文章和相应的视频。
尽管嵌入是数字表示,但我喜欢以几何的方式来形象地描述它们。想象一下,有一个非常简单的嵌入,它将每个单词映射到一个长度为2的向量(即包含两个数字的列表)。如果我们使用这两个数字提供的坐标来定位每个单词(可以将一个数字想象为南北向的街,另一个数字想象为东西向的道),那么所有的单词就会分布在一个平面上。在这个平面上,相似的单词会彼此靠近,而不同的单词会相对远离。例如,在下面的嵌入中,樱桃的坐标是[6, 4],它与草莓的坐标[5, 4]相近,但与城堡的坐标[1, 2]相距较远。
嵌入(Embedding):将单词(token)转换为向量(数字列表)
在更大的嵌入空间中,每个单词都会被映射到一个更长的向量(例如长度为4096),这样单词就不再存在于二维平面上,而是存在于一个大的4096维空间中。然而,即使在这样的大空间中,我们仍然可以计算出单词之间的距离是远还是近,因此嵌入的概念仍然适用。
词嵌入可以扩展到文本嵌入,其中整个句子、段落,甚至更长的文本片段都会被映射到一个向量中。然而,在Transformer模型中,我们将使用词嵌入,这意味着句子中的每个单词都会被映射到相应的向量中。更具体地说,输入文本中的每个标记都会被映射到嵌入空间中的一个向量。
举个例子,如果我们考虑的句子是“Write a story.”,并且对应的标记是“Write“、“a“、“story“和“.“,那么每个标记都会被映射到一个长向量中,因此我们将得到四个向量。
一般而言,嵌入将每个单词(token)映射到一个长的数字列表。
一旦我们获得与句子中每个标记相对应的向量,下一步就是将它们合并为一个大的向量进行处理。最常见的方法是通过逐个组件相加来将一组向量转换为一个向量。这意味着我们将每个坐标位置上的值逐个相加。例如,对于长度为2的向量[1, 2]和[3, 4],它们的相加结果是[1+3, 2+4],即[4, 6]。这种方法可以工作,但存在一个小问题。加法是可交换的,这意味着如果以不同的顺序相加相同的数字,将得到相同的结果。在这种情况下,句子"I’m not sad, I’m happy"和句子"I’m not happy, I’m sad"将得到相同的向量,因为它们具有相同的单词,只是顺序不同。这是不理想的。
因此,我们需要想出一些方法,以确保这两个句子获得不同的向量。其中一种方法是使用位置编码(positional encoding)。位置编码涉及将一系列预定义的向量添加到单词的向量中。这确保我们为每个句子获得一个唯一的向量,并且以不同顺序出现相同单词的句子将被分配不同的向量。在下面的示例中,与单词"Write"、“a”、“story"和”.“相对应的向量被称为具有位置信息的调整向量,分别标记为"Write (1)”、“a (2)”、“story (3)“和”. (4)”。
位置编码会将一个位置向量添加到每个单词中,以便跟踪单词的位置。
现在我们了解到每个句子都有一个独特的向量,并且该向量包含了句子中所有单词及其顺序的信息,我们可以继续进行下一步了。
让我们回顾一下我们目前所掌握的内容。我们首先对单词进行了标记化(tokenization),然后把他们转换成数字向量(embedding),最后考虑了它们的顺序(positional encoding)。这样,我们就为输入模型的每个标记生成了相应的向量。
现在,下一步是预测句子中的下一个单词。为了实现这一点,我们使用一个巨大的已经训练好的神经网络来预测句子中的下一个单词。
通过引入关键的注意力机制,我们可以大大提升性能。注意力机制是Transformer模型的关键组成部分之一,也是其卓越表现的原因之一。在接下来的部分中,我们将详细解释注意力机制,但现在你可以将其想象为一种为文本中的每个单词添加上下文信息的方法。
注意力机制被添加到前馈神经网络的每个块中。因此,如果你将整个模型想象成由多个较小的神经网络块组成的大型前馈神经网络,每个块都包含一个注意力组件。Transformer模型中的每个组件都被称为Transformer块,由两个主要组件组成:
注意力组件(attention component)。
前馈神经网络组件(feedforward component)。
transformer是transformer块的串联。
Transformer是许多transformer块的串联。每个transformer块由一个注意力组件和一个后续的前馈组件(神经网络)组成。
注意力机制解决了一个非常关键的问题:上下文问题。正如你所了解的,有时候同一个词可能有不同的含义。这常常会让语言模型感到困惑,因为嵌入只是将单词转换为向量,而不知道它们所代表的确切含义。
注意力是一种非常有用的技术,可以帮助语言模型理解上下文。为了理解注意力的工作原理,请考虑以下两个句子:
句子1:The bank of the river.
句子2:Money in the bank.
如你所见,单词“bank”在这两个句子中都出现,但含义却不同。在句子一中,我们指的是河流旁边的陆地,而在第二个句子中,它指的是一个持有金钱的机构。计算机并不知道这些差异,因此我们需要以某种方式将这些知识传递给模型。那么,有什么可以帮助我们的呢?看起来,句子中的其他单词可能是我们的救星。对于第一个句子来说,“the”和“of”这两个词对于理解含义并没有太大帮助。但是,“river”这个词告诉了我们我们正在讨论河流边的陆地。同样,在第二个句子中,“money”这个词帮助我们理解“bank”现在是指持有金钱的机构。
注意力机制帮助每个单词根据句子(或文本)中的其他单词获得上下文。
总而言之,注意力机制通过在词嵌入空间中将句子(或文本)中的单词靠近彼此。因此,在句子“Money in the bank”中,单词“bank”将被移动到靠近“money”的位置。同样,在句子“The bank of the river”中,单词“bank”将被移动到靠近“river”的位置。通过这种方式,每个句子中被修改的单词“bank”将携带一些相邻单词的信息,从而增加了上下文的理解。
Transformer 模型中使用的注意力机制更加强大,被称为多头注意力(multi-head attention)。多头注意力利用多个不同的嵌入来修改向量并添加上下文信息。多头注意力使得语言模型在处理和生成文本时能够达到更高的性能水平。如果您希望更详细地了解注意力机制,请参阅文献博文及其对应的视频。
现在你已经了解到Transformer是由多个Transformer块组成的,每个块包含一个注意力组件和一个前馈神经网络组件。你可以将Transformer视为一个大型神经网络,用于预测句子中的下一个单词。Transformer会输出所有单词的得分,其中得分最高的单词被认为是最有可能成为句子中下一个单词的候选。
Transformer的最后一步是softmax层,它将这些得分转换为概率值(总和为1),其中得分最高的单词对应的概率最大。然后,我们可以从这些概率值中进行采样,以选择下一个单词。在下面的示例中,Transformer给予单词“Once”最高的概率0.5,并给予单词“Somewhere”和“There”分别为0.3和0.2的概率。经过采样后,选择了单词“once”,这就是Transformer的输出结果。
Softmax层将分数转化为概率,这些概率用于选择文本中的下一个单词。
在这篇博客文章中,我们已经学习了Transformer的工作原理。Transformer由多个模块组成,每个模块都有其独特的功能,并共同协作来理解文本并生成下一个单词。以下是这些模块的概述:
Tokenizer(分词器):将单词转化为标记(tokens)。
Embedding(嵌入层):将标记转化为数字(向量)。
Positional encoding(位置编码):为文本中的单词添加顺序信息。
Transformer block(变换器块):猜测下一个单词。由一个注意力块和一个前馈块组成。
Attention(注意力):为文本添加上下文。
Feedforward(前馈):是transformer神经网络中的一个模块,用于猜测下一个单词。
Softmax(归一层):将分数转化为概率,以便采样下一个单词。
通过反复执行这些步骤,Transformer能够生成令人惊叹的文本。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。