前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(三)

为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(三)

作者头像
技术人生黄勇
发布2024-07-19 12:47:20
590
发布2024-07-19 12:47:20
举报
文章被收录于专栏:技术人生黄勇

ChatGPT 的 Transformer 神经网络架构,以及海量的数据训练让它能够像人类一样进行写作。

经过前面两期漫长的介绍文章:

为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(一)

为什么对ChatGPT、ChatGLM这样的大语言模型说“你是某某领域专家”,它的回答会有效得多?(二)

这么硬核的技术科普内容,朋友们难得还能继续坚持阅读下来,那就来看看最后这部分介绍吧(“我”为原作者,“注”为我的理解。):

01—ChatGPT 内部

我们终于准备好讨论ChatGPT内部了。实际上,它是一个巨大的神经网络,目前采用的是称为GPT-3的网络版本,拥有1750亿个权重。在许多方面,这个神经网络与我们前面讨论的其他神经网络非常相似。但它是一个专门用于处理语言的神经网络。它最引人注目的特点是一种称为“Transformer”的神经网络架构。

(注:Transformer 的意思是变压器,在人工智能的资料中,这个词一般不翻译,仍然管它叫 Tranasformer,有时候也能被翻译成“转换器”。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

这个神经网络架构最早是谷歌提出来的:2‍‍017 年,谷歌大脑团队在其论文《Attention Is All You Need》中创造性地提出 Transformer 这一架构。这篇论文也提出了 Attention 注意力这个概念。‍‍‍‍‍

ChatGPT 火了之后,带动 Transformer 也被大众所熟知。

为什么是1750亿个权重?

据推测,这些参数可以分为以下几大类:

词嵌入(Word Embeddings):这些参数用于将单词或子词转化为向量表示,以便模型理解和处理文本输入。通常相对较小,数量可能在几百万到数千万之间。

注意力机制(Attention Mechanisms):这些参数使得模型能够关注输入中的不同部分,并根据上下文作出适当的预测或生成。相对较大,数量可能在数百万到数千万之间。

神经网络层参数(Neural Network Layer Parameters):这些参数包括多个神经网络层的权重和偏置,用于对输入进行多次非线性变换和特征提取。数量较多,可能在数亿到几十亿之间。

解码器参数(Decoder Parameters):这些参数用于生成回答或响应的过程,决定了输出的概率分布和语言表达的多样性。数量通常较少,可能在数百万到数千万之间。

前馈神经网络参数(Feedforward Neural Network Parameters):这些参数用于模型内部的前馈神经网络结构,用于进一步的特征提取和变换。数量可能在数百万到数千万之间。

这些参数的组合使得ChatGPT能够在各种语言任务中表现出色,并产生流畅、准确的回答和生成文本。)

在前面讨论的最初的神经网络中,每个神经元在任何给定层上基本上都与前一层的每个神经元连接(至少带有一定的权重)。但如果处理的数据具有特定的已知结构,这种全连接网络可能过于复杂。因此,例如,在处理图像的早期阶段,通常使用所谓的卷积神经网络("convnets"),其中神经元被有效地布置在类似于图像中的像素的网格上,并且仅与网格上附近的神经元相连。

Transformer的思想是对组成文本片段的标记序列进行类似的操作。但是,Transformer不仅仅是定义一个固定区域,使得可以在该区域内进行连接,它还引入了“注意力”(attention)的概念,即更多地“关注”序列的某些部分而不是其他部分。也许有一天通过训练直接启动通用神经网络并进行所有的自定义会变得合理。但至少到目前为止,在实践中,“模块化”是至关重要的,就像Transformer所做的,而且很可能也是我们的大脑所做的。

那么ChatGPT(或者更准确地说,基于的GPT-3网络)实际上是做什么的呢?回想一下,它的总体目标是基于它从训练中所见到的内容(包括查看了数十亿页来自互联网等的文本),以“合理”的方式继续文本。因此,在任何给定的时刻,它都有一定数量的文本,其目标是选择适当的下一个标记。

它的操作分为三个基本阶段。首先,它接收到与当前文本相对应的标记序列,并找到一个表示这些标记的嵌入(即一组数字)。然后,它在这个嵌入上进行操作,以“标准的神经网络方式”进行运算,通过网络中的连续层级进行数值传递,生成一个新的嵌入(即新的一组数字)。然后,它从这个数组的最后部分生成一个包含大约50,000个值的数组,这些值将转化为不同可能的下一个标记的概率。(是的,恰好有大约相同数量的标记被用作英语中常见的单词,尽管其中只有约3000个标记是完整的单词,其余的是片段。)

一个关键的点是,这个流程的每个部分都由一个神经网络实现,其权重是通过对整个网络进行端到端的训练来确定的。换句话说,实际上除了总体架构之外,没有什么是“明确设计”的;一切都只是从训练数据中“学习”得来的。

然而,在架构设置方面存在许多细节,这些细节反映了各种经验和神经网络的知识。尽管这些细节有点复杂,但我认为讨论其中一些细节是有益的,至少可以让我们了解构建像ChatGPT这样的系统需要考虑哪些方面。

