文章目录
- 前言
- 一、ChatGPT是什么?
- 二、那么,如何计算下一个单词的概率?
- 三, 什么是模型?
- 四,如何制作能完成人类任务的模型
- 五,神经网络
- 总结
前言
ChatGPT 能够自动生成类似于人类写作的文本,这一点非常引人注目,也令人意外。但它是如何实现的?为什么它能够如此出色地生成我们认为有意义的文本?我的目的是在这里概述ChatGPT内部的运行情况,并探讨它能够如此出色地产生有意义文本的原因。
首先需要解释的是,ChatGPT的基本目标是尝试产生一个“合理的延续”,无论它当前所拥有的文本是什么。这里的“合理”是指“在浏览了数十亿网页等人类书写的内容后,人们可能会写什么”。
那么假设我们有文本“AI的牛逼之处在于它能够…”,我们可以想象一下扫描数十亿页人类写作的文本(比如在网上和数字化的书籍中),找到所有这个文本的实例,然后看下一个单词出现的频率是多少。ChatGPT实际上是在类似地寻找在某种意义上“匹配”的内容,以生成一个排名列表,列出可能的后续单词和相应的“概率”。
提示:以下是本篇文章正文内容,下面案例可供参考
一、ChatGPT是什么?
ChatGPT写作时的一个显著特点是,它实际上只是一遍又一遍地问自己:“在当前文本的情况下,下一个词应该是什么?”然后每次添加一个单词。更准确地说,它添加的是一个“标记”,可能只是一个单词的一部分,这就是它有时可以“创造新词”的原因。
好的,在每一步中,ChatGPT都会得到一个带有概率的单词列表。但是它应该选择哪个单词来添加到正在撰写的文章(或其他文本)中呢?也许人们认为应该选择“排名最高”的单词(即被分配最高“概率”的单词)。但是这就是玄学开始的地方。因为某种原因(也许有一天我们会对此有科学式的理解),如果我们总是选择排名最高的单词,我们通常会得到一个非常“平淡”的文章,似乎从未“展现出任何创意”(有时甚至是逐字重复)。但是,如果有时(随机地)选择排名较低的单词,我们就会得到一个“更有趣”的文章。
这里有随机性,这意味着如果我们多次使用相同的问题提问,每次都可能得到不同的回答。同时,存在一个特定的所谓“temperature”参数,它决定了低排名单词被使用的频率。对于文章生成来说,实践中发现使用“temperature”为0.8最佳。(需要强调的是,这里没有运用任何“理论”;这只是经验上被发现的有效方法。)
在继续之前,我需要说明的是,出于阐述的目的,我通常不会使用ChatGPT中的完整系统,而是使用更简单的GPT-2系统。该系统有一个很好的特点,即其大小足够小,可以在标准台式计算机上运行。
例如,以下是获取上述概率表格的步骤。首先,我们需要检索底层的“语言模型”神经网络:
稍后,我们将会深入探讨这个神经网络,并讲解它是如何工作的。但现在,我们可以把这个“网络模型”视为黑匣子,应用到我们目前的文本中,并请求该模型认为应该跟随的前五个概率最高的单词:
这个步骤将结果转换为一个格式明确的“数据集”:
如果反复“应用模型”,每一步都添加具有最高概率的单词(在此代码中指定为模型的“决策”),则会发生以下情况:
每次执行时,会做出不同的随机选择,因此文本也会不同。以下是5个示例:
二、那么,如何计算下一个单词的概率?
好的,ChatGPT总是根据概率选择下一个单词。但是这些概率从哪里来呢?让我们从一个更简单的问题开始,考虑逐个字母(而不是单词)生成英语文本。如何确定每个字母的概率呢?
我们可以采取的最简单的方法就是从英文文本中随机取样,并计算不同字母的出现频率。例如,以下是在“猫”(Cat)维基百科文章中计算字母出现次数的结果:
—这是我们只是根据这些概率生成字母序列时得到的样本:
图片
我们可以通过将空格模拟为字母添加进可选项中,从而将这些序列分为多个“单词”组成的序列:
图片
我们可以通过让“单词长度”的分布与英语中的分布一致来更好地模拟“单词”的生成过程:
图片
这里我们没有得到任何“实际单词”,但结果看起来稍微好了一点。但是,要进一步往下,我们需要做的不仅仅是随机选择每个字母。
例如,我们知道如果有一个“q”,下一个字母基本上必须是“u”。
面这张图展示了英语文本中一对字母(“2-grams”)的概率
分布。图表的横轴为可能的第一个字母,纵轴为可能的第二个字母:
我们可以看到,例如,“q”列除了“u”行之外为空(概率为零)。好的,现在,我们不再一个字母一个字母地生成我们的“单词”,而是使用这些“2-gram”概率,一次生成两个字母来生成它们。以下是结果的一个样本 - 其中恰好包括一些真实存在的单词:
通过足够多的英文文本,我们不仅可以对单个字母或字母对(2-grams)的概率进行相当准确的估计,还可以对更长的字母序列进行估计。如果我们使用逐渐更长的n-gram概率生成“随机单词”,我们会发现它们逐渐变得“更真实”。
让我们现在假设 - 就像 ChatGPT 一样 - 我们处理的是整个单词,而不是单个字母。英语中大约有40,000个常用单词。通过查看大量的英语文本(例如几百万本书,总共几千亿个单词),我们可以估计每个单词的使用频率。利用这个估计,我们可以开始生成“句子”,其中每个单词都是独立随机选择的,其出现概率与在文本语料库中的出现概率相同。以下是我们得到的一个样本:
三, 什么是模型?
假设你想知道(就像加利略在16世纪晚期那样)从比萨斜塔的每层落下的炮弹需要多长时间才能落到地面。那么,你可以在每种情况下进行测量并制作结果表。或者你可以做理论科学的本质:建立一个模型,给出一些计算答案的过程,而不是仅仅测量和记忆每种情况。
让我们想象我们有(有些理想化的)数据,了解炮弹从不同楼层掉落需要多长时间:
我们如何计算出从我们没有明确数据的楼层掉落所需的时间?在这种特定情况下,我们可以使用已知的物理定律来计算。但是假设我们只有数据,而不知道其背后的规律是什么。那么我们可以做出一个数学猜测,例如,也许我们应该使用一条直线作为模型:
我们可以选择不同的直线,但这条直线平均来看最接近我们所给的数据。从这条直线中,我们可以估计任何一层的落地时间。
我们如何知道在这里尝试使用一条直线呢?在某种程度上,我们并不确定。这只是数学上的一些简单东西,而且我们已经习惯了我们所测量的很多数据能够被数学上的简单事物很好地拟合。当然,我们也可以尝试使用数学上更复杂的东西,例如a + bx + cx^2,在这种情况下,我们可以得到更好的拟合效果:
永远不存在“model-less model”。您使用的任何模型都具有某些特定的基本结构,然后有一定数量的“旋钮可供调节”(即可以设置的参数)来拟合您的数据。在ChatGPT的情况下,使用了许多这样的“旋钮”——实际上有1750亿个。
值得注意的是,相比于3-grams的60万亿的组合可能性,ChatGPT 的这1750亿个参数,却已足够生成让我们惊讶的文本。
四,如何制作能完成人类任务的模型
我们上面给出的例子涉及到制作数值数据模型,这些数据基本上来自于简单的物理,是几个世纪以来我们已经知道的“简单数学”。但是对于ChatGPT,我们必须制作一种人类大脑产生的语言文本模型。对于这样的任务,我们还没有类似于“简单的数学”工具。那么,这个模型可能是什么样子的呢?
在讨论语言之前,我们先来谈谈另一个类似于人类任务:图像识别。作为一个简单的例子,我们考虑数字图像识别(这是一个经典的机器学习例子)。
首先,我们给每个数字收集一堆样本图像:
然后,为了找出我们输入的图像是否对应于特定的数字,我们可以使用样本图像进行像素逐个比较。但是作为人类,我们显然比像素逐个比较样本更擅长数字识别,因为即使数字是手写的,或者存在各种修改和扭曲,我们仍能够识别它们。
但是这里真正发生了什么?假设我们逐渐模糊一个数字。一段时间内,我们的函数仍然可以“识别”它,例如这里被识别为“2”。但很快它就“失去了”,开始给出“错误”的结果:
但是,究竟发生了什么呢?假设我们逐渐模糊一个数字。在一段时间内,我们的函数仍然可以“识别”它,比如说是“2”。但很快,它就会“失效”,并开始给出“错误”的结果。
但是,我们为什么认为这是“错误”的结果呢?在这种情况下,我们知道我们通过模糊“2”来得到所有这些图像。但如果我们的目标是生成一个能够模拟人类识别图像能力的模型,那么真正需要问的问题是:如果向人类展示这些模糊的图像,而他们并不知道这些图像是如何产生的,那么人类会如何做出判断?
如果我们的函数得到的结果通常与人类的结果一致,那么我们就拥有了一个“好的模型”。而这个非常重要的科学事实是,对于像这样的图像识别任务,我们现在基本上知道如何构造这样的函数。
我们能否“数学证明”它们的有效性?嗯,不行。因为要做到这一点,我们必须拥有一个关于人类视觉感知的数学理论。我们拿“2”图像并改变几个像素。我们可能想象,即使只有几个像素“错位”,我们仍然应该认为这是一个“2”。但这该怎样才算合理呢?这是一个关于人类视觉感知的问题。是的,对于蜜蜂或章鱼,答案无疑会有所不同。
五,神经网络
那么,像图像识别这样的任务,我们的典型模型实际上是如何工作的呢?最流行且最成功的当前方法使用神经网络。神经网络的发明可以看作是大脑如何工作的简单理想化,而它们的形式与现在的使用方式非常接近。
人脑中大约有1000亿个神经元(神经细胞),每个神经元都能够每秒产生一千次的电脉冲。这些神经元以复杂的网络连接在一起,每个神经元都有树状的分支,使其能够向成千上万个其他神经元传递电信号。在粗略的近似中,任何给定神经元是否在某一时刻产生电脉冲取决于它从其他神经元接收到的脉冲,不同的连接会以不同的“权重”进行贡献。
当我们“看到图像”时,光子从图像中落在我们眼睛后面的(“光感受器”)细胞上,这些细胞会在神经细胞中产生电信号。这些神经细胞与其他神经细胞相连接,最终信号经过一系列神经元层次的传递。在这个过程中,我们“识别”图像,最终“形成思想”,认为我们“看到了一个2”(或许最终会像大声说“two”这样的动作)。
前一节中的“黑匣子”函数是这种神经网络的“数学化”版本。它恰好有11个层次(虽然只有4个“核心层”):
这个神经网络并没有什么特别“理论推导”的地方;它只是在1998年作为一项工程构建而成,并被发现可以工作。(当然,这与我们可能会描述我们的大脑是通过生物进化的过程产生的并没有太大的不同。)
好的,但是这样的神经网络如何“识别事物”呢?关键是"吸引子"的概念。想象一下我们有手写的1和2的图像:
我们希望所有的1“被吸引到一个地方”,所有的2“被吸引到另一个地方”。换句话说,如果一幅图像在某种程度上“更接近1”而不是2,我们希望它最终进入“1的位置”,反之亦然。
一个直观的类比,假设我们有平面上的某些位置,用点表示(在现实中,它们可能是咖啡店的位置)。然后我们可以想象,从平面上的任何一个点开始,我们总是想到达最近的点(也就是去最近的咖啡店)。我们可以通过将平面划分为由理想化的分隔区域来表示这一点:
所以我们可以将这看作是实现了一种“识别任务”,我们不是像识别给定图像最像哪个数字那样做某些事情,而是直接看哪个点最接近。
那么如何使神经网络“执行识别任务”呢?让我们考虑这个非常简单的情况:
总结
ChatGPT的基本概念在某种程度上相当简单。从网络、书籍等来源中获取大量人类创造的文本样本,然后训练神经网络生成“类似”的文本。特别地,使它能够从“提示”开始,然后继续生成“与它所受过的训练相似”的文本。
正如我们所见,ChatGPT中的实际神经网络由非常简单的元素组成。神经网络的基本操作也非常简单,本质上是对每个新单词(或单词的一部分)生成文本时,对其已生成的文本产生的输入“通过其元素”(没有任何循环等)进行一次传递。
但是,这个过程的卓越而意想不到的一点是,它可以产生成功“类似”网络、书籍等中存在的文本。它不仅是连贯的人类语言,而且“说出”了“遵循提示”的事情,利用它所“读取”的内容。它并不总是说出“全局上有意义”的话(或与正确的计算相符),它只是根据它训练材料中的内容“听起来对”的话。
ChatGPT的具体工程设计使其相当令人信服。但是,至少在它可以使用外部工具之前,它“仅仅”是从其积累的“传统智慧的统计数据”中提取出一些“连贯的文本线索”。但是,其结果与人类产生的非常相似,这很令人惊奇。正如我所讨论的,这表明某些东西至少在科学上非常重要:人类语言(及其背后的思维模式)在其结构上比我们想象的更简单、更“法则化”。ChatGPT已经隐式地发现了这一点。但我们可以通过语义语法、计算语言等,可能会明确地暴露它。
ChatGPT在生成文本方面所做的工作非常令人印象深刻,其结果通常与我们人类产生的非常相似。那么,这是否意味着ChatGPT像大脑一样工作?其基本的人工神经网络结构最终是以大脑的理想化模型为基础建模的。而且很可能当我们人类生成语言时,许多方面的情况非常相似。
但是,值得注意的是,尽管 ChatGPT 在生成文本方面表现出人类的能力,但其实现方式与大脑有所不同。与人类的大脑和当前计算机的“硬件”有所不同,ChatGPT 不得不采用一种可能非常不同(在某些方面更少效率)的策略进行训练(也就是学习)。此外,还有一点:与典型算法计算中的情况不同,ChatGPT 没有内部的“循环”或“重新计算数据”。这必然限制了它的计算能力,甚至对于当前的计算机也是如此,但对于大脑来说,更是如此。
但就目前而言,看到 ChatGPT 已经能够做到的事情令人兴奋。从某种程度上说,它是基本科学事实的一个很好的例子,即大量的简单计算元素可以做出引人注目和出乎意料的事情。但它也提供了我们在两千年里最好的推动力,去更好地理解人类语言以及其背后的思维过程的基本特征和原则。
总之,ChatGPT 是一种极其强大的自然语言生成系统,它的训练过程基于大量的人类语言文本样本,并采用了深度学习技术。尽管其基本结构与人类大脑的工作方式有所不同,但它已经展示了大量简单计算元素的组合可以产生出令人惊讶的结果。这为我们深入理解人类语言和思维模式的本质提供了有力的推动。