ChatGPT 的工作原理:内部
终于准备好讨论 ChatGPT 的底层内容了。是的,它最终是一个巨大的神经网络——目前是所谓的 GPT-3 网络的一个版本,拥有 1750 亿个权重。在很多方面,它与我们讨论过的另一个神经网络非常相似。然而,它是专门为解决语言问题而设计的神经网络。 它最显着的特点是被称为“变压器”的神经网络架构。
在上面讨论的第一个神经网络中,任何给定层中的每个神经元本质上都连接(至少具有一定的权重)到前一层中的每个神经元。然而,对于具有特定已知结构的数据来说,这样的完全连接的网络(可能)是多余的。因此,例如,在图像处理的早期阶段,通常使用所谓的卷积神经网络(“Convnet”),其中神经元有效地排列在类似于图像中像素的网格上 - 并且仅连接到网格上附近的神经元。
转换器的想法是做一些至少与组成一段文本的标记序列有些相似的事情。 然而,转换器不是仅仅在序列中定义可以连接的固定区域,而是引入了“注意力”的概念 - 以及对序列的某些部分比其他部分给予更多“注意力”的概念。也许有一天,运行通用神经网络并使用所有自定义项对其进行训练将变得有意义。但至少现在,在实践中,“模块化”事物似乎是关键,就像变压器所做的那样,也可能像我们的大脑所做的那样。
好的,那么 ChatGPT(或者更确切地说,它所基于的 GPT-3 网络)实际上是做什么的?回想一下,它的总体目标是根据它所经历的训练(包括从网络上查看数十亿页文本等)以“明智”的方式继续处理文本,因此在任何给定时间它都有一定的量文本的目的是建议进一步标记的合适选项。
它分三个基本阶段运行:
首先,它获取到目前为止与文本相对应的标记序列,并找到表示这些标记的嵌入(即数字数组)。其次,它以“标准神经网络方式”对此输入进行操作,其中值通过网络的后续层“传递”以创建新的输入(即新的数字数组)。然后,从该数组的最后部分,它生成一个包含大约 50,000 个值的数组,这些值成为各种可能的其他标记的概率。
(是的,所使用的标记数量恰好与英语中常见单词的数量相同,尽管只有大约 3000 个标记是完整的单词,其余都是片段。)关键点在于,这个过程的每一步pipeline部分由神经网络实现,其权重由端到端网络训练确定。 换句话说,除了整体架构之外,没有什么是真正“显式设计”的;一切都是从训练数据中“学习”的。
然而,架构的设置方式有许多细节反映了不同的神经网络经验和传统。虽然这肯定会陷入困境,但我认为讨论一些细节会很有帮助,尤其是了解构建像 ChatGPT 这样的东西需要什么。
第一个是内置模块。这是一个 Wolfram GPT-2 图:
输入是一个由 n 个标记组成的向量(用 1 到 50,000 的整数表示,如上一节所述)。这些标记中的每一个都会(通过单层神经网络)转换为插入向量(GPT-2 的长度为 768,GPT-3 ChatGPT 的长度为 12,288)。同时,还有一条“辅助路径”,它采用一系列(整数)标记位置并根据这些整数创建另一个插入向量。最后,将来自令牌值和令牌位置的嵌入向量相加,以形成嵌入模块的最终嵌入向量序列。
为什么只统计token值插入向量和token位置呢?我认为这没有任何具体的科学依据。刚刚尝试了不同的方法,这个似乎有效。 这也是神经网络传统的一部分,因为只要您的设置“大致正确”,您通常可以通过充分的训练来计算出细节,而无需真正“在工程级别上进行”理解”,就像神经网络一样网络最终将配置。
这就是嵌入模块对字符串“hello hello hello hello hello bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye 2”所做的事情:
插入每个标记的向量元素出现在页面下方,整个页面上我们首先看到的是“hello”的插入,然后是“bye”的插入。上面的第二个字段是位置嵌入 - 它看起来有点随机的结构只是“偶然学习的”(在本例中为 GPT-2)。
好吧,内置模块之后是转换器的“主要事件”:一系列所谓的“注意力块”(GPT-2 为 12 个,GPT-3 ChatGPT 为 96 个)。这一切都很复杂——让人想起通常难以理解的大型工程系统或生物系统。但无论如何,这里是一个“注意力块”的示意图(对于 GPT-2):
在每个这样的注意力块中都有一系列“注意力头”(GPT-2 有 12 个,GPT- 来自 ChatGPT- 3 有 96) - 每个都独立地作用于插入向量的另一个值块。 (是的,我们不知道为什么分割输入向量是一个好主意,或者它的各个部分“意味着什么”;这只是“被发现有效”的事情之一)。
好吧,那么注意力头是做什么的呢?基本上,它是一种在标记序列中(即在迄今为止生成的文本中)“回顾”并以有助于找到下一个标记的形式“包装”过去的方式。
在上面的第一部分中,我们讨论了使用 2 克概率根据单词的直接前因来选择单词。转换器中的“注意”机制允许“注意”甚至更早的单词 - 因此可以捕获动词引用句子中位于其前面的名词的方式。
在更详细的层面上,注意力头所做的是将与具有特定权重的不同标记相关联的嵌入向量的位重新组合。例如,第一个注意力块(在 GPT-2 中)中的 12 个注意力头具有上述 (“look-back-all-the-way-”beginning-the-sequence -of-tokens”) 模式,用于字符串“你好,再见”“重组权重”:
处理注意力头后,生成的“加权插入向量”(GPT-2长度为768,ChatGPT GPT-3长度为12288)传递给标准“全连接”神经网络层。很难理解这一层的作用。但是,这是它使用的 768×768 权重矩阵的图(这里是 GPT-2):
使用 64×64 移动平均值,一些(随机游走)结构开始出现:
是什么决定了它的这种结构?最终,它可能是人类语言字符的某种“神经网络编码”。但到目前为止,还不清楚这些功能是什么。我们实际上“打开了ChatGPT(或至少是GPT-2)的大脑”,发现它有很多复杂性,而我们不理解它——尽管它最终产生了可识别的人类语言。
通过注意力块后,我们得到一个新的插入向量 - 然后它不断地传递给其他注意力块(GPT-2总共有12个;GPT-3有96个)。每个注意力块都有自己特定的“注意力”和“完全连接”权重模型。这是第一个注意力头的 GPT-2“你好,再见”输入注意力权重的序列:
这是全连接层的(移动平均)“矩阵”:
奇怪的是,尽管这些“权重“矩阵”在不同的注意力块中看起来相似,权重大小的分布可能有点不同(并不总是高斯分布):
因此,在传递所有注意力之后,传感器在力块之后的净效应是什么? 本质上是转换原始符号序列集以插入到最终集合中。 ChatGPT 的具体工作方式是提取该集合中的最后一个插入并“解码”它以创建下一个标记应该是什么的概率列表。
这是ChatGPT的总结。它可能看起来很复杂(特别是因为它有很多必要的、有些随意的“工程选项”),但实际上最终的元素非常简单。因为最终我们要处理的只是一个由“人工神经元”组成的神经网络,每个神经元都执行简单的操作,即获取一组数字输入并将它们与某些权重组合起来。
ChatGPT 的原始输入是一个数字数组(到目前为止是一个符号输入向量),当 ChatGPT “运行”以创建一个新符号时,所发生的只是这些数字“传递”通过各层在神经网络中,每个神经元都“做自己的事情”,并将结果传递给下一层的神经元。没有循环或“回头路”。一切都只是通过网络“前馈”。
这是与典型计算系统(例如图灵机)非常不同的设置,其中结果由相同的计算元件一遍又一遍地“重新加工”。这里,每个计算元素(即神经元)仅使用一次,至少在生成特定输出符号时是如此。
但从某种意义上说,即使在 ChatGPT 中,仍然存在重用计算元素的“外循环”。因为当 ChatGPT 想要生成新标签时,它总是“读取”(即作为输入)之前的整个标签序列,包括 ChatGPT 本身之前“写入”的标签。我们可以认为此设置意味着 ChatGPT(至少在其最远程级别)涉及“反馈循环”,尽管在此循环中,每次迭代都明确显示为它生成的文本中的一次出现。品牌。
但是让我们回到 ChatGPT 的核心:重复使用来生成每个令牌的神经网络。 在某种程度上,它非常简单:完全相同的人工神经元的整个集合。网络的某些部分只是由(“完全连接”)神经元层组成,其中某一层中的每个神经元都(以一定的权重)连接到前一层中的每个神经元。然而,特别是其变压器结构,ChatGPT 具有多个结构部分,其中仅连接不同层的特定神经元。 (当然,我们仍然可以说:“所有神经元都是相连的”——但有些神经元的权重为零)。
此外,ChatGPT 中神经网络的某些方面并不是最自然地被认为是由“同质”层组成的。 例如,如上面的图标摘要所示,注意块内的某些位置会制作传入数据的“多个副本”,然后每个副本都会经过不同的“处理路径”,可能是不同的数量,然后再进行处理。正在重新组装。但是,虽然这可能是了解正在发生的情况的一种便捷方式,但至少在原则上,始终可以考虑“密集填充”各层,但将某些权重保留为零。
如果我们看一下 ChatGPT 的最长路径,就会发现大约涉及 400 个(核心)层 - 从某些方面来说并不多。但神经元有数百万个——总共 1750 亿个连接,因此权重也有 1750 亿个。 需要注意的一件事是,每次 ChatGPT 生成新令牌时,它都会执行涉及每个权重的计算。
从实现的角度来看,这些计算可以“按层”组织成高度并行的数组操作,可以轻松地在 GPU 上完成。但对于每个生成的代币来说,这仍然需要 1750 亿次计算(最终还会更多)——所以,是的,使用 ChatGPT 生成长文本需要一段时间也就不足为奇了。
然而,最终,最引人注目的是所有这些操作(单独而言都很简单)可以以某种方式协同工作,以完成创建“人类”文本的出色工作。 需要再次强调的是,不存在“终极理论原因”(至少据我们所知)来解释此类工作。事实上,正如我们将要讨论的,我认为我们必须将其视为一个潜在的令人惊讶的科学发现:在像 ChatGPT 这样的神经网络中,有可能捕获人类大脑在产生语言时的本质。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。