首先是嵌入模块。下面是GPT-2中该模块的一个示意图,用Wolfram语言表示:

输入是一个包含 n 个标记的向量(如前文所述,这些标记表示为从 1 到大约 50,000 的整数)。每个标记都会被转换(通过一个单层神经网络)成一个嵌入向量(对于 GPT-2 是长度为 768 的向量,对于 ChatGPT 中的 GPT-3 是长度为 12,288 的向量)。同时,还有一个“次要路径”,它接收标记的整数位置序列,并根据这些整数创建另一个嵌入向量。最后,将标记值和标记位置的嵌入向量相加,得到嵌入模块的最终嵌入向量序列。

为什么要将标记值和标记位置的嵌入向量相加呢?我认为这并没有特定的科学原理。只是尝试了各种不同的方法,而这种相加的方式似乎是有效的。神经网络的一种普遍经验是:只要设置大致正确,通常可以通过足够的训练来调整细节,而无需真正“理解工程层面上”的神经网络如何配置自己。

下面是嵌入模块对字符串 "hello hello hello hello hello hello hello hello hello hello bye bye bye bye bye bye bye bye bye bye" 进行处理的结果:

每个标记的嵌入向量的元素显示在页面下方,而页面横向上首先是一系列“hello”嵌入向量,然后是一系列“bye”的嵌入向量。上方的第二个数组是位置嵌入,它的外观看起来有些随机,只是因为它“在训练中被学习到了”(在这个例子中是针对 GPT-2)。

好的,嵌入模块之后就是 transformer 的“主要部分”:一系列所谓的“attention blocks” (注意力块,GPT-2 有 12 个,ChatGPT 中的 GPT-3 有 96 个)。这些都相当复杂,让人想起一般难以理解的大型工程系统,或者可以说是生物系统。不管怎样,下面是对单个“attention blocks”(针对 GPT-2)的示意图:

在每个注意力块中,都有一组“attention heads”(注意力头,GPT-2为12个,ChatGPT的GPT-3为96个),每个头部独立地处理嵌入向量中的不同数值块。(是的,我们不知道为什么将嵌入向量分割成这样的好处,或者各个部分的具体含义是什么;这只是一个被发现可行的方法之一。)

那么,这些注意力头是做什么的呢?基本上,它们是一种“回顾”标记序列(即迄今为止生成的文本),并以对于找到下一个标记有用的形式“打包过去”的方式。在上面的第一部分中,我们讨论了使用二元概率根据其前一个标记选择单词的方法。而 transformers 中的“attention”机制则允许“注意到”更早的单词,从而潜在地捕捉到动词可以指代在句子中早在它们之前出现的名词的方式。

在更详细的层面上,每个注意力头的工作是通过一定的权重重新组合与不同标记相关的嵌入向量的块。因此,例如,GPT-2中第一个注意力块中的12个注意力头对于上面的“hello, bye”字符串具有以下“回顾至标记序列开头”的“重新组合权重”模式:

在经过注意力头处理后,得到的“重新加权嵌入向量”(GPT-2长度为768,ChatGPT的GPT-3长度为12,288)被传递到一个标准的“全连接”神经网络层。很难理解这一层在做什么。但是这里是它使用的768×768权重矩阵的绘图(这里是针对GPT-2):

取64×64的移动平均值后,一些(类似随机行走)的结构开始显现出来:

是什么决定了这种结构?最终,这可能是对人类语言特征的某种“神经网络编码”。但目前来看,这些特征是什么还不得而知。实际上,我们正在“打开ChatGPT的大脑”(至少是GPT-2),发现是的,里面很复杂,我们不理解它——尽管最终它能产生出可识别的人类语言。

好的,在经过一个注意力块后,我们得到一个新的嵌入向量,然后依次通过额外的注意力块(GPT-2共有12个;GPT-3有96个)。每个注意力块都有自己独特的“注意力”和“全连接”权重模式。这是GPT-2的第一个注意力头对于“hello, bye”输入的注意力权重序列:

这里是完全连接层的(移动平均后的)“矩阵”:

有趣的是,尽管不同注意力块中的这些“权重矩阵”看起来非常相似,但权重的大小分布可能略有不同(并且并非总是高斯分布):

因此,经过所有这些注意力块的处理,Transformer 的总体效果是什么呢?本质上,它将标记序列的原始嵌入集合转换为最终的集合。然后,ChatGPT的工作方式是选择这个集合中的最后一个嵌入,并对其进行“解码”,以生成下一个标记的概率列表。

这就是ChatGPT内部的概述。它可能看起来很复杂(尤其是由于其许多不可避免的、有点任意的“工程选择”),但实际上所涉及的最终元素非常简单。因为最终,我们处理的只是由“人工神经元”构成的神经网络,每个神经元执行将一组数字输入与一定权重相结合的简单操作。

