ChatGPT在做什么 第10章ChatGPT内部

ChatGPT在做什么 第10章ChatGPT内部

00:00
04:37
ChatGPT在做什么 第10章ChatGPT内部Inside ChatGPT

好的,我们终于准备好讨论ChatGPT内部的内容了。是的,最终,它是一个巨大的神经网络——目前是所谓的GPT-3网络的一个版本,拥有1750亿个权重。在很多方面,这个神经网络和我们讨论过的其他神经网络非常相似。但这是一个专门用来处理语言的神经网络。它最显著的特点是一个被称为“转换器”的神经网络架构。在我们上面讨论的第一个神经网络中,任何给定层上的每个神经元基本上都与前一层上的每个神经元相连(至少有一些权重)。但是,如果处理的数据具有特定的、已知的结构,那么这种完全连接的网络(大概)就太过了。因此,例如,在处理图像的早期阶段,通常使用所谓的卷积神经网络(“convnets”),其中神经元有效地布置在类似于图像中的像素的网格上,并且只与网格上附近的神经元连接。transformer的思想是为组成文本的符号序列做一些至少有点类似的事情。但是,变形金刚并没有仅仅在序列中定义一个固定的区域,在这个区域上可以有连接,而是引入了“注意力”的概念——“注意力”的概念更多地集中在序列的某些部分而不是其他部分。也许有一天,开始一个通用的神经网络并通过训练进行所有定制是有意义的。但至少到目前为止,在实践中“模块化”事物似乎是至关重要的——就像变形金刚所做的那样,也许就像我们的大脑所做的那样。好吧,那么ChatGPT(或者更确切地说,它所基于的GPT-3网络)实际上是做什么的呢?回想一下,它的总体目标是以一种“合理”的方式继续文本,基于它从训练中看到的内容(包括从网络上查看数十亿页的文本等)。因此,在任何给定的点上,它都有一定数量的文本,它的目标是为下一个要添加的标记提出一个适当的选择。它分为三个基本阶段。首先,它获取到目前为止与文本对应的符号序列,并找到表示这些符号的嵌入(即数字数组)。然后,它以“标准神经网络方式”对这个嵌入进行操作,使值在网络中的连续层中“波动”,以产生一个新的嵌入(即一个新的数字数组)。然后,它取这个数组的最后一部分,并从中生成一个约有50,000个值的数组,这些值转化为不同可能的下一个令牌的概率。(是的,英语中常用的标记的数量和常用单词的数量差不多,不过只有大约3000个标记是完整的单词,其余的都是片段。)关键的一点是,这个管道的每个部分都由神经网络实现,其权重由网络的端到端训练决定。换句话说,实际上,除了整体架构之外,没有什么是“明确设计的”;一切都是从训练数据中“学到”的。然而,在架构建立的方式上有很多细节——反映了各种各样的经验和神经网络知识。而且——尽管这肯定会陷入困境——我认为讨论一些细节是有用的,尤其是了解构建ChatGPT这样的东西需要做些什么。

首先是嵌入模块。下面是它在GPT-2中的Wolfram语言表示原理图:输入是n个标记的向量(如前一节中所示,用从1到约50,000的整数表示)。这些标记中的每一个都被(通过单层神经网络)转换为一个嵌入向量(GPT-2的长度为768,ChatGPT的GPT-3的长度为12288)。与此同时,还有一个“次要路径”,用于获取标记的(整数)位置序列,并从这些整数创建另一个嵌入向量。最后,将来自令牌值和令牌位置的嵌入向量相加-生成来自嵌入模块的嵌入向量的最终序列。为什么要把标记值和标记位置嵌入向量加在一起呢?我不认为这有什么特别的科学依据。只是人们已经尝试了各种不同的方法,而这一种似乎是有效的。这是神经网络知识的一部分,在某种意义上,只要一个人的设置是“大致正确的”,通常可以通过进行足够的训练来关注细节,而不需要真正“在工程水平上理解”神经网络是如何最终配置自己的。这是嵌入模块所做的,操作字符串hello hello hello hello hello hello hello hello hello hello hello bye bye bye bye bye bye bye bye bye:

