《这就是ChatGPT》读书笔记

《这就是ChatGPT》


 斯蒂芬·沃尔弗拉姆

 74个笔记


 导读序 奇事·奇人·奇书


  • 以ChatGPT为代表的人工神经网络的逆袭之旅,在整个科技史上也算得上跌宕起伏。它曾经在流派众多的人工智能界内部屡受歧视和打击。不止一位天才先驱以悲剧结束一生:1943年,沃尔特·皮茨(Walter Pitts)在与沃伦·麦卡洛克(Warren McCulloch)共同提出神经网络的数学表示时才20岁,后来因为与导师维纳失和而脱离学术界,最终因饮酒过度于46岁辞世;1958年,30岁的弗兰克·罗森布拉特(Frank Rosenblatt)通过感知机实际实现了神经网络,而1971年,他在43岁生日那天溺水身亡;反向传播的主要提出者大卫·鲁梅尔哈特(David Rumelhart)则正值盛年(50多岁)就罹患了罕见的不治之症,1998年开始逐渐失智,最终在与病魔斗争十多年后离世……一些顶级会议以及明斯基这样的学术巨人都曾毫不客气地反对甚至排斥神经网络,逼得辛顿等人不得不先后采用“关联记忆”“并行分布式处理”“卷积网络”“深度学习”等中性或者晦涩的术语为自己赢得一隅生存空间。
  • 2015年,30岁的山姆·阿尔特曼和28岁的格雷格·布罗克曼(Greg Brockman)与马斯克联手,召集了30岁的苏茨克维等多位AI顶级人才,共同创立OpenAI,希望在谷歌、Facebook等诸多巨头之外,建立中立的AI前沿科研阵地,并且雄心勃勃地把构建与人类水平相当的人工智能作为自己的目标。那时候,媒体报道基本上都以马斯克支持成立了一家非营利AI机构为标题,并没有多少人看好OpenAI。甚至连苏茨克维这样的灵魂人物,在加入前也经历了一番思想斗争。
  • (大模型进化树,出自Amazon杨靖锋等2023年4月的论文“Harnessing the Power of LLMs in Practice”)今天,BERT论文的引用数已经超过6.8万,比GPT-1论文的不到6000仍然高了一个数量级。两篇论文的技术路线不同,无论是学术界还是工业界,几乎所有人当时都选择了BERT阵营。
  • 这前后,OpenAI还做了规模对语言模型能力影响的研究,提出了“规模法则”(scaling law),确定了整个组织的主要方向:大模型。为此,OpenAI将强化学习、机器人等其他方向都砍掉了。难能可贵的是,大部分核心研发人员选择了留下。他们改变自己的研究方向,放弃小我,集中力量做大事——很多人转而做工程和数据等方面的工作,或者围绕大模型重新定位自己的研究方向(比如强化学习就在GPT 3.5以及之后的演进中发挥了重大作用)。这种组织上的灵活性,也是OpenAI能成功的重要因素。
  • 2020年,GPT-3横空出世,NLP(natural language processing,自然语言处理)小圈子里的一些有识之士开始意识到OpenAI技术路线的巨大潜力。在中国,北京智源人工智能研究院联合清华大学等高校推出了GLM、CPM等模型,并积极在国内学术界推广大模型理念。从上页关于大模型进化树的图中可以看到,2021年之后,GPT路线已经完全占据上风,而BERT这一“物种”的进化树几乎停止了。
  • 一年后,Anthropic发表论文“A General Language Assistant as a Laboratory for Alignment”,开始用聊天助手研究对齐问题,此后逐渐演变为Claude这个智能聊天产品。
  • 2022年6月,论文“Emergent Abilities of Large Language Models”发布,第一作者是仅从达特茅斯学院本科毕业两年的谷歌研究员Jason Wei(今年2月,他在谷歌的“精英跳槽潮”中去了OpenAI)。他在论文中研究了大模型的涌现能力,这类能力在小模型中不存在,只有模型规模扩大到一定量级才会出现——也就是我们熟悉的“量变会导致质变”。
  • 很多人会问:为什么中国没有产生ChatGPT?其实正确的问题(prompt)应该是:为什么全世界只有OpenAI能做出ChatGPT?他们成功的原因是什么?

 奇书


  • 比如,GPT技术路线的一大核心理念,是用最简单的自回归生成架构来解决无监督学习问题,也就是利用无须人特意标注的原始数据,学习其中对世界的映射。自回归生成架构,就是书中讲得非常通俗的“只是一次添加一个词”。这里特别要注意的是,选择这种架构并不是为了做生成任务,而是为了理解或者学习,是为了实现模型的通用能力。在2020年之前甚至之后的几年里,业界很多专业人士想当然地以为GPT是搞生成任务的,所以选择了无视。殊不知GPT-1论文的标题就是“通过生成式预训练改进语言理解”(“Improving Language Understanding by Generative Pre-Training”)。
  • 再比如,对于没有太多技术背景或者机器学习背景的读者来说,了解人工智能最新动态时可能遇到的直接困难,是听不懂总是出现的基本概念“模型”“参数(在神经网络中就是权重)”是什么意思,而且这些概念很难讲清楚。本书中,大神作者非常贴心地用直观的例子(函数和旋钮)做了解释(参见“什么是模型”一节)。
  • 换句话说,有时候用神经网络解决复杂问题比解决简单问题更容易——这似乎有些违反直觉。大致原因在于,当有很多“权重变量”时,高维空间中有“很多不同的方向”可以引导我们到达最小值;而当变量较少时,很容易陷入局部最小值的“山湖”,无法找到“出去的方向”。
  • 人类努力完成的事情,会逐渐自动化,最终能通过技术免费完成。很多人认为是人类特有的创造力或原创力、情感、判断力等,AI应该也能够拥有。最终,AI也会逐步发展出自己的世界。这是一种新的生态,可能有自己的宪章,人类需要适应,与之共存共荣。
  • 根据“计算不可约性原理”(即“总有一些计算是没有捷径来加速或者自动化的”,作者认为这是思考AI未来的核心),复杂系统中总是存在无限的“计算可约区”,这正是人类历史上能不断出现科学创新、发明和发现的空间。所以,人类会不断向前沿进发,而且永远有前沿可以探索。同时,“计算不可约性原理”也决定了,人类、AI、自然界和社会等各种计算系统具有根本的不可预测性,始终存在“收获惊喜的可能”。人类可贵的,是有内在驱动力和内在体验,能够内在地定义目标或者意义,从而最终定义未来。
  • 我们又应该怎么做呢?沃尔弗拉姆给出了如下建议。●最高效的方式是发掘新的可能性,定义对自己有价值的东西。●从现在的回答问题转向学会如何提出问题,以及如何确定哪些问题值得提出。也就是从知识执行转向知识战略。●知识广度和思维清晰度将很重要。●直接学习所有详细的知识已经变得不必要了:我们可以在更高的层次上学习和工作,抽象掉许多具体的细节。“整合”,而不是专业化。尽可能广泛、深入地思考,尽可能多地调用知识和范式。●学会使用工具来做事。过去我们更倚重逻辑和数学,以后要特别注意利用计算范式,并运用与计算直接相关的思维方式。

 第一篇 ChatGPT在做什么?它为何能做到这些?


  • 在进入下一节之前,需要解释一下,为了方便阐述,我在大多数情况下不会使用ChatGPT中的完整系统,而是使用更简单的GPT-2系统,它的优点是足够小,可以在标准的台式计算机上运行。因此,对于书中展示的所有原理,我都能附上明确的Wolfram语言代码,你可以立即在自己的计算机上运行。
  • 如果继续下去呢?在此(“零温度”[插图])情况下,文本很快就会变得混乱和重复。

 概率从何而来


  • ChatGPT总是根据概率选择下一个词,但是这些概率是从何而来的呢?让我们从一个更简单的问题开始:考虑逐字母(而非逐词)地生成英文文本。怎样才能计算出每个字母应当出现的概率呢?我们可以做一件很小的事,拿一段英文文本样本,然后计算其中不同字母的出现次数。例如,下面的例子统计了维基百科上“cats”(猫)的条目中各个字母的出现次数。
  • 现在假设—多少像ChatGPT所做的那样—我们正在处理整个词,而不是字母。英语中有大约50000个常用词。通过查看大型的英文语料库(比如几百万本书,总共包含几百亿个词),我们可以估计每个词的常用程度。使用这些信息,就可以开始生成“句子”了,其中的每个词都是独立随机选择的,概率与它们在语料库中出现的概率相同。以下是我们得到的一个结果。
  • 结果看起来稍微变得更加“合理”了。可以想象,如果能够使用足够长的 n 元词,我们基本上会“得到一个ChatGPT”,也就是说,我们得到的东西能够生成符合“正确的整体文章概率”且像文章一样长的词序列。但问题在于:我们根本没有足够的英文文本来推断出这些概率。在网络爬取结果中可能有几千亿个词,在电子书中可能还有另外几百亿个词。但是,即使只有4万个常用词,可能的二元词的数量也已经达到了16亿,而可能的三元词的数量则达到了60万亿。因此,我们无法根据已有的文本估计所有这些三元词的概率。当涉及包含20个词的“文章片段”时,可能的20元词的数量会大于宇宙中的粒子数量,所以从某种意义上说,永远无法把它们全部写下来。

 什么是模型


  • 必须理解,从来没有“无模型的模型”。你使用的任何模型都有某种特定的基本结构,以及用于拟合数据的一定数量的“旋钮”(也就是可以设置的参数)。ChatGPT使用了许多这样的“旋钮”—实际上有1750亿个。但是值得注意的是,ChatGPT的基本结构—“仅仅”用这么少的参数—足以生成一个能“足够好”地计算下一个词的概率的模型,从而生成合理的文章。

 类人任务(human-like task)的模型


  • 类人任务(human-like task)的模型上文提到的例子涉及为数值数据建立模型,这些数据基本上来自简单的物理学—几个世纪以来,我们已经知道可以用一些“简单的数学工具”为其建模。但是对于ChatGPT,我们需要为人脑产生的人类语言文本建立模型。而对于这样的东西,我们(至少目前)还没有“简单的数学”可用。那么它的模型可能是什么样的呢?在讨论语言之前,让我们谈谈另一个类人任务:图像识别。一个简单的例子是包含数字的图像(这是机器学习中的一个经典例子)。
  • 这里究竟发生了什么?假设我们逐渐模糊一个数字。在一小段时间内,我们的函数仍然能够“识别”它,这里为2。但函数很快就无法准确识别了,开始给出“错误”的结果。[插图]为什么说这是“错误”的结果呢?在本例中,我们知道是通过模糊数字2来得到所有图像的。但是,如果我们的目标是为人类在识别图像方面的能力生成一个模型,真正需要问的问题是:面对一个模糊的图像,并且不知道其来源,人类会用什么方式来识别它?
  • 如果函数给出的结果总是与人类的意见相符,那么我们就有了一个“好模型”。一个重大的科学事实是,对于图像识别这样的任务,我们现在基本上已经知道如何构建不错的函数了。能“用数学证明”这些函数有效吗?不能。因为要做到这一点,我们必须拥有一个关于人类所做的事情的数学理论。如果改变2的图像中的一些像素,我们可能会觉得,仍应该认为这是数字2。但是随着更多像素发生改变,我们又应该能坚持多久呢?这是一个关于人类视觉感知的问题。没错,对于蜜蜂或章鱼的图像,答案无疑会有所不同,而对于虚构的外星人的图像,答案则可能会完全不同。

 神经网络


  • 神经网络用于图像识别等任务的典型模型到底是如何工作的呢?目前最受欢迎而且最成功的方法是使用神经网络。神经网络发明于20世纪40年代—它在当时的形式与今天非常接近—可以视作对大脑工作机制的简单理想化。人类大脑有大约1000亿个神经元(神经细胞),每个神经元都能够产生电脉冲,最高可达每秒约1000次。这些神经元连接成复杂的网络,每个神经元都有树枝状的分支,从而能够向其他数千个神经元传递电信号。粗略地说,任意一个神经元在某个时刻是否产生电脉冲,取决于它从其他神经元接收到的电脉冲,而且神经元不同的连接方式会有不同的“权重”贡献。
  • 当我们“看到一个图像”时,来自图像的光子落在我们眼睛后面的(光感受器)细胞上,它们会在神经细胞中产生电信号。这些神经细胞与其他神经细胞相连,信号最终会通过许多层神经元。在此过程中,我们“识别”出这个图像,最终“形成”我们“正在看数字2”的“想法”(也许最终会做一些像大声说出“二”这样的事情)。
  • 我们可以将这看成是执行一种“识别任务”,所做的不是识别一个给定图像“看起来最像”哪个数字,而是相当直接地看出哪个点距离给定的点最近。[这里展示的沃罗诺伊图(Voronoi diagram)将二维欧几里得空间中的点分隔开来。可以将数字识别任务视为在做一种非常类似的操作—只不过是在由每个图像中所有像素的灰度形成的784维空间中。]那么如何让神经网络“执行识别任务”呢?让我们考虑下面这个非常简单的情况。
  • 如何用神经网络实现这一点呢?归根结底,神经网络是由理想化的“神经元”组成的连接集合—通常是按层排列的。一个简单的例子如下所示。
  • 在传统(受生物学启发)的设置中,每个神经元实际上都有一些来自前一层神经元的“输入连接”,而且每个连接都被分配了一个特定的“权重”(可以为正或为负)。给定神经元的值是这样确定的:先分别将其“前一层神经元”的值乘以相应的权重并将结果相加,然后加上一个常数,最后应用一个“阈值”(或“激活”)函数。用数学术语来说,如果一个神经元有输入[插图],那么我们要计算[插图]。对于权重 w 和常量 b,通常会为网络中的每个神经元选择不同的值;函数 f 则通常在所有神经元中保持不变。计算[插图]只需要进行矩阵乘法和矩阵加法运算。激活函数 f 则使用了非线性函数(最终会导致非平凡的行为)。下面是一些常用的激活函数,这里使用的是Ramp(或ReLU)。
  • 同样,ChatGPT的神经网络也只对应于一个这样的数学函数—它实际上有数十亿项。现在,让我们回头看看单个神经元。下图展示了一个具有两个输入(代表坐标 x 和 y)的神经元可以通过各种权重和常数(以及激活函数Ramp)计算出的一些示例。[插图]对于上面提到的更大的网络呢?它的计算结果如下所示。
  • 更大的神经网络通常能更好地逼近我们所求的函数。在“每个吸引子盆地的中心”,我们通常能确切地得到想要的答案。但在边界处,也就是神经网络“很难下定决心”的地方,情况可能会更加混乱。
  • 这里的“正确答案”更加不明显了。穿着猫咪衣服的狗怎么分?等等。无论输入什么,神经网络都会生成一个答案。结果表明,它的做法相当符合人类的思维方式。正如上面所说的,这并不是我们可以“根据第一性原则推导”出来的事实。这只是一些经验性的发现,至少在某些领域是正确的。但这是神经网络有用的一个关键原因:它们以某种方式捕捉了“类似人类”的做事方式。
  • 找一张猫的图片看看,并问自己:“为什么这是一只猫?”你也许会说“我看到了它尖尖的耳朵”,等等。但是很难解释你是如何把这个图像识别为一只猫的。你的大脑就是不知怎么地想明白了。但是(至少目前还)没有办法去大脑“内部”看看它是如何想明白的。那么,对于(人工)神经网络呢?当你展示一张猫的图片时,很容易看到每个“神经元”的作用。不过,即使要对其进行基本的可视化,通常也非常困难。在上面用于解决“最近点”问题的最终网络中,有17个神经元;在用于识别手写数字的网络中,有2190个神经元;而在用于识别猫和狗的网络中,有60650个神经元。通常很难可视化出60650维的空间。但由于这是一个用于处理图像的网络,其中的许多神经元层被组织成了数组,就像它查看的像素数组一样。
  • 但是总的来说,我们可以说神经网络正在“挑选出某些特征”(也许尖尖的耳朵是其中之一),并使用这些特征来确定图像的内容。但是,这些特征能否用语言描述出来(比如“尖尖的耳朵”)呢?大多数情况下不能。我们的大脑是否使用了类似的特征呢?我们多半并不知道。但值得注意的是,一些神经网络(像上面展示的这个)的前几层似乎会挑选出图像的某些方面(例如物体的边缘),而这些方面似乎与我们知道的大脑中负责视觉处理的第一层所挑选出的相似。假设我们想得到神经网络中的“猫识别理论”,可以说:“看,这个特定的网络可以做到这一点。”这会立即让我们对“问题的难度”有一些了解(例如,可能需要多少个神经元或多少层)。但至少到目前为止,我们没办法对网络正在做什么“给出语言描述”。也许这是因为它确实是计算不可约的,除了明确跟踪每一步之外,没有可以找出它做了什么的一般方法。也有可能只是因为我们还没有“弄懂科学”,也没有发现能总结正在发生的事情的“自然法则”。当使用ChatGPT生成语言时,我们会遇到类似的问题,而且目前尚不清楚是否有方法来“总结它所做的事情”。但是,语言的丰富性和细节(以及我们的使用经验)可能会让我们比图像处理取得更多进展。

 机器学习和神经网络的训练


  • 机器学习和神经网络的训练到目前为止,我们一直在讨论“已经知道”如何执行特定任务的神经网络。但神经网络之所以很有用(人脑中的神经网络大概也如此),原因不仅在于它可以执行各种任务,还在于它可以通过逐步“根据样例训练”来学习执行这些任务。当构建一个神经网络来区分猫和狗的图像时,我们不需要编写一个程序来(比如)明确地找到胡须,只需要展示很多关于什么是猫和什么是狗的样例,然后让神经网络从中“机器学习”如何区分它们即可。
  • 神经网络的训练究竟是如何起效的呢?本质上,我们一直在尝试找到能使神经网络成功复现给定样例的权重。然后,我们依靠神经网络在这些样例“之间”进行“合理”的“插值”(或“泛化”)。
  • 基本思想是提供大量的“输入→输出”样例以供“学习”,然后尝试找到能够复现这些样例的权重。以下是逐渐增加样例后所得的结果。[插图]在该“训练”的每个阶段,都会逐步调整神经网络的权重,我们会发现最终得到了一个能成功复现我们想要的函数的神经网络。应该如何调整权重呢?基本思想是,在每个阶段看一下我们离想要的函数“有多远”,然后朝更接近该函数的方向更新权重。
  • 为了明白离目标“有多远”,我们计算“损失函数”(有时也称为“成本函数”)。这里使用了一个简单的(L2)损失函数,就是我们得到的值与真实值之间的差异的平方和。随着训练过程不断进行,我们看到损失函数逐渐减小(遵循特定的“学习曲线”,不同任务的学习曲线不同),直到神经网络成功地复现(或者至少很好地近似)我们想要的函数。
  • 就像水从山上流下来一样,只能保证会到达表面上的某个局部最小值(“一个山湖”),但不一定能到达最终的全局最小值。似乎不太容易在“权重景观”中找到最陡的下降路径,但是微积分可以拯救我们。正如上面提到的,我们总是可以将神经网络视为计算出一个数学函数—取决于其输入和权重。现在考虑对这些权重进行微分。结果表明,微积分的链式法则实际上让我们解开了神经网络中连续各层所做操作的谜团。结果是,我们可以—至少在某些局部近似中—“反转”神经网络的操作,并逐步找到使与输出相关的损失最小化的权重。
  • 换句话说,有时候用神经网络解决复杂问题比解决简单问题更容易—这似乎有些违反直觉。大致原因在于,当有很多“权重变量”时,高维空间中有“很多不同的方向”可以引导我们到达最小值;而当变量较少时,很容易陷入局部最小值的“山湖”,无法找到“出去的方向”。
  • 值得指出的是,在典型情况下,有许多不同的权重集合可以使神经网络具有几乎相同的性能。在实际的神经网络训练中,通常会做出许多随机选择,导致产生一些“不同但等效”的解决方案,就像下面这些一样。[插图]但是每个这样的“不同解决方案”都会有略微不同的行为。假如在我们给出训练样例的区域之外进行“外插”(extrapolation),可能会得到截然不同的结果。

 神经网络训练的实践和学问


  • 这门学问有几个关键部分。首先是针对特定的任务使用何种神经网络架构的问题。然后是如何获取用于训练神经网络的数据的关键问题。在越来越多的情况下,人们并不从头开始训练网络:一个新的网络可以直接包含另一个已经训练过的网络,或者至少可以使用该网络为自己生成更多的训练样例。有人可能会认为,每种特定的任务都需要不同的神经网络架构。但事实上,即使对于看似完全不同的任务,同样的架构通常也能够起作用。在某种程度上,这让人想起了通用计算(universal computation)的概念和我的计算等价性原理(Principle of Computational Equivalence),但是,正如后面将讨论的那样,我认为这更多地反映了我们通常试图让神经网络去完成的任务是“类人”任务,而神经网络可以捕捉相当普遍的“类人过程”。
  • 神经网络的一个重要特征是,它们说到底只是在处理数据—和计算机一样。目前的神经网络及其训练方法具体处理的是由数组成的数组,但在处理过程中,这些数组可以完全重新排列和重塑。例如,前面用于识别数字的网络从一个二维的“类图像”数组开始,迅速“增厚”为许多通道,但然后会“浓缩”成一个一维数组,最终包含的元素代表可能输出的不同数字。
  • 但是,如何确定特定的任务需要多大的神经网络呢?这有点像一门艺术。在某种程度上,关键是要知道“任务有多难”。但是类人任务的难度通常很难估计。是的,可能有一种系统化的方法可以通过计算机来非常“机械”地完成任务,但是很难知道是否有一些技巧或捷径有助于更轻松地以“类人水平”完成任务。可能需要枚举一棵巨大的对策树才能“机械”地玩某个游戏,但也可能有一种更简单的(“启发式”)方法来实现“类人的游戏水平”。
  • 我们看到的是,如果神经网络太小,它就无法复现我们想要的函数。但是只要超过某个大小,它就没有问题了—前提是至少训练足够长的时间,提供足够的样例。顺便说一句,这些图片说明了神经网络学问中的一点:如果中间有一个“挤压”(squeeze),迫使一切都通过中间较少的神经元,那么通常可以使用较小的网络。[值得一提的是,“无中间层”(或所谓的“感知机”)网络只能学习基本线性函数,但是只要有一个中间层(至少有足够的神经元),原则上就始终可以任意好地逼近任何函数,尽管为了使其可行地训练,通常会做某种规范化或正则化。]
  • 好吧,假设我们已经确定了一种特定的神经网络架构。现在的问题是如何获取用于训练网络的数据。神经网络(及广义的机器学习)的许多实际挑战集中在获取或准备必要的训练数据上。在许多情况(“监督学习”)下,需要获取明确的输入样例和期望的输出。例如,我们可能希望根据图像中的内容或其他属性添加标签,而浏览图像并添加标签通常需要耗费大量精力。不过很多时候,可以借助已有的内容或者将其用作所需内容的替代。例如,可以使用互联网上提供的alt标签。还有可能在不同的领域中使用为视频创建的隐藏式字幕。对于语言翻译训练,可以使用不同语言的平行网页或平行文档。
  • 然而,仅仅不断重复相同的样例并不够,还需要向神经网络展示样例的变化。神经网络学问的一个特点是,这些“数据增强”的变化并不一定要很复杂才有用。只需使用基本的图像处理方法稍微修改图像,即可使其在神经网络训练中基本上“像新的一样好”。与之类似,当人们在训练自动驾驶汽车时用完了实际的视频等数据,可以继续在模拟的游戏环境中获取数据,而不需要真实场景的所有细节。
  • 那么ChatGPT呢?它有一个很好的特点,就是可以进行“无监督学习”,这样更容易获取训练样例。回想一下,ChatGPT的基本任务是弄清楚如何续写一段给定的文本。因此,要获得“训练样例”,要做的就是取一段文本,并将结尾遮盖起来,然后将其用作“训练的输入”,而“输出”则是未被遮盖的完整文本。我们稍后会更详细地讨论这个问题,这里的重点是—(与学习图像内容不同)不需要“明确的标签”,ChatGPT实际上可以直接从它得到的任何文本样例中学习。神经网络的实际学习过程是怎样的呢?归根结底,核心在于确定哪些权重能够最好地捕捉给定的训练样例。有各种各样的详细选择和“超参数设置”(之所以这么叫,是因为权重也称为“参数”),可以用来调整如何进行学习。有不同的损失函数可以选择,如平方和、绝对值和,等等。有不同的损失最小化方法,如每一步在权重空间中移动多长的距离,等等。然后还有一些问题,比如“批量”(batch)展示多少个样例来获得要最小化的损失的连续估计。是的,我们可以(像在Wolfram语言中所做的一样)应用机器学习来自动化机器学习,并自动设置超参数等。最终,整个训练过程可以通过损失的减小趋势来描述(就像这个经过小型训练的Wolfram语言进度监视器一样)。
  • 未来,是否会有更好的方法来训练神经网络或者完成神经网络的任务呢?我认为答案几乎是肯定的。神经网络的基本思想是利用大量简单(本质上相同)的组件来创建一个灵活的“计算结构”,并使其能够逐步通过学习样例得到改进。在当前的神经网络中,基本上是利用微积分的思想(应用于实数)来进行这种逐步的改进。但越来越清楚的是,重点并不是拥有高精度数值,即使使用当前的方法,8位或更少的数也可能已经足够了。
  • 但即使仅在现有神经网络的框架内,也仍然存在一个关键限制:神经网络的训练目前基本上是顺序进行的,每批样例的影响都会被反向传播以更新权重。事实上,就目前的计算机硬件而言,即使考虑到GPU,神经网络的大部分在训练期间的大部分时间里也是“空闲”的,一次只有一个部分被更新。从某种意义上说,这是因为当前的计算机往往具有独立于CPU(或GPU)的内存。但大脑中的情况可能不同—每个“记忆元素”(即神经元)也是一个潜在的活跃的计算元素。如果我们能够这样设置未来的计算机硬件,就可能会更高效地进行训练。

 “足够大的神经网络当然无所不能!”


  • “足够大的神经网络当然无所不能!”ChatGPT的能力令人印象深刻,以至于人们可能会想象,如果能够在此基础上继续努力,训练出越来越大的神经网络,那么它们最终将“无所不能”。对于那些容易被人类思维理解的事物,这确实很可能是成立的。但我们从科学在过去几百年间的发展中得出的教训是,有些事物虽然可以通过形式化的过程来弄清楚,但并不容易立即为人类思维所理解。
  • 如果有一个足够大的神经网络,那么你可能能够做到人类可以轻易做到的任何事情。但是你无法捕捉自然界一般而言可以做到的事情,或者我们用自然界塑造的工具可以做到的事情。而正是这些工具的使用,无论是实用性的还是概念性的,近几个世纪以来使我们超越了“纯粹的无辅助的人类思维”的界限,为人类获取了物理宇宙和计算宇宙之外的很多东西。

 “嵌入”的概念


  • “嵌入”的概念神经网络,至少以目前的设置来说,基本上是基于数的。因此,如果要用它来处理像文本这样的东西,我们需要一种用数表示文本的方法。当然,我们可以(本质上和ChatGPT一样)从为字典中的每个词分配一个数开始。但有一个重要的思想—也是ChatGPT的中心思想—更胜一筹。这就是“嵌入”(embedding)的思想。可以将嵌入视为一种尝试通过数的数组来表示某些东西“本质”的方法,其特性是“相近的事物”由相近的数表示。例如,我们可以将词嵌入视为试图在一种“意义空间”中布局词,其中“在意义上相近”的词会出现在相近的位置。实际使用的嵌入(例如在ChatGPT中)往往涉及大量数字列表。但如果将其投影到二维平面上,则可以展示嵌入对词的布局方式。

 ChatGPT的内部原理


  • ChatGPT(或者说它基于的GPT-3网络)到底是在做什么呢?它的总体目标是,根据所接受的训练(查看来自互联网的数十亿页文本,等等),以“合理”的方式续写文本。所以在任意给定时刻,它都有一定量的文本,而目标是为要添加的下一个标记做出适当的选择。它的操作分为三个基本阶段。第一阶段,它获取与目前的文本相对应的标记序列,并找到表示这些标记的一个嵌入(即由数组成的数组)。第二阶段,它以“标准的神经网络的方式”对此嵌入进行操作,值“像涟漪一样依次通过”网络中的各层,从而产生一个新的嵌入(即一个新的数组)。第三阶段,它获取此数组的最后一部分,并据此生成包含约50000个值的数组,这些值就成了各个可能的下一个标记的概率。(没错,使用的标记数量恰好与英语常用词的数量相当,尽管其中只有约3000个标记是完整的词,其余的则是片段。)
  • 在每个这样的注意力块中,都有一组“注意力头”(GPT-2有12个,ChatGPT的GPT-3有96个)—每个都独立地在嵌入向量的不同值块上进行操作。(我们不知道为什么最好将嵌入向量分成不同的部分,也不知道不同的部分“意味”着什么。这只是那些“被发现奏效”的事情之一。)注意力头是做什么的呢?它们基本上是一种在标记序列(即目前已经生成的文本)中进行“回顾”的方式,能以一种有用的形式“打包过去的内容”,以便找到下一个标记。在“概率从何而来”一节中,我们介绍了使用二元词的概率来根据上一个词选择下一个词。Transformer中的“注意力”机制所做的是允许“关注”更早的词,因此可能捕捉到(例如)动词可以如何被联系到出现在句子中很多词之前的名词。更详细地说,注意力头所做的是,使用一定的权重重新加权组合与不同标记相关联的嵌入向量中的块。例如,对于上面的“hello, bye”字符串,(GPT-2中)第一个注意力块中的12个注意力头具有以下(“回顾到标记序列开头”的)“权重重组”模式。
  • 是什么决定了这种结构?说到底,可能是对人类语言特征的一些“神经网络编码”。但是到目前为止,这些特征到底是什么仍是未知的。实际上,我们正在“打开ChatGPT(或者至少是GPT-2)的大脑”,并发现里面很复杂、难以理解—尽管它最终产生了可识别的人类语言。经过一个注意力块后,我们得到了一个新的嵌入向量,然后让它依次通过其他的注意力块(GPT-2中共有12个,GPT-3中共有96个)。每个注意力块都有自己特定的“注意力”模式和“全连接”权重。这里是GPT-2对于“hello, bye”输入的注意力权重序列,用于第一个注意力头。
  • 奇怪的是,尽管不同注意力块中的“权重矩阵”看起来非常相似,但权重大小的分布可能会有所不同(而且并不总是服从高斯分布)。[插图]在经过所有这些注意力块后,Transformer的实际效果是什么?本质上,它将标记序列的原始嵌入集合转换为最终集合。ChatGPT的特定工作方式是,选择此集合中的最后一个嵌入,并对其进行“解码”,以生成应该出现的下一个标记的概率列表。
  • 值得注意的是,所有这些操作—尽管各自都很简单—可以一起出色地完成生成文本的“类人”工作。必须再次强调,(至少就我们目前所知)没有“理论上的终极原因”可以解释为什么类似于这样的东西能够起作用。事实上,正如我们将讨论的那样,我认为必须将其视为一项(可能非常惊人的)科学发现:在像ChatGPT这样的神经网络中,能以某种方式捕捉到人类大脑在生成语言时所做事情的本质。

 ChatGPT的训练


  • ChatGPT的训练我们已经概述了ChatGPT在设置后的工作方式。但是它是如何设置的呢?那1750亿个神经元的权重是如何确定的呢?基本上,这是基于包含人类所写文本的巨型语料库(来自互联网、书籍等),通过大规模训练得出的结果。正如我们所说,即使有所有这些训练数据,也不能肯定神经网络能够成功地产生“类人”文本。似乎需要细致的工程设计才能实现这一点。但是,ChatGPT带来的一大惊喜和发现是,它完全可以做到。实际上,“只有1750亿个权重”的神经网络就可以构建出人类所写文本的一个“合理模型”。
  • 现代社会中,人类写的很多文本以数字(digital)形式存在。公共互联网上至少有数十亿个包含人类所写文本的网页,总词数可能达到万亿级别。如果包括非公开的网页,词数可能会增加至少100倍。到目前为止,已经有超过500万本电子书可供阅读(全球发行的图书品种总数为1亿左右),提供了另外约1000亿个词的文本。这还不包括视频中的口述文本等。(就个人而言,我一生中发表的文字总量不到300万个词,在过去30年中写下了约1500万个词的电子邮件,总共敲了大约5000万个词—而且仅在过去几年的直播中,我就说了超过1000万个词。是的,我会从中训练一个机器人。)

 在基础训练之外


  • 值得再次指出的是,神经网络在捕捉信息方面不可避免地存在“算法限制”。如果告诉它类似于“从这个到那个”等“浅显”的规则,神经网络很可能能够不错地表示和重现这些规则,并且它“已经掌握”的语言知识将为其提供一个立即可用的模式。但是,如果试图给它实际的“深度”计算规则,涉及许多可能计算不可约的步骤,那么它就行不通了。(请记住,它在每一步都只是在网络中“向前馈送数据”,除非生成新的标记,否则它不会循环。)当然,神经网络可以学习特定的“不可约”计算的答案。但是,一旦存在可能性的组合数,这种“表查找式”的方法就不起作用了。因此,就像人类一样,神经网络此时需要使用真正的计算工具。(没错,Wolfram|Alpha和Wolfram语言就非常适用,因为它们正是被构建用于“谈论世界中的事物”的,就像语言模型神经网络一样。)

 真正让ChatGPT发挥作用的是什么


  • 真正让ChatGPT发挥作用的是什么人类语言,及其生成所涉及的思维过程,一直被视为复杂性的巅峰。人类大脑“仅”有约1000亿个神经元(及约100万亿个连接),却能够做到这一切,确实令人惊叹。人们可能会认为,大脑中不只有神经元网络,还有某种具有尚未发现的物理特性的新层。但是有了ChatGPT之后,我们得到了一条重要的新信息:一个连接数与大脑神经元数量相当的纯粹的人工神经网络,就能够出色地生成人类语言。这仍然是一个庞大而复杂的系统,其中的神经网络权重几乎与当前世界上可用文本中的词一样多。但在某种程度上,似乎仍然很难相信语言的所有丰富性和它能谈论的事物都可以被封装在这样一个有限的系统中。这里面的部分原理无疑反映了一个普遍现象(这个现象最早在规则30[插图]的例子中变得显而易见):即使基础规则很简单,计算过程也可以极大地放大系统的表面复杂性。但是,正如上面讨论的那样,ChatGPT使用的这种神经网络实际上往往是特别构建的,以限制这种现象(以及与之相关的计算不可约性)的影响,从而使它们更易于训练。那么,ChatGPT是如何在语言方面获得如此巨大成功的呢?我认为基本答案是,语言在根本上比它看起来更简单。这意味着,即使是具有简单的神经网络结构的ChatGPT,也能够成功地捕捉人类语言的“本质”和背后的思维方式。此外,在训练过程中,ChatGPT已经通过某种方式“隐含地发现”了使这一切成为可能的语言(和思维)规律。我认为,ChatGPT的成功为一个基础而重要的科学事实向我们提供了证据:它表明我们仍然可以期待能够发现重大的新“语言法则”,实际上是“思维法则”。在ChatGPT中,由于它是一个神经网络,这些法则最多只是隐含的。但是,如果我们能够通过某种方式使这些法则变得明确,那么就有可能以更直接、更高效和更透明的方式做出ChatGPT所做的那些事情。这些法则可能是什么样子的呢?最终,它们必须为我们提供某种关于如何组织语言及其表达方式的指导。我们稍后将讨论“在ChatGPT内部”可能如何找到一些线索,并根据构建计算语言的经验探索前进的道路。但首先,让我们讨论两个早已知晓的“语言法则”的例子,以及它们与ChatGPT的运作有何关系。第一个是语言的语法。语言不仅仅是把一些词随机拼凑在一起。相反,不同类型的词之间有相当明确的语法规则。例如,在英语中,名词的前面可以有形容词、后面可以有动词,但是两个名词通常不能挨在一起。这样的语法结构可以通过一组规则来(至少大致地)捕捉,这些规则定义了如何组织所谓的“解析树”。

 意义空间和语义运动定律


  • 我们在介绍嵌入时见过一个包含植物词和动物词的例子。这两个例子都说明了,“语义上相似的词”会被放在相近的位置。
  • 当然,一个词通常不只有“一个意思”(也不一定只有一种词性)。通过观察包含一个词的句子在特征空间中的布局,人们通常可以“分辨出”它们不同的含义,就像如下例子中的crane这个词(指的是“鹤”还是“起重机”?)。

 语义语法和计算语言的力量


  • 产生“有意义的人类语言”需要什么?过去,我们可能认为人类大脑必不可少。但现在我们知道,ChatGPT的神经网络也可以做得非常出色。这或许就是我们所能达到的极限,没有比这更简单(或更易于人类理解)的方法可以使用了。不过,我强烈怀疑ChatGPT的成功暗示了一个重要的“科学”事实:有意义的人类语言实际上比我们所知道的更加结构化、更加简单,最终可能以相当简单的规则来描述如何组织这样的语言。

 那么,ChatGPT到底在做什么?它为什么能做到这些?


  • 那么,ChatGPT到底在做什么?它为什么能做到这些?ChatGPT的基本概念在某种程度上相当简单:首先从互联网、书籍等获取人类创造的海量文本样本,然后训练一个神经网络来生成“与之类似”的文本。特别是,它能够从“提示”开始,继续生成“与其训练数据相似的文本”。
  • 正如我们所见,ChatGPT中的神经网络实际上由非常简单的元素组成,尽管有数十亿个。神经网络的基本操作也非常简单,本质上是对于它生成的每个新词(或词的一部分),都将根据目前生成的文本得到的输入依次传递“给其所有元素一次”(没有循环等)。
  • 值得注意和出乎意料的是,这个过程可以成功地产生与互联网、书籍等中的内容“相似”的文本。ChatGPT不仅能产生连贯的人类语言,而且能根据“阅读”过的内容来“循着提示说一些话”。它并不总是能说出“在全局上有意义”(或符合正确计算)的话,因为(如果没有利用Wolfram|Alpha的“计算超能力”)它只是在根据训练材料中的内容“听起来像什么”来说出“听起来正确”的话。
  • ChatGPT的具体工程非常引人注目。但是,(至少在它能够使用外部工具之前)ChatGPT“仅仅”是从其积累的“传统智慧的统计数据”中提取了一些“连贯的文本线索”。但是,结果的类人程度已经足够令人惊讶了。正如我所讨论的那样,这表明了一些至少在科学上非常重要的东西:人类语言及其背后的思维模式在结构上比我们想象的更简单、更“符合规律”。ChatGPT已经隐含地发现了这一点。但是我们可以用语义语法、计算语言等来明确地揭开它的面纱。ChatGPT在生成文本方面表现得非常出色,结果通常非常类似于人类创作的文本。这是否意味着ChatGPT的工作方式像人类的大脑一样?它的底层人工神经网络结构说到底是对理想化大脑的建模。当人类生成语言时,许多方面似乎非常相似。当涉及训练(即学习)时,大脑和当前计算机在“硬件”(以及一些未开发的潜在算法思想)上的不同之处会迫使ChatGPT使用一种可能与大脑截然不同的策略(在某些方面不太有效率)。还有一件事值得一提:甚至与典型的算法计算不同,ChatGPT内部没有“循环”或“重新计算数据”。这不可避免地限制了其计算能力—即使与当前的计算机相比也是如此,更谈不上与大脑相比了。

 再举几个例子


  • 因此,使用(不能咨询Wolfram|Alpha的)ChatGPT做数学作业可能不是一个好主意。它可以给你一个看似非常可信的答案。
  • 但是如果ChatGPT没有“真正理解数学”,就基本上不可能可靠地得出正确答案。所以,答案又是错误的。
  • ChatGPT甚至可以为“它得出答案的方式”(尽管并不是它所“做”的真正方式)编造一个非常像样的解释。此外,迷人(和有趣)的是,它给出的解释里存在不理解数学的人类可能会犯的错误。
  • ChatGPT似乎在某处正确地学习了这些基础数据,但它并没有充分“理解数据的含义”以正确地排列这些数字。
  • 是的,可以找到一种方法来“修复这个特定的bug”。但问题在于,像ChatGPT这样基于生成语言的AI系统的基本思想并不适用于需要执行结构化计算任务的情况。换句话说,需要“修复”几乎无穷多的“bug”,才能追赶上Wolfram|Alpha以其结构化方式所能实现的几乎无穷小的成就。“计算链”越复杂,就越有可能需要调用Wolfram|Alpha来正确处理。对于下面的问题,ChatGPT给出了一个相当混乱的答案。

 前方的路


  • 前方的路机器学习是一种强大的方法,特别是在过去十年中,它取得了一些非凡的成功— ChatGPT是最新的成功案例。除此之外,还有图像识别、语音转文字、语言翻译……在每个案例中,都会跨越一个门槛—通常是突然之间。一些任务从“基本不可能”变成了“基本可行”。但结果从来不是“完美”的。也许有的东西能够在95% 的时间内运作良好。但是不论怎样努力,它的表现在剩下的5% 时间内仍然难以捉摸。对于某些情况来说,这可能被视为失败。但关键在于,在各种重要的用例中,95% 往往就“足够好了”。原因也许是输出是一种没有“正确答案”的东西,也许是人们只是在试图挖掘一些可能性供人类(或系统算法)选择或改进。拥有数百亿参数的神经网络一次一个标记地生成文本,能够做到ChatGPT所能做的事情,这着实是非同凡响的。鉴于这种戏剧性、意想不到的成功,人们可能会认为,如果能够“训练一个足够大的网络”,就能够用它来做任何事情。但事实并非如此。关于计算的基本事实,尤其是计算不可约的概念,表明它最终是无法做到的。不过不要紧,重点在于我们在机器学习的实际历史中看到的:会取得(像ChatGPT这样的)重大突破,进步不会停止。更重要的是,我们会发现能做之事的成功用例,它们并未因不能做之事受阻。虽然“原始ChatGPT”可以在许多情况下帮助人们写作、提供建议或生成对各种文档或交流有用的文本,但是当必须把事情做到完美时,机器学习并不是解决问题的方法—就像人类也不是一样。这正是我们在以上例子中看到的。ChatGPT在“类人的部分”表现出色,因为其中没有精确的“正确答案”。但当它被“赶鸭子上架”、需要提供精确的内容时,往往会失败。这些例子要表达的重点是,有一种很好的方法可以解决该问题—将ChatGPT连接到Wolfram|Alpha以利用其全部的计算知识“超能力”。在Wolfram|Alpha内部,一切都被转换为计算语言,转换为精确的Wolfram语言代码。这些代码在某种程度上必须是“完美”的,才能可靠地使用。关键是,ChatGPT无须生成这些代码。它可以生成自己常用的自然语言,然后由Wolfram|Alpha利用其自然语言理解能力转换为精确的Wolfram语言。在许多方面,可以说ChatGPT从未“真正理解”过事物,它只“知道如何产生有用的东西”。但是Wolfram|Alpha则完全不同。因为一旦Wolfram|Alpha将某些东西转换为Wolfram语言,我们就拥有了它们完整、精确、形式化的表示,可以用来可靠地计算事物。不用说,有很多“人类感兴趣”的事物并没有形式化的计算表示—尽管我们仍然可以用自然语言谈论它们,但是可能不够准确。对于这些事物,ChatGPT只能靠自己,而且能凭借自己的能力做得非常出色。就像我们人类一样,ChatGPT有时候需要更形式化和精确的“助力”。重点在于,它不必用“形式化和精确”的语言表达自己,因为Wolfram|Alpha可以用相当于ChatGPT母语的自然语言进行沟通。当把自然语言转换成自己的母语— Wolfram语言时,Wolfram|Alpha会负责“添加形式和精度”。我认为这是一种非常好的情况,具有很大的实用潜力。这种潜力不仅可以用于典型的聊天机器人和文本生成应用,还能扩展到像数据科学或其他形式的计算工作(或编程)中。从某种意义上说,这是一种直接把ChatGPT的类人世界和Wolfram语言的精确计算世界结合起来的最佳方式。ChatGPT能否直接学习Wolfram语言呢?答案是肯定的,事实上它已经开始学习了。我十分希望像ChatGPT这样的东西最终能够直接在Wolfram语言中运行,并且因此变得非常强大。这种有趣而独特的情况之所以能成真,得益于Wolfram语言的如下特点:它是一门全面的计算语言,可以用计算术语来广泛地谈论世界上和其他地方的事物。Wolfram语言的总体概念就是对我们人类的所思所想进行计算上的表示和处理。普通的编程语言旨在确切地告诉计算机要做什么,而作为一门全面的计算语言,Wolfram语言涉及的范围远远超出了这一点。实际上,它旨在成为一门既能让人类也能让计算机“用计算思维思考”的语言。许多世纪以前,当数学符号被发明时,人类第一次有了“用数学思维思考”事物的一种精简媒介。它的发明很快导致了代数、微积分和最终所有数学科学的出现。Wolfram语言的目标则是为计算思维做类似的事情,不仅是为了人类,而且是要让计算范式能够开启的所有“计算XX学”领域成为可能。我个人因为使用Wolfram语言作为“思考语言”而受益匪浅。过去几十年里,看到许多人通过Wolfram语言“以计算的方式思考”而取得了很多进展,真的让我喜出望外。那么ChatGPT呢?它也可以做到这一点,只是我还不确定一切将如何运作。但可以肯定的是,这不是让ChatGPT学习如何进行Wolfram语言已经掌握的计算,而是让ChatGPT学习像人类一样使用Wolfram语言,让ChatGPT用计算语言(而非自然语言)生成“创造性文章”,等等。我在很久之前就讨论过由人类撰写的计算性文章的概念,它们混合使用了自然语言和计算语言。现在的问题是,ChatGPT能否撰写这些文章,能否使用Wolfram语言作为一种提供对人类和计算机而言都“有意义的交流”的方式。是的,这里存在一个潜在的有趣的反馈循环,涉及对Wolfram语言代码的实际执行。但至关重要的是Wolfram语言代码所代表的“思想”的丰富性和“思想”流—与普通编程语言中的不同,更接近ChatGPT在自然语言中“像魔法一样”处理的东西。换句话说,Wolfram语言是和自然语言一样富有表现力的,足以用来为ChatGPT编写有意义的“提示”。没错,Wolfram语言代码可以直接在计算机上执行。但作为ChatGPT的提示,它也可以用来“表达”一个可以延续的“想法”。它可以描述某个计算结构,让ChatGPT“即兴续写”人们可能对于该结构的计算上的说法,而且根据它通过阅读人类写作的大量材料所学到的东西来看,这“对人类来说将是有趣的”。ChatGPT的意外成功突然带来了各种令人兴奋的可能性。就目前而言,我们能马上抓住的机会是,通过Wolfram|Alpha赋予ChatGPT计算知识超能力。这样,ChatGPT不仅可以产生“合理的类人输出”,而且能保证这些输出利用了封装在Wolfram|Alpha和Wolfram语言内的整座计算和知识高塔。

 来自微信读书
 
 

d7f1dc4f0649c64a6827d3840a77290

 

posted @ 2025-09-21 01:45  中华第一大可爱  阅读(3)  评论(0)    收藏  举报
1 1