ChatGPT的原始输入是一个数字数组(到目前为止的标记的嵌入向量),当ChatGPT“运行”以生成一个新的标记时,这些数字就会“传播”到神经网络的各个层中,每个神经元“发挥作用”并将结果传递给下一层的神经元。没有循环或“回溯”。一切都只是通过网络进行“前馈”。

这与典型的计算系统(如图灵机)非常不同,后者会将结果通过相同的计算元素重复“重新处理”。在这里,至少在生成给定输出标记时,每个计算元素(即神经元)仅使用一次。

但在某种程度上,在ChatGPT中仍然存在一个“外部循环”,即使是在计算元素中也会重复使用。因为当ChatGPT要生成一个新的标记时,它总是“读取”(即作为输入)前面出现的所有标记序列,包括ChatGPT自己先前“写入”的标记。我们可以将这个设置视为意味着ChatGPT至少在最外层上涉及一个“反馈循环”,尽管每次迭代都明确可见为,出现在它生成的文本中的一个标记。

让我们回到ChatGPT的核心:被重复使用来生成每个标记的神经网络。从某种程度上来说,它非常简单:一整个由相同的人工神经元组成的集合。网络的某些部分只包括神经元的(“全连接”)层,其中每个给定层上的神经元都与前一层的每个神经元连接(具有一定的权重)。但是,特别是在其 Transformer 架构中,ChatGPT具有更多结构的部分,其中只有不同层上的特定神经元相连。(当然,人们仍然可以说“所有神经元都相连”,但有些权重为零。)

此外,ChatGPT中的神经网络还具有一些不太容易被视为“同质”层的方面。例如,正如上面的标志性摘要所示,注意力块内部存在“对输入数据进行多次复制”的地方,然后每个副本通过不同的“处理路径”进行处理,可能涉及不同数量的层,直到稍后重新组合。虽然这可能是对正在发生的事情的一种方便的表示,但至少在原则上可以认为层是“密集填充”的,只是一些权重为零。

如果观察ChatGPT的最长路径,大约涉及到400个(核心)层——在某种程度上并不是很多。但是有数以百万计的神经元,总共有1750亿个连接,因此有1750亿个权重。需要意识到的一件事是,每当ChatGPT生成一个新的标记时,它都必须进行一次涉及到每一个权重的计算。从实现的角度来看,这些计算可以在高度并行的数组操作中“按层”进行组织,方便地在GPU上进行。但是对于每个生成的标记,仍然需要进行1750亿次计算(最后还要多一点),所以可以理解为什么使用ChatGPT生成一段长文本可能需要一些时间。

然而,最重要的是,所有这些操作——尽管它们各自都很简单——却可以一起以如此出色的方式完成生成文本的“类人”工作。必须再次强调的是(至少就我们目前所知),没有什么“终极理论原因”可以解释为什么这样的事情会起作用。事实上,正如我们将要讨论的那样,我认为我们必须将其视为一项(潜在令人惊讶的)科学发现:在像ChatGPT这样的神经网络中,以某种方式能够捕捉到人类大脑在生成语言方面所能做到的实质性内容。

02—ChatGPT的训练

前面的部分,我们已经概述了ChatGPT的工作原理。但是它是如何被设置的?它的神经网络中的那1750亿个权重是如何确定的呢?基本上,它们是通过大规模的训练得到的,这个训练是基于人类撰写的大量文本语料库,包括网络上的内容、书籍等。正如我们所说,即使有了所有这些训练数据,神经网络能够成功地产生“人类风格”的文本并不明显。而且,再次强调,要实现这一点似乎需要一些详细的工程技巧。但是ChatGPT的重大惊喜和发现是,这是可能的。实际上,一个仅有1750亿个权重的神经网络可以构建一个“合理的文本模型”,模拟人类撰写的文本。

在现代,有大量的人类书面文本以数字形式存在。公开网络至少有几十亿个由人类撰写的网页,总共可能有万亿字的文本。如果包括非公开网页,这个数字可能至少增加100倍。目前已经提供了500多万本数字化书籍(约占有史以来出版的1亿本书的一部分),提供了另外约1000亿字的文本。这还没有提到从视频等中提取的语音文本。(作为个人的比较,我一生中发表的材料总字数略少于300万字,过去30年来我写了约1500万字的电子邮件,总共打字的字数可能超过了5000万字——仅仅在过去几年里,我在直播中说了超过1000万个字。是的,我会将所有这些内容用于训练一个机器人。)

但是,好的,有了所有这些数据,如何训练一个神经网络呢?基本过程与我们在前面的简单示例中讨论的非常类似。您提供一批示例,然后调整网络中的权重,以最小化网络在这些示例上的误差(“损失”)。“反向传播”错误的主要开销在于每次这样做时,网络中的每个权重通常都会至少微小地发生变化,并且有许多权重需要处理。(实际的“反向计算”通常只比正向计算多一些小的常数因子。)