每个标记的嵌入向量的元素在页面下方显示,在整个页面中,我们首先看到一系列“hello”嵌入,然后是一系列“bye”嵌入。上面的第二个数组是位置嵌入——它看起来有些随机的结构只是“碰巧学到的”(在GPT-2中)。好的,在嵌入模块之后是变压器的“主要事件”:一系列所谓的“注意块”(GPT-2为12块,ChatGPT的GPT-3为96块)。这一切都相当复杂——让人想起典型的难以理解的大型工程系统,或者就此而言,生物系统。但无论如何,这里有一个单个“注意力块”(对于GPT-2)的示意图:在每个这样的注意力块中有一个“注意力头”的集合(GPT-2有12个,ChatGPT的GPT-3有96个)-每个“注意力头”都独立地对嵌入向量中的不同值块进行操作。(是的,我们不知道为什么分割嵌入向量是个好主意,或者它的不同部分“意味着”什么;这只是那些“被发现有效”的事情之一。)那么注意力头是做什么的呢?基本上,它们是一种在标记序列中“回顾”的方式(即在迄今为止产生的文本中),并以一种对寻找下一个标记有用的形式“打包过去”。在上面的第一节中,我们讨论了使用2克概率来根据其直接前身选择单词。变形金刚中的“注意力”机制所做的是允许“注意力”到更早的单词,从而潜在地捕捉到,例如,动词可以指代在句子中出现在它们前面的许多单词的名词。在更详细的层面上,注意力头所做的是用特定的权重重新组合与不同标记相关的嵌入向量中的块。因此,例如,第一个注意块(在GPT-2中)中的12个注意头对上面的“hello, bye”字符串具有以下(“一直回溯到标记序列的开始”)“重组权重”模式:在经过注意头处理后,产生的“重新加权嵌入向量”(GPT-2的长度为768,ChatGPT的GPT-3的长度为12288)通过标准的“全连接”神经网络层。很难弄清楚这个层在做什么。但下面是它所使用的768×768权重矩阵的图(这里是GPT-2):取64×64移动平均线,一些(随机行走的)结构开始出现:是什么决定了这种结构?最终,它可能是对人类语言特征的某种“神经网络编码”。但到目前为止,这些特征可能是什么还不得而知。实际上,我们正在“打开ChatGPT的大脑”(或者至少是GPT-2),并发现,是的,它很复杂,我们不理解它——尽管最终它产生了可识别的人类语言。好的,在经过一个注意力块之后,我们就得到了一个新的嵌入向量——然后它会依次经过其他的注意力块(GPT-2总共12个;GPT-3为96)。每个注意力块都有自己特定的“注意力”和“完全连接”权重模式。这里是GPT-2的“hello, bye”输入的注意权重序列,用于第一个注意头:这里是全连接层的(移动平均)“矩阵”:奇怪的是,即使这些“权重矩阵”在不同的注意块中看起来非常相似,权重大小的分布可能有些不同(并不总是高斯分布):那么在经过所有这些注意块后,变压器的净效果是什么?本质上,它是将令牌序列的原始嵌入集合转换为最终集合。ChatGPT工作的特殊方式是提取这个集合中的最后一个嵌入,并对其进行“解码”,以生成下一个令牌应该出现的概率列表。

这就是ChatGPT的大纲。它可能看起来很复杂(不仅仅是因为它有许多不可避免的、有些武断的“工程选择”),但实际上所涉及的最终要素非常简单。因为最终我们要处理的只是一个由“人工神经元”组成的神经网络,每个神经元做的简单操作是获取一组数字输入,然后将它们与特定的权重组合起来。ChatGPT的原始输入是一个数字数组(到目前为止标记的嵌入向量),当ChatGPT“运行”以产生一个新的标记时,所发生的只是这些数字在神经网络的层中“涟漪”,每个神经元“做自己的事情”并将结果传递给下一层的神经元。没有循环或“返回”。一切都只是通过网络“向前传递”。这是一个与典型的计算系统(如图灵机)非常不同的设置,图灵机的结果由相同的计算元素反复“重新处理”。在这里,至少在生成给定的输出标记时,每个计算元素(即神经元)只使用一次。但在某种意义上,即使在ChatGPT中,仍然存在重用计算元素的“外循环”。因为当ChatGPT要生成一个新的令牌时,它总是“读取”(即将其作为输入)之前出现的整个令牌序列,包括ChatGPT自己之前“编写”的令牌。我们可以认为这种设置意味着ChatGPT确实——至少在它的最外层——涉及到一个“反馈循环”,尽管在这个循环中,每个迭代都显式地作为出现在它生成的文本中的标记可见。但让我们回到ChatGPT的核心:反复用于生成每个标记的神经网络。在某种程度上,它非常简单:一组完全相同的人造神经元。网络的某些部分只是由(“完全连接的”)神经元层组成,其中给定层上的每个神经元都与前一层上的每个神经元连接(具有一定权重)。但特别是它的转换器架构,ChatGPT有更多结构的部分,其中只有不同层上的特定神经元连接。(当然,人们仍然可以说“所有的神经元都是相连的”——但有些神经元的权重为零。)此外,ChatGPT中神经网络的某些方面不是最自然地被认为只是由“同质”层组成的。例如,正如上面的图标摘要所示,在一个注意力块中,有一些地方会对传入的数据进行“多份拷贝”,然后每一份都经过不同的“处理路径”,可能涉及不同数量的层,直到后来才重新组合。但是,虽然这可能是一种方便的表示方式,但至少在原则上,总是可以考虑“密集填充”层,但只是让一些权重为零。如果你看一下ChatGPT的最长路径,大约有400层(核心层)——在某些方面并不是一个庞大的数字。但是有数百万个神经元,总共有1750亿个连接,因此有1750亿个权重。需要意识到的一件事是,每次ChatGPT生成一个新令牌时,它都必须进行涉及每个权重的计算。在实现上,这些计算可以被组织成高度并行的数组运算,这样就可以方便地在gpu上完成。但是对于产生的每个令牌,仍然需要进行1750亿次计算(最后还要多一点)——所以,是的,用ChatGPT生成一长段文本需要一段时间也就不足为奇了。但最终,值得注意的是,所有这些操作——单个操作和它们一样简单——都能以某种方式共同完成如此“类似人类”的生成文本的工作。必须再次强调的是(至少就我们所知),没有“最终的理论理由”来解释为什么这样的事情会起作用。事实上,正如我们将要讨论的,我认为我们必须把这看作一个潜在的令人惊讶的科学发现:在某种程度上,在像ChatGPT这样的神经网络中,有可能捕捉到人类大脑在生成语言时所做的事情的本质。







以上内容来自专辑
用户评论

    还没有评论,快来发表第一个评论!