这就是ChatGPT

这就是ChatGPT

斯蒂芬·沃尔弗拉姆
ChatGPT是OpenAI开发的人工智能聊天机器人程序,于2022年11月推出。它能够自动生成一些表面上看起来像人类写的文字,这是一件很厉害且出乎大家意料的事。那么,它是如何做到的呢?又为何能做到呢?本书会大致介绍ChatGPT的内部机制,然后探讨一下为什么它能很好地生成我们认为有意义的文本。
首先需要解释,ChatGPT从根本上始终要做的是,针对它得到的任何文本产生“合理的延续”。这里所说的“合理”是指,“人们在看到诸如数十亿个网页上的内容后,可能期待别人会这样写”。
GPT技术路线的一大核心理念,是用最简单的自回归生成架构来解决无监督学习问题,也就是利用无须人特意标注的原始数据,学习其中对世界的映射。自回归生成架构,就是书中讲得非常通俗的“只是一次添加一个词”。这里特别要注意的是,选择这种架构并不是为了做生成任务,而是为了理解或者学习,是为了实现模型的通用能力。
换句话说,有时候用神经网络解决复杂问题比解决简单问题更容易—这似乎有些违反直觉。大致原因在于,当有很多“权重变量”时,高维空间中有“很多不同的方向”可以引导我们到达最小值;而当变量较少时,很容易陷入局部最小值的“山湖”,无法找到“出去的方向”。
沃尔弗拉姆给出了如下建议。●最高效的方式是发掘新的可能性,定义对自己有价值的东西。●从现在的回答问题转向学会如何提出问题,以及如何确定哪些问题值得提出。也就是从知识执行转向知识战略。●知识广度和思维清晰度将很重要。●直接学习所有详细的知识已经变得不必要了:我们可以在更高的层次上学习和工作,抽象掉许多具体的细节。“整合”,而不是专业化。尽可能广泛、深入地思考,尽可能多地调用知识和范式。●学会使用工具来做事。过去我们更倚重逻辑和数学,以后要特别注意利用计算范式,并运用与计算直接相关的思维方式。
必须理解,从来没有“无模型的模型”。你使用的任何模型都有某种特定的基本结构,以及用于拟合数据的一定数量的“旋钮”(也就是可以设置的参数)。ChatGPT使用了许多这样的“旋钮”—实际上有1750亿个。
最佳思路是建立一个模型,让我们能够估计序列出现的概率—即使我们从未在已有的文本语料库中明确看到过这些序列。ChatGPT的核心正是所谓的“大语言模型”,后者已经被构建得能够很好地估计这些概率了。
《一种新科学》(A New Kind of Science)。书中的主要观点是:万事皆计算,宇宙中的各种复杂现象,不论是人产生的还是自然中自发的,都可以用一些规则简单地计算和模拟
这就是“嵌入”(embedding)的思想。可以将嵌入视为一种尝试通过数的数组来表示某些东西“本质”的方法,其特性是“相近的事物”由相近的数表示。
说到底,可学习性和计算不可约性之间存在根本的矛盾。学习实际上涉及通过利用规律来压缩数据,但计算不可约性意味着最终对可能存在的规律有一个限制。
有时候用神经网络解决复杂问题比解决简单问题更容易——这似乎有些违反直觉。大致原因在于,当有很多“权重变量”时,高维空间中有“很多不同的方向”可以引导我们到达最小值;而当变量较少时,很容易陷入局部最小值的“山湖”,无法找到“出去的方向”。
神经网络的基本思想是利用大量简单(本质上相同)的组件来创建一个灵活的“计算结构”,并使其能够逐步通过学习样例得到改进。在当前的神经网络中,基本上是利用微积分的思想(应用于实数)来进行这种逐步的改进。但越来越清楚的是,重点并不是拥有高精度数值,即使使用当前的方法,8位或更少的数也可能已经足够了。
但是后来发现,(至少对于“类人任务”)最好的方法通常是尝试训练神经网络来“解决端到端的问题”,让它自己“发现”必要的中间特征、编码等。
应该如何调整权重呢?基本思想是,在每个阶段看一下我们离想要的函数“有多远”,然后朝更接近该函数的方向更新权重。
我强烈怀疑ChatGPT的成功暗示了一个重要的“科学”事实:有意义的人类语言实际上比我们所知道的更加结构化、更加简单,最终可能以相当简单的规则来描述如何组织这样的语言。
人类大脑有大约1000亿个神经元(神经细胞),每个神经元都能够产生电脉冲,最高可达每秒约1000次。这些神经元连接成复杂的网络,每个神经元都有树枝状的分支,从而能够向其他数千个神经元传递电信号。粗略地说,任意一个神经元在某个时刻是否产生电脉冲,取决于它从其他神经元接收到的电脉冲,而且神经元不同的连接方式会有不同的“权重”贡献。
ChatGPT的基本概念在某种程度上相当简单:首先从互联网、书籍等获取人类创造的海量文本样本,然后训练一个神经网络来生成“与之类似”的文本。特别是,它能够从“提示”开始,继续生成“与其训练数据相似的文本”。
正如上面所说的,这并不是我们可以“根据第一性原则推导”出来的事实。这只是一些经验性的发现,至少在某些领域是正确的。但这是神经网络有用的一个关键原因:它们以某种方式捕捉了“类似人类”的做事方式。
GPT底层的自回归架构,与很多机器学习模型不同,的确可以归类为“规则简单的计算”,而且其能力也是通过量变的累积涌现出来的。
严格来说,ChatGPT并不处理词,而是处理“标记”(token)—这是一种方便的语言单位,既可以是整个词,也可以只是像pre、ing或ized这样的片段。使用标记使ChatGPT更容易处理罕见词、复合词和非英语词,并且会发明新单词(不论结果好坏)。
他在论文中研究了大模型的涌现能力,这类能力在小模型中不存在,只有模型规模扩大到一定量级才会出现——也就是我们熟悉的“量变会导致质变”。
从根本上说,ChatGPT是一个庞大的神经网络— GPT-3拥有1750亿个权重。它在许多方面非常像我们讨论过的其他神经网络,只不过是一个特别为处理语言而设置的神经网络。它最显著的特点是一个称为Transformer的神经网络架构。
ChatGPT是如何在语言方面获得如此巨大成功的呢?我认为基本答案是,语言在根本上比它看起来更简单。这意味着,即使是具有简单的神经网络结构的ChatGPT,也能够成功地捕捉人类语言的“本质”和背后的思维方式。此外,在训练过程中,ChatGPT已经通过某种方式“隐含地发现”了使这一切成为可能的语言(和思维)规律。
我认为必须将其视为一项(可能非常惊人的)科学发现:在像ChatGPT这样的神经网络中,能以某种方式捕捉到人类大脑在生成语言时所做事情的本质。
神经网络的学问告诉我们,(在某种意义上)只要我们的设置“大致正确”,通常就可以通过足够的训练来确定细节,而不需要真正“在工程层面上理解”神经网络是如何配置自己的。
但是有了ChatGPT之后,我们得到了一条重要的新信息:一个连接数与大脑神经元数量相当的纯粹的人工神经网络,就能够出色地生成人类语言。
建立一个模型,用它提供某种计算答案的程序,而不仅仅是在每种情况下测量和记录
ChatGPT的基础是人工神经网络(本书中一般简称为神经网络或网络),后者最初是在20世纪40年代为了模拟理想化的大脑运作方式而发明的。
神经网络的实际学习过程是怎样的呢?归根结底,核心在于确定哪些权重能够最好地捕捉给定的训练样例。
“所有行业、应用、软件、服务,都值得基于大模型能力重做一遍。
这前后,OpenAI还做了规模对语言模型能力影响的研究,提出了“规模法则”(scaling law),确定了整个组织的主要方向:大模型。为此,OpenAI将强化学习、机器人等其他方向都砍掉了。难能可贵的是,大部分核心研发人员选择了留下。他们改变自己的研究方向,放弃小我,集中力量做大事——很多人转而做工程和数据等方面的工作,或者围绕大模型重新定位自己的研究方向(比如强化学习就在GPT 3.5以及之后的演进中发挥了重大作用)。这种组织上的灵活性,也是OpenAI能成功的重要因素。
构建ChatGPT的一个关键思想是,在“被动阅读”来自互联网等的内容之后添加一步:让人类积极地与ChatGPT互动,看看它产生了什么,并且在“如何成为一个好的聊天机器人”方面给予实际反馈。但是神经网络是如何利用这些反馈的呢?首先,仅仅让人类对神经网络的结果评分。然后,建立另一个神经网络模型来预测这些评分。现在,这个预测模型可以在原始网络上运行—本质上像损失函数一样—从而使用人类的反馈对原始网络进行“调优”。实践中的结果似乎对系统能否成功产生“类人”输出有很大的影响。
ChatGPT内部并没有直接存储来自互联网、书籍等的所有文本。因为ChatGPT内部实际上是一堆数(精度不到10位),它们是所有文本的总体结构的某种分布式编码。
但是这样的神经网络是如何“识别事物”的呢?关键在于吸引子(attractor)的概念。
“你不会理解普通人的想法的,他们对你来说只是傻瓜。”
在经过所有这些注意力块后,Transformer的实际效果是什么?本质上,它将标记序列的原始嵌入集合转换为最终集合。ChatGPT的特定工作方式是,选择此集合中的最后一个嵌入,并对其进行“解码”,以生成应该出现的下一个标记的概率列表。
但至少到目前为止,我们没办法对网络正在做什么“给出语言描述”。也许这是因为它确实是计算不可约的,除了明确跟踪每一步之外,没有可以找出它做了什么的一般方法。也有可能只是因为我们还没有“弄懂科学”,也没有发现能总结正在发生的事情的“自然法则”。
人类语言是不精确的,这主要是因为它没有与特定的计算实现相“结合”,其意义基本上只由其使用者之间的“社会契约”定义。但是,计算语言在本质上具有一定的精确性,因为它指定的内容最终总是可以“在计算机上毫无歧义地执行”。
在ChatGPT内部,任何文本都可以被有效地表示为一个由数组成的数组,可以将其视为某种“语言特征空间”中一个点的坐标。因此,ChatGPT续写一段文本,就相当于在语言特征空间中追踪一条轨迹。
在许多方面,可以说ChatGPT从未“真正理解”过事物,它只“知道如何产生有用的东西”。但是Wolfram|Alpha则完全不同。因为一旦Wolfram|Alpha将某些东西转换为Wolfram语言,我们就拥有了它们完整、精确、形式化的表示,可以用来可靠地计算事物。
能“用数学证明”这些函数有效吗?不能。因为要做到这一点,我们必须拥有一个关于人类所做的事情的数学理论。
重点在于,已训练的神经网络能够对所展示的特定例子进行“泛化”
如果中间有一个“挤压”(squeeze),迫使一切都通过中间较少的神经元,那么通常可以使用较小的网络。
就像处理字母一样,我们可以不仅考虑单个词的概率,而且考虑词对或更长的 n 元词的概率。
但我们从科学在过去几百年间的发展中得出的教训是,有些事物虽然可以通过形式化的过程来弄清楚,但并不容易立即为人类思维所理解。
但是,如何确定特定的任务需要多大的神经网络呢?这有点像一门艺术。在某种程度上,关键是要知道“任务有多难”。但是类人任务的难度通常很难估计。
归根结底,神经网络是由理想化的“神经元”组成的连接集合—通常是按层排列的。
ChatGPT总是根据概率选择下一个词,但是这些概率是从何而来的呢?
ChatGPT在“类人的部分”表现出色,因为其中没有精确的“正确答案”。但当它被“赶鸭子上架”、需要提供精确的内容时,往往会失败。
对于ChatGPT,我们需要为人脑产生的人类语言文本建立模型
注意力头是做什么的呢?它们基本上是一种在标记序列(即目前已经生成的文本)中进行“回顾”的方式,能以一种有用的形式“打包过去的内容”,以便找到下一个标记
人们可能会认为,如果能够“训练一个足够大的网络”,就能够用它来做任何事情。但事实并非如此。关于计算的基本事实,尤其是计算不可约的概念,表明它最终是无法做到的。
有了足够多的英文文本,我们不仅可以对单个字母或字母对(二元字母)得到相当好的估计,而且可以对更长的字母串得到不错的估计。如果使用逐渐变长的 n 元(n-gram)字母的概率生成“随机的词”,就能发现它们会显得越来越“真实”。
在传统(受生物学启发)的设置中,每个神经元实际上都有一些来自前一层神经元的“输入连接”,而且每个连接都被分配了一个特定的“权重”(可以为正或为负)。给定神经元的值是这样确定的:先分别将其“前一层神经元”的值乘以相应的权重并将结果相加,然后加上一个常数,最后应用一个“阈值”(或“激活”)函数。
这样,就能以我们对常见物体的识别为“锚点”创建一个图像嵌入,然后根据神经网络的行为“围绕它进行泛化”。关键是,这种行为只要与我们人类感知和解读图像的方式一致,就将最终成为一种“我们认为正确”且在实践中对执行“类人判断”的任务有用的嵌入。
先提供一批样例,然后调整网络中的权重,以最小化网络在这些样例上的误差(“损失”)。根据误差“反向传播”的主要问题在于,每次执行此操作时,网络中的每个权重通常都至少会发生微小的变化,而且有很多权重需要处理。
像ChatGPT这样基于生成语言的AI系统的基本思想并不适用于需要执行结构化计算任务的情况。
ChatGPT使用的“统计方法”,以及实际上是Wolfram|Alpha的起点的“符号方法”。
我们能“从数学上”解释网络是如何做出区分的吗?并不能。它只是在“做神经网络要做的事”。但是事实证明,这通常与我们人类所做的区分相当吻合。
我们可以将这看成是执行一种“识别任务”,所做的不是识别一个给定图像“看起来最像”哪个数字,而是相当直接地看出哪个点距离给定的点最近。
它的用户数2天达到100万,2个月达到1亿,打破了TikTok之前的纪录。而在2023年5月它上架苹果应用商店后,也毫无悬念地冲上了免费App榜榜首。
英语中有大约50000个常用词。通过查看大型的英文语料库(比如几百万本书,总共包含几百亿个词),我们可以估计每个词的常用程度。使用这些信息,就可以开始生成“句子”了,其中的每个词都是独立随机选择的,概率与它们在语料库中出现的概率相同。
实际上,“只有1750亿个权重”的神经网络就可以构建出人类所写文本的一个“合理模型”。
有没有一种通用的方法来判断一个句子是否有意义呢?这方面没有传统的总体理论。但是可以认为,在用来自互联网等处的数十亿个(应该有意义的)句子对ChatGPT进行训练后,它已经隐含地“发展出”了一个这样的“理论”。
但是如何才能构建这样的嵌入呢?大致的想法是查看大量的文本(这里查看了来自互联网的50亿个词),然后看看各个词出现的“环境”有多“相似”。
数值分析提供了各种技术来帮我们找到这种情况下的最小损失。一个典型的方法就是从之前的任意[插图]和[插图]开始,逐步沿着最陡的下降路径前进。
直到不久之前,我们可能还是认为(人类)语言将是描述“世界模型”的唯一通用方式。几个世纪前,人们就已经开始针对特定种类的事物进行形式化,特别是基于数学。但是现在有了一种更通用的形式化方法:计算语言。
我们的文明在过去几个世纪中取得的一项伟大成就就是建立了数学、精密科学—最重要的是计算—的范式,并且创建了一座能力高塔,与纯粹的类人思维所能达到的高度完全不同。
这里的关键概念是,我们不直接尝试表征“哪个图像接近哪个图像”,而是考虑一个定义良好、可以获取明确的训练数据的任务(这里是数字识别),然后利用如下事实:在完成这个任务时,神经网络隐含地必须做出相当于“接近度决策”的决策。因此,我们不需要明确地谈论“图像的接近度”,而是只谈论图像代表什么数字的具体问题,然后“让神经网络”隐含地确定这对于“图像的接近度”意味着什么。
他很快对纯物理失去了兴趣。1983年,他转到普林斯顿高等研究院,开始研究元胞自动机,希望找到更多自然和社会现象的底层规律。
我们怎么知道要在这里尝试使用直线呢?在某种程度上说,我们并不知道。它只是在数学上很简单,而且我们已经习惯了许多测量数据可以用简单的数学模型很好地拟合。
更大的神经网络通常能更好地逼近我们所求的函数。在“每个吸引子盆地的中心”,我们通常能确切地得到想要的答案。但在边界处,也就是神经网络“很难下定决心”的地方,情况可能会更加混乱。
我们希望找到一种以数字列表来表征图像的方法,以便为“我们认为相似的图像”分配相似的数字列表。
ChatGPT本质上是一种生成语言输出的系统,其输出遵循来自互联网和书籍等的训练材料中的“模式”。
最终的结果是,如果我们将一个图像的像素值集合输入这个函数,那么输出将是一个数,明确指出该图像中是什么数字。
通过将“温度”参数从0调高到0.8来获得这种随机性
本书作者斯蒂芬·沃尔弗拉姆(Stephen Wolfram)可谓奇人。
。就目前而言,我们能马上抓住的机会是,通过Wolfram|Alpha赋予ChatGPT计算知识超能力。这样,ChatGPT不仅可以产生“合理的类人输出”,而且能保证这些输出利用了封装在Wolfram|Alpha和Wolfram语言内的整座计算和知识高塔。
举例来说,我们知道,如果句子中有一个字母q,那么紧随其后的下一个字母几乎一定是u。
他40年前从纯物理转向复杂系统的研究,就是想解决人类智能等现象的第一性原理,因此有很深的积累。
但是,假设我们只有数据,而不知道支配它的基本定律。那么我们可能会做出数学上的猜测,比如也许应该使用一条直线作为模型。
我们可以将计算语言—和语义语法—的构建看作一种在表示事物方面的终极压缩。
但结果从来不是“完美”的。也许有的东西能够在95% 的时间内运作良好。但是不论怎样努力,它的表现在剩下的5% 时间内仍然难以捉摸
因为他不屑于看学校推荐的“蠢书”,而且算术不好,所以一开始老师们还以为“这孩子不行”。 结果人家13岁就自己写了几本物理书,其中之一名为《亚原子粒子物理》。
值得指出的是,即使在(温度为0.8的)第一步,也有许多可能的“下一个词”可供选择,尽管它们的概率迅速减小(是的,如下面的对数图所示,点的连线对应于[插图]次幂律衰减,这是语言的一般统计特征)。
如果继续下去呢?在此(“零温度”)情况下,文本很快就会变得混乱和重复。
是什么决定了这种结构?说到底,可能是对人类语言特征的一些“神经网络编码”。但是到目前为止,这些特征到底是什么仍是未知的。实际上,我们正在“打开ChatGPT(或者至少是GPT-2)的大脑”,并发现里面很复杂、难以理解—尽管它最终产生了可识别的人类语言。
Wolfram语言拥有大量内置的计算知识—这是我们几十年的工作成果,我们精心梳理了不断更新的海量数据,实现(而且经常发明)了各种方法、模型和算法—并且系统地为一切构建了一整套连贯的计算语言。
这一切都与语义语法的思想有关—目标是拥有一个对各种概念通用的符号“构造工具包”,用于对什么可以与什么组合在一起给出规则,从而对可以转化为人类语言的“流”给出规则。
现在不再一次一个字母地生成“词”,而是使用这些二元字母的概率,一次关注两个字母
在嵌入模块之后,就是Transformer的“主要事件”了:一系列所谓的“注意力块”(GPT-2有12个,ChatGPT的GPT-3有96个)。
但也许我们只是关注了“错的变量”(或者错的坐标系),如果关注对的那一个,就会立即看到ChatGPT正在做“像数学物理一样简单”的事情,比如沿测地线前进。
Wolfram语言的总体概念就是对我们人类的所思所想进行计算上的表示和处理。普通的编程语言旨在确切地告诉计算机要做什么,而作为一门全面的计算语言,Wolfram语言涉及的范围远远超出了这一点。实际上,它旨在成为一门既能让人类也能让计算机“用计算思维思考”的语言。
Wolfram|Alpha擅长的问题类型:可以基于其结构化、有条理的知识进行精确计算
现在,我们可以把这个“网络模型”当作黑盒,应用到之前的文本中,并询问模型哪5个词紧随其后的概率最高。
仅仅依靠神经网络能轻松完成的泛化(例如对于许多城市之间距离的许多示例的泛化)并不够,还需要一个实际的计算算法。
与我们迄今为止对ChatGPT内部的理解不同的是,我们可以期望对计算语言进行设计,使其易于被人类理解。
ChatGPT甚至可以为“它得出答案的方式”(尽管并不是它所“做”的真正方式)编造一个非常像样的解释。此外,迷人(和有趣)的是,它给出的解释里存在不理解数学的人类可能会犯的错误。
ChatGPT具有内在的随机性,因此如果你尝试问相同的问题,可能会得到不同的答案
每种情况下,我们都使用机器学习来找到最佳的权重选择。
我们可以期望这个数字列表在某种程度上能用来表征图像的“本质”,从而提供可以用作嵌入的东西。