凭借现代GPU硬件,可以很容易地并行计算成千上万个示例的结果。但是当涉及实际更新神经网络中的权重时,当前的方法基本上要求逐批次进行。(是的,这可能是实际的大脑目前至少在架构上具有优势的地方,因为它们具有综合计算和存储元素。)

即使在我们之前讨论的看似简单的学习数值函数的情况下,我们发现通常需要使用数百万个示例才能成功地训练一个网络,至少是从头开始。那么,要训练一个“人类风格”的语言模型,我们需要多少示例呢?似乎没有任何基本的“理论”方法可以知道。但实际上,ChatGPT成功地在数千亿个单词的文本上进行了训练。

它多次输入了其中的一部分文本,而其中的另一部分文本只输入了一次。但不知何故,它从所见到的文本中“得到了它所需要的”。但是,考虑到这么多的文本用于训练,它需要多大的网络才能“学习得好”呢?同样,我们还没有一种基本的理论方法来确定。最终,正如我们将在下面进一步讨论的那样,人类语言及人类通常使用的语言中可能存在一定的“总算法内容”。但接下来的问题是,神经网络在基于该算法内容的模型实现方面的效率如何。我们还不知道答案,尽管ChatGPT的成功表明它是相当高效的。

最后我们可以注意到,ChatGPT使用了数千亿个权重来完成其工作,这个数量与其所接收的训练数据中的总单词(或标记)数量相当。在某种程度上,也许令人惊讶的是(尽管在较小规模的ChatGPT模型的实验证据中也观察到了这一点),“工作得很好的网络规模”与“训练数据规模”如此相似。毕竟,在“ChatGPT内部”,并不是以某种方式“直接存储”来自网络、书籍等的所有文本。实际上,在ChatGPT内部的是一堆数字,精度略低于10位数字,它们是对所有这些文本的集合结构的一种分布式编码。

换句话说,我们可以问人类语言的“有效信息内容”是什么,以及通常使用它说了些什么。首先是语言的原始语料库。然后是ChatGPT神经网络中的表示。这种表示很可能远非“算法上最简化”的表示(如下面将讨论的)。但这是一种神经网络可以轻松使用的表示。在这种表示中,似乎对训练数据的“压缩”相对较少;平均而言,基本上只需要略少于一个神经网络权重来承载一个词的训练数据的“信息内容”。

当我们运行ChatGPT来生成文本时,基本上需要使用每个权重一次。因此,如果有n个权重,我们大致需要n个计算步骤——尽管实际上许多计算可以在GPU上并行进行。但是如果我们需要大约n个词的训练数据来设置这些权重,那么根据我们上面所说的,我们可以得出结论:我们需要大约n²个计算步骤来训练神经网络,这就是为什么目前需要谈论亿美元级别的训练工作的原因。

03—除基本训练之外

训练ChatGPT的大部分工作都是通过向其展示大量的现有文本(来自互联网、书籍等)来完成的。但是实际上还有另一个显然非常重要的部分。

在完成从原始文本语料库的“原始训练”后,ChatGPT内部的神经网络已经准备好开始生成自己的文本,以继续前文、等等。虽然这些生成的结果通常看起来合理,但特别是对于较长的文本来说,它们往往会以一种相当不像人的方式“偏离主题”。这不是通过对文本进行传统统计分析可以轻易检测到的,但对于实际阅读文本的人来说,很容易注意到这一点。

ChatGPT构建中的一个关键思想是在“被动阅读”互联网等内容之后再进行另一步:让实际的人与ChatGPT进行互动,观察它的输出,并实际上为它提供“如何成为一个好的聊天机器人”的反馈。但是神经网络如何利用这个反馈呢?第一步只是让人们对神经网络生成的结果进行评分。然后建立另一个神经网络模型,试图预测这些评分。现在,可以在原始网络上运行这个预测模型,实际上就像一个损失函数,从而让该网络通过给出的人类反馈进行“调优”。实践中的结果似乎对系统产生“类似人类”的输出的成功有很大影响。

总的来说,有趣的是,看起来“最初训练”的网络需要的“干预”很少,就能使其在特定方向上有用地前进。人们可能认为,为了使网络表现得好像“学到了新东西”,需要进行训练算法、调整权重等操作。

但事实并非如此。相反,似乎只需在您提供的提示中告诉ChatGPT一次,然后它就可以成功地利用您告诉它的内容来生成文本。再次强调,这种方法的成功是我认为了解ChatGPT到底在“做什么”以及它与人类语言和思维结构的关系时的一个重要线索。

其中确实有一些相当类似人类的特点:至少在进行了所有的预训练后,您只需告诉它一次某件事,它就能“记住”它——至少“足够长的时间”以便在生成文本时使用。那么在这种情况下发生了什么呢?可能是“您可能告诉它的一切都已经在其中的某个地方”——您只是引导它到正确的位置。但这似乎不太可能。相反,更有可能的是,是的,元素已经在其中,但具体的内容是由诸如“这些元素之间的轨迹”之类的东西定义的,而当您告诉它某些内容时,您引入的正是这个轨迹。

实际上,就像对于人类来说一样,如果您告诉它一些奇怪和意外的内容,完全不符合它已知的框架,它似乎无法成功地“整合”这些内容。它只能在基本上以一种相当简单的方式嵌套在它已有的框架之上时“整合”它。

还值得再次指出,神经网络对于它能“吸收”的内容必然存在“算法限制”。告诉它类似“这个变成那个”的表面规则,神经网络很可能能够很好地表示和复制这些规则——而且实际上它从语言中“已知的”内容会给它一个立即可遵循的模式。但如果试图给它一个涉及许多潜在的计算上不可化简步骤的实际“深度”计算的规则,它就无法胜任。(请记住,每一步它始终只是在其网络中“向前传递数据”,除了生成新的标记之外从不循环。)

当然,神经网络可以学习特定“不可化简”计算的答案。但是,一旦涉及到组合数目的可能性,这种“查表式”的方法就不再适用。因此,是的,就像人类一样,神经网络需要“伸出手臂”并使用实际的计算工具。(Wolfram|Alpha和Wolfram语言是独特合适的,因为它们被构建用于“讨论世界上的事情”,就像语言模型神经网络一样。)

(注:

ChatGPT的训练涉及一种称为“无监督学习”的过程,其中模型接触大量的文本数据,并学习预测序列中的下一个词或标记。这个训练过程包括以下几个步骤:

1. 数据收集:从书籍、文章、网站和其他公开可用的文本来源收集多样化的文本数据。这些数据用于提供对语言模式和知识的广泛理解。

2. 分词:将文本数据划分为更小的单元,称为标记。标记可以是单词、子词或字符。分词有助于以模型可理解的格式表示文本数据。

3. 预处理:对标记化的文本数据进行预处理步骤,例如删除不必要的字符、将文本转换为小写,并处理数字和标点等特殊情况。

4. 模型架构:定义神经网络架构,例如Transformer模型,其中包括层数、注意力头数和隐藏单元数等特定配置。这个架构构成了ChatGPT的核心。

5. 训练目标:模型被训练以最小化损失函数,通常使用交叉熵损失,该损失函数衡量预测概率与实际目标标记之间的差异。

6. 训练过程:训练过程涉及将标记序列输入模型,并根据预测误差迭代地更新模型的权重。这个过程在强大的硬件上进行,例如GPU或TPU,以加速计算。

7. 反向传播:在训练过程中,模型使用反向传播计算梯度并调整神经网络层的权重。这个过程迭代地改进模型在给定一系列输入标记时的预测能力。

8. 优化:使用优化算法,例如随机梯度下降(SGD)或Adam,以高效有效的方式更新模型的参数。这些算法根据计算的梯度调整权重,以最小化损失函数。

9. 验证:定期将一部分训练数据作为验证集保留,以评估模型的性能并防止过拟合。验证集有助于监控模型的进展,并进行调整以提高其性能。

10. 超参数调优:对各种超参数,例如学习率、批次大小和正则化技术进行微调,以优化模型的性能和泛化能力。

11. 训练迭代:训练过程通常在多次迭代或轮次中进行,其中整个数据集被多次处理。每次迭代帮助模型从不同的例子中学习,并完善其对语言模式的理解。

12. 评估:训练后,使用单独的测试数据集评估模型的性能,以评估其在推理或对话交互中生成连贯和上下文适当的响应的能力。可以使用困惑度、BLEU分数或人工评估等评估指标来衡量模型的质量。)

04—是什么让ChatGPT能够运行‍‍‍‍‍‍‍‍

人类语言以及生成语言所涉及的思维过程一直以来都被认为是复杂性的巅峰。实际上,人类大脑仅由大约1000亿个神经元(可能存在约1万亿个连接)组成,却能胜任这个任务,这似乎相当不可思议。或许人脑除了神经元网络之外还有其他未被发现的物理层面。然而,如今我们拥有了ChatGPT这个重要的新信息:我们知道一个纯粹的人工神经网络,拥有与大脑中的神经元数量相近的连接数,能够出人意料地很好地生成人类语言。

当然,这仍然是一个庞大而复杂的系统,拥有大约与当前世界上可用的文本中的单词数量相当的神经网络权重。但从某种程度上来说,很难相信语言的丰富性以及其所能谈论的事物可以被封装在如此有限的系统中。部分原因无疑是因为广泛存在的现象(在Rule 30的例子中首次显现),即当系统的基本规则简单时,计算过程实际上可以大大增加系统的表观复杂性。但实际上,正如我们上面讨论的那样,ChatGPT中使用的神经网络类型通常被特别构建,以限制这种现象以及与之相关的计算不可约简性,以便使其训练更容易进行。

那么,像ChatGPT这样的系统是如何在语言方面取得如此大的进展的呢?基本答案是,语言在基本层面上比它看起来要简单。这意味着即使是具有基本的神经网络结构的ChatGPT也能够成功地“捕捉到”人类语言及其背后的思维的本质。而且,在其训练过程中,ChatGPT以某种方式“隐式地发现”了使这一切成为可能的语言(以及思维)的规律。

ChatGPT的成功给了我们一个根本而重要的科学依据:它表明我们可以期望发现一些重要的新的“语言规律”,以及实际上的“思维规律”。在作为神经网络的ChatGPT中,这些规律最多是隐含的。但如果我们能够以某种方式使这些规律变得明确,就有可能以更加直接、高效和透明的方式完成ChatGPT所做的工作。

但好吧,那么这些规律可能是什么样的呢?最终,它们必须给我们提供一种关于语言以及我们用语言表达的东西如何组合的规则。稍后我们将讨论“观察ChatGPT内部”可能能够为我们提供一些线索,以及从构建计算语言方面所知道的内容提供了一条前进的道路。但首先,让我们讨论两个早已知晓的例子,它们等同于“语言规律”,以及它们与ChatGPT的运行方式之间的关系。

第一个例子是语言的句法结构。语言不仅仅是一堆随机的词语组合。相反,有(相对)明确的语法规则,规定了不同类型的词语如何组合:例如,在英语中,名词可以由形容词修饰,并由动词跟随,但通常两个名词不能直接相连。这种语法结构可以(至少近似地)通过一组规则来捕捉,这些规则定义了类似于“解析树”的组合方式:

(注:以前的翻译和单词纠错工具都是这个思路,就是试图穷尽各种语言的规则,包括我们学语言也是首先学语法。)

ChatGPT并没有对这些规则有任何明确的“知识”。但在训练过程中,它以某种方式隐含地“发现”了这些规则,然后似乎擅长遵循它们。那么这是如何工作的呢?在“大局观”层面上还不清楚。但为了获得一些洞见,或许我们可以看一个更简单的例子。

考虑一个由(’s和)’s序列组成的“语言”,其语法规定括号必须始终保持平衡,可以通过解析树表示,如下所示:

我们能否训练一个神经网络来生成“符合语法”的括号序列呢?在神经网络中,处理序列的方法有很多种,但让我们使用 transformer 网络,就像ChatGPT所使用的方式。给定一个简单的 transformer网络,我们可以将符合语法的括号序列作为训练样本进行输入。一个微妙之处(实际上也出现在ChatGPT生成人类语言的过程中)是,除了“内容标记”(在这里是“(”和“)”)之外,我们还必须包含一个“结束”标记,用于指示输出不应继续进行(也就是对于ChatGPT来说,已经到达了“故事的结尾”)。

如果我们设置一个只有一个注意力块(attention block),带有8个头部和长度为128的特征向量的 transformer 网络(ChatGPT也使用长度为128的特征向量,但有96个注意力块,每个块都有96个头部),那么它似乎无法学习到关于括号语言的太多内容。但是使用2个注意力块,学习过程似乎会收敛——至少在提供了大约1000万个训练样本之后(正如 transformer 网络通常的情况,提供更多样本似乎只会降低其性能)。

因此,对于这个网络,我们可以做类似ChatGPT的操作,并询问下一个标记在括号序列中的概率是多少:

在第一种情况下,网络“非常确定”序列不能在这里结束,这是很好的,因为如果结束了,括号就会不平衡。然而,在第二种情况下,它“正确地识别出”序列可以在这里结束,尽管它也“指出”可以“重新开始”,放置一个“(”,后面可能会跟一个“)”。但是,糟糕的是,即使经过了大约40万个辛苦训练的权重,它表示下一个标记是“)”的概率为15%——这是不正确的,因为那必然会导致括号不平衡。

如果我们要求网络对越来越长的“(”序列进行最高概率的补全,我们会得到以下结果:

是的,在某个长度范围内,网络表现得很好。但是之后它开始失败。在神经网络(或机器学习)中,这是一种相当典型的情况。人类“一眼就能解决”的情况,神经网络也能解决。但是对于需要进行“更加算法化”处理的情况(例如,显式计算括号数量以查看它们是否关闭),神经网络似乎在计算上“太浅”而无法可靠地执行。 (顺便说一下,即使是完整的当前ChatGPT在长序列中也很难正确匹配括号。)

那么这对于像ChatGPT和英语这样的语法有什么意义呢?括号语言非常“简约”,更像是一个“算法式”的故事。但在英语中,通过局部词汇选择和其他线索,“猜测”什么在语法上适合是更加现实的。是的,神经网络在这方面做得更好,尽管也许会错过一些“形式上正确”的情况,而人类也可能会错过。但主要观点是,语言存在整体的句法结构,具有所有相关的规律性,从某种意义上限制了神经网络需要学习的“程度”。关键的“类似自然科学”的观察是,像ChatGPT中的 Transformer 神经网络这样的架构似乎能够成功地学习一种类似于嵌套树状句法结构,这种结构(至少在某种近似情况下)存在于所有人类语言中。

语法提供了语言的一种约束。但显然还有其他约束。像“研究性电子吃鱼的蓝色理论”这样的句子在语法上是正确的,但通常不会成为人们预期说的内容,如果ChatGPT生成了这样的句子,它也不会被认为是成功的,因为在通常情况下,带有其中单词正常含义的句子基本上是没有意义的。

(注:在 NLP 自然语言处理的发展过程中,曾经走的就是用计算机语言实现语法的思路,但是后来发现,不止是语法多且复杂,关键的是语法并不能包括所有的现实情况。比如:PEOPLE MOUNTAIN PEOPLE SEA - 人山人海,这类网络流行词,就没办法包括在语法的规则中,以及语言中的舶来词等等。)

但是否有一种通用的方法来判断一个句子是否有意义?传统上并没有一个总体的理论。但可以认为,在从网络等地方训练了数十亿个(可能有意义的)句子之后,ChatGPT已经隐含地“发展出了一个理论”。

这个理论会是什么样子呢?嗯,有一个小角落基本上已经被人们熟知了两千多年,那就是逻辑。当然,在亚里士多德发现的三段论形式中,逻辑基本上是一种表明遵循特定模式的句子是合理的,而其他句子则不合理。例如,说“所有X都是Y。这个不是Y,所以它不是X”是合理的(比如“所有鱼都是蓝色的。这个不是蓝色的,所以它不是鱼。”)。就像可以稍微幻想亚里士多德通过大量修辞例子以“机器学习方式”发现了三段论逻辑一样,我们也可以想象在ChatGPT的训练中,它通过查看网络上的大量文本等方式已经能够“发现三段论逻辑”(是的,虽然可以预期ChatGPT会生成包含基于三段论逻辑的“正确推理”的文本,但当涉及到更复杂的形式逻辑时情况就完全不同了,我认为可以预期它会因为和括号匹配失败的原因而在这里也失败)。

但除了逻辑的狭义例子之外,关于如何系统地构建(或识别)甚至是合理有意义的文本,还能说些什么呢?是的,有像Mad Libs这样使用非常具体的“短语模板”的东西。但不知何故,ChatGPT内在地具备了一种更通用的方法。也许除了“当你有1750亿个神经网络权重时,它就会以某种方式发生”之外,对于它如何实现这一点,我们无法提供更多的解释。但我强烈怀疑其中存在着一种更简单、更强大的机制。

05—意义空间和语义移动的法则

前面我们讨论了在ChatGPT内部,任何一段文本实际上都可以用一组数字表示,我们可以将其看作是某种“语言特征空间”中的点的坐标。因此,当ChatGPT生成一段文本时,对应于在语言特征空间中描绘出一条轨迹。但现在我们可以问,是什么使得这条轨迹对应于我们认为有意义的文本?而在保持“有意义性”的同时,也许存在某种“语义移动的法则”,来定义或者至少限制了语言特征空间中的点如何移动?

那么,这个语言特征空间是什么样子的呢?下面是一个示例,展示了如果将这样一个特征空间投影到2D平面上时,单个词(在这里是常见名词)的排列方式:

我们之前也看到了基于代表植物和动物的单词的另一个示例。但两种情况下的观点都是,“语义相似的单词”被放置在附近。

作为另一个例子,下面是代表不同词类的单词如何排列的示例:

当然,一个给定的单词通常并不只有一个意义(或者不一定只对应一个词类)。通过观察包含该单词的句子在特征空间中的分布,我们通常可以“区分出”不同的含义,就像这里的例子所示,对于单词“crane”(是鸟还是机器?):

好的,因此,我们可以合理地将这个特征空间看作将“在意义上相近的词”放在空间中靠近的位置。但是,我们能够在这个空间中识别出什么样的额外结构呢?例如,是否存在某种“平行输运”的概念,可以反映出空间的“平坦性”?了解这一点的一种方法是观察类比:

是的,即使当我们将其投影到二维空间时,通常至少会有一种“平坦性的暗示”,尽管并不普遍。

那么轨迹呢?我们可以观察ChatGPT在特征空间中遵循的提示轨迹,然后我们可以看到ChatGPT如何进行继续:

这里显然没有“明显的几何上”的移动规律。这并不令人惊讶;我们完全预料到这将是一个更加复杂的故事。例如,即使存在一个“语义移动规律”,最自然的表述方式是什么样的 Embedding(或者说实际上是什么“变量”),这一点远非显而易见。

在上面的图中,我们展示了“轨迹”的几个步骤,其中每一步我们选择ChatGPT认为最有可能的词(“零温度”情况)。但我们也可以问,在给定点上下一个可能出现的词是什么,以及其概率是多少:

在这种情况下,我们看到有一个高概率词的“扇形”,似乎在特征空间中朝着一个或多个明确的方向前进。如果我们继续前进会发生什么呢?下面是在“沿着”轨迹“移动”时出现的连续“扇形”:

这是一个三维表示,总共包括40个步骤:

这看起来有些混乱,并没有特别鼓励我们相信通过对“ChatGPT内部工作”的经验性研究,我们可以找到“类似于数学物理”的“语义移动规律”。但也许我们只是在看“错误的变量”(或错误的坐标系),如果我们只看正确的变量,我们就能立刻看出ChatGPT正在做一些“数学物理简单”的事情,比如沿着测地线移动。但是到目前为止,我们还没有准备好从其“内部行为”中“经验性解读”出ChatGPT对人类语言“如何组合”的“发现”。

06—那么... ChatGPT在做什么,为什么它有效呢?

ChatGPT的基本概念在某种程度上相当简单。首先,从网络、书籍等大量人类创作的文本样本开始。然后训练一个神经网络生成“类似于这些”文本。特别是,使它能够从一个“提示”开始,然后继续生成“类似于它训练过的文本”。

正如我们所见,ChatGPT中的实际神经网络由非常简单的元素组成,尽管有数十亿个元素。神经网络的基本操作也非常简单,基本上是对每个新生成的单词(或部分单词)将其迄今为止生成的文本“通过其元素”传递一次输入(不涉及任何循环等)。

但令人惊奇且出乎意料的是,这个过程能够生成成功地“类似于”网络上和书籍中的文本。它不仅是连贯的人类语言,而且“说出的内容”也“遵循其提示”,利用它“阅读到的内容”。它并不总是说出“在整体上有意义”的话(或对应于正确的计算),因为(例如,没有访问Wolfram|Alpha的“计算超能力”),它只是根据训练材料中的内容“听起来正确”的事物。

ChatGPT的具体工程使其变得非常引人注目。但归根结底(至少在它能够使用外部工具之前),ChatGPT只是从所积累的“传统智慧的统计数据”中提取出一些“连贯的文本线索”。但令人惊奇的是,结果通常非常类似于人类产生的文本。正如我所讨论的,这至少在科学上非常重要:人类语言(以及背后的思维模式)在结构上比我们想象的要简单和更具“法则性”。ChatGPT已经在隐式地发现了这一点。但我们有可能通过语义语法、计算语言等方法来明确地揭示它。

ChatGPT在生成文本方面的能力非常令人印象深刻,结果通常非常类似于人类的产出。那么这是否意味着ChatGPT像大脑一样工作呢?它的底层人工神经网络结构最终是基于对大脑的理想化建模而来的。而当我们人类生成语言时,很可能许多方面都与此相似。

当涉及训练(也称为学习)时,大脑和当前计算机的不同“硬件”(以及可能的一些未开发的算法思想)迫使ChatGPT使用的策略可能与大脑相当不同(在某些方面甚至更低效)。还有另外一点:与典型的算法计算甚至不同,ChatGPT在内部没有“循环”或“对数据重新计算”的机制。这必然限制了它的计算能力,即使与当前的计算机相比,更不用说与大脑相比了。

如何“修复这个问题”并同时保持系统的合理高效训练能力,目前还不太清楚。但假设未来的ChatGPT可以实现这一点,将能够完成更多“类似大脑的任务”。当然,大脑并不擅长许多事情,尤其是涉及到不可简化计算的任务。无论是大脑还是像ChatGPT这样的系统都需要寻找“外部工具”,比如Wolfram Language。

但就目前而言,看到ChatGPT已经能够做到的事情令人兴奋。从某种程度上说,它是基本科学事实的一个很好例证:大量简单的计算元素可以做出引人注目和意想不到的事情。但它也可能为我们在过去两千年中更好地理解人类语言,及其背后思维过程的基本特征和原则,提供了最好的推动力。

(注,有两段:讲 Wolfram 计算语言和感谢的段落,我删除了,有兴趣的朋友可以这个地址阅读原文,:‍‍‍

https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-doing-and-why-does-it-work/)

涉及到的概念回顾:

Transformer:变压器,转换器。谷歌人工智能团队提出来,创造性的神经网络架构。‍‍‍‍‍‍‍‍‍

Embedding:嵌入,向量。将高维数据映射到低维空间。通过一系列数字来尝试表示某个事物的“本质”,并且具有“相近事物”用相近的数字表示的属性。‍‍

词向量视为一种试图在某种“意义空间”中布置单词的方式,在该空间中,意义上相近的单词在嵌入中靠近。

Attention:注意力。Transformers 中的“Attention”机制则允许“注意到”更早的单词,从而潜在地捕捉到动词可以指代在句子中早在它们之前出现的名词的方式。传统的神经网络在多层计算中会丢失一些信息,注意力机制,会把前面的信息带入下一层,也就是一句话中,前后不挨着的词,但是有内在语义联系的词,会在计算的时候联系在一起。

向量数据库:是用来存储和查询向量数据的数据库,区别于传统的关系型数据(SQL)和文档型、非关系型数据库(No SQL),主要服务于人工智能和信息检索领域。一个向量数据,就是一个以原点为起点,n-维度空间任意一个点为终点的向量,我们通常记录其终点,用一个大小为n的数组来表达。

三期文章看下来,有错误的地方,或者我没说明白的地方,可以私信我交流。‍‍‍‍

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术人生黄勇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
关系型数据库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档