ChatGPT在做什么?它为什么有效?

翻译:ChatGPT,DeepL,dingtingli(公众号:dingtingli-pub)

ChatGPT能够自动生成读起来像是人类写作的文本是非常卓越和出人意料的。但是它是如何做到的呢?它为什么能够如此出色地生成我们认为是有意义的文本?

我的目的是给出ChatGPT内部发生了什么的大致轮廓,然后探讨为什么它能够在生成有意义的文本方面表现得如此出色。

首先要解释的是,ChatGPT从根本上说,总是试图产生与其已有文本的“合理延续”,其中“合理”意味着“看到人们在数十亿个网页上已经写的内容后,可能期望有人写下这个延续”。

假设我们有文本“ThebestthingaboutAIisitsabilityto”。想象一下扫描了数十亿页人类写作的文本(例如在网络和数字化图书中),找到所有包含这个文本的实例,然后看看下一个单词出现的频率是多少。

ChatGPT实际上做了类似的事情,但是它并不看实际文本;它只是在寻找某种意义上“匹配”的内容。最终结果是,它生成了一个可能的跟随单词的排名列表,以及“概率”:

在继续之前,我应该解释一下,为了论述的目的,我在大多数情况下不会使用完整的ChatGPT系统;相反,我通常会使用更简单的GPT-2系统。其优点是足够小,可以在标准的台式计算机上运行。因此,对于我展示的所有内容,都可以立即在台式计算机上运行的明确的Wolfram语言代码来执行。

例如,以下是如何获取上面的跟随单词的排名概率表。首先,我们必须检索底层的“语言模型”神经网络:

稍后,我们会深入探讨这个神经网络的内部运作。但现在,我们可以将这个“网络模型”看作一个黑盒子,应用到我们的文本中,并要求模型返回概率最高的前五个单词。

将结果转换为一个明确的格式化的“数据集”:

这里展示了如果反复“应用该模型”的结果——每一步都添加具有最高概率的单词(在此代码中指定为模型的“决策”):

如果继续向后增加呢?在这种“零温度”的情况下,输出很快就变得混乱而重复:

但是,如果我们不总是选择“最高”的单词,而是有时随机选择“非最高”的单词(其中的“随机性”对应于“温度”0.8),会发生什么呢?同样地,我们可以构建文本:

每次进行这种操作时,都会做出不同的随机选择,生成的文本都会不同,就像这5个例子:

值得指出的是,即使在第一步,在温度0.8下也有很多可能的“下一个单词”可以选择,尽管它们的概率很快下降(是的,在这个对数-对数图上的直线对应于一个n-1的“幂律”衰减,这是语言的一般统计特征)。

那么,如果我们继续写下去会发生什么呢?以下是一个随机例子。它比“top-word”(零温度)情况要好,但仍然有点奇怪:

这是用最简单的GPT-2模型(来自2019年)完成的。使用更新和更大的GPT-3模型,结果更好。以下是在相同的“提示(prompt)”下使用最大的GPT-3模型生成的“top-word”(零温度)文本:

这是一个在“温度0.8”下的随机例子:

好的,ChatGPT总是基于概率选择下一个单词。但这些概率从哪里来?让我们从一个更简单的问题开始。我们考虑逐个字母(而不是单词)生成英文文本。我们如何确定每个字母的概率?

这里是我们只用这些概率生成字母序列,得到一个样例:

我们可以通过某些概率向字母序列中添加空格,将其分解为“单词”:

我们可以通过强制将单词长度的分布与英语中的分布相一致来略微提高制造“单词”的效果:

我们这里没有得到任何“实际单词”,但结果看起来略微更好了。要进一步进行,我们需要做的不仅仅是随机地挑选每个字母。我们知道,例如,如果我们有一个“q”,下一个字母基本上必须是“u”。

这是一个字母概率的图:

这是一个典型的英文文本中字母对(“2-grams”)概率的图。第一个可能的字母显示在页面上,第二个字母在页面下方:

我们在这里看到,“q”列是空白的(零概率),除了“u”行之外。现在,我们不再是逐个字母地随机生成“单词”,而是使用这些“2-gram”概率来逐“两个字母”地生成它们。这里是结果的一个样本——其中包括一些“实际单词”:

通过足够多的英文文本,我们不仅可以获得单个字母或字母对(2-grams)的概率估计,还可以获得更长的字母对的概率估计。如果我们使用越来越长的n-gram概率生成“随机单词”,我们将看到它们逐渐变得“更逼真”。

假设我们处理的是整个单词,而不是字母,就像ChatGPT那样。英语中大约有40,000个常用单词。通过查看大量的英文文本(比如几百万本书,总共几百亿个单词),我们可以估计每个单词的出现频率。然后,我们可以开始生成“句子”,其中每个单词都是独立地随机选择的,它出现的概率跟语料库中出现的概率相同。这是我们得到的一个示例:

毫不奇怪,这是无意义的。那么我们怎么才能做得更好呢?就像处理字母一样,我们可以开始考虑不仅是单个单词的概率,还有单词对或更长的单词序列n-grams的概率。对于单词对,以下是从单词“cat”开始的5个示例:

那么我们该怎么办呢?最大的想法是制定一个模型,即使我们从未在我们查看的文本语料库中明确看到过这些序列,我们也能够估计序列发生的概率。而ChatGPT的核心,正是一个被称为“大型语言模型”(LLMlargelanguagemodel)的模型,它的构建能够很好地估计这些概率。

嗯,你可以在每种情况下测量它,并制作一个结果表。或者,你可以做理论科学的本质:制作一个模型,提供一种计算答案的过程,而不仅仅是测量并记住每种情况。

在这种情况下,我们可以使用已知的物理定律来计算。但是假设我们只有数据,不知道什么样的基础规律支配它。那么,我们可能会进行数学猜测,比如也许我们应该使用一条直线作为模型:

我们怎么知道要在这里尝试使用一条直线呢?

在某种程度上,我们并不知道。这只是数学上的简单方法,我们习惯了许多我们测量的数据都可以用数学上简单的方法来拟合。我们可以尝试更复杂的数学方法,比如a+bx+cx^2,然后在这种情况下更加拟合:

然而,事情也可能出错。就像这里用a+b/x+csin(x)能做到的最好效果:

值得理解的是,永远没有“无模型的模型”。你使用的任何模型都具有特定的基本结构,然后是一组“旋钮”(即可以设置的参数),以适应你的数据。在ChatGPT的情况下,使用了许多这样的“旋钮”——实际上有1750亿个。

上面提到的例子涉及创建一个基于简单物理学的数字数据模型,我们已经知道“简单数学适用”的事实数百年了。但是对于ChatGPT来说,我们必须创建一种人脑所产生的类似于人类语言文本的模型。对于这样的任务,我们(至少目前)没有任何类似于“简单数学”的东西。那么这种模型会是什么样子呢?

在谈论语言之前,让我们谈谈另一个人类任务:识别图像。作为这方面的一个简单示例,让我们考虑数字图像(是的,这是一个经典的机器学习示例):

我们可以做的一件事是,为每个数字获取一堆示例图像:

然后,为了找出我们所给定的输入图像是否对应于特定的数字,我们只需与我们拥有的示例进行明确的逐像素比较。

但是作为人类,我们似乎要做得更好——因为即使它们是手写的,并且有各种修改和扭曲,我们仍然可以识别数字:

当我们为上面的数字数据创建模型时,我们能够获取给定的数值x,并仅为特定的a和b计算a+bx。因此,如果我们将这里每个像素的灰度值视为某个变量xi,那么是否存在某个包含所有这些变量的函数,当进行评估时,告诉我们图像所属的数字是什么?

事实证明,可以构造这样的函数。而且毫不意外的是,它不是特别简单,典型的示例可能涉及大约50万次的数学运算。

最终的结果是,如果我们将图像的像素值集合输入到此函数中,就会输出指定图像所对应的数字。

稍后,我们将讨论如何构造这样的函数和神经网络的概念。但是现在,让我们将该函数视为黑盒子,我们将手写数字的图像(即像素值数组)输入到其中,我们将得到这些图像对应的数字:

但是这里真正发生了什么?

为什么我们会说这是“错误”的结果呢?

如果我们的函数产生的结果通常与人类的判断相一致,那么我们就拥有了一个“好模型”。一个非常了不起的科学事实是,对于这样一个图像识别任务,我们现在基本上知道,如何来构建一个函数完成这项任务了。

但是,我们能“从数学上证明”它们有效吗?答案是否定的。

因为要做到这一点,我们必须有一个关于人类在进行这个任务时所做的事情的数学理论。

拿“2”图像为例,如果改变几个像素。我们可能想象,即使有几个像素“错位”,我们仍然应该认为这是一个“2”。但这样的错位应该持续多久呢?这是一个关于人类视觉感知的问题。是的,对于蜜蜂或章鱼,答案无疑是不同的,对于假想的外星人来说,答案可能完全不同。

好吧,那么我们在图像识别等任务中的典型模型究竟是如何工作的呢?

目前最流行且最成功的方法使用神经网络。在20世纪40年代,神经网络以一种与今天的应用非常接近的形式被发明出来,可以被视为大脑工作方式的简单理想化。

人类大脑中有大约1000亿个神经元(神经细胞),每个神经元可以产生高达每秒1000次的电脉冲。这些神经元以复杂的方式连接成一个网,每个神经元都具有树状分支,允许它向可能的数千个神经元传递电信号。简单地说,任何给定的神经元在给定时刻是否产生电脉冲取决于它从其他神经元接收到的脉冲,不同的连接会以不同的“权重”进行贡献。

当我们“看到一张图片”时,所发生的事情是:当来自图像的光子落在我们眼睛后面的“光感受器”细胞上时,它们会在神经细胞中产生电信号。这些神经细胞连接到其他神经细胞,最终信号通过一整个神经元层的序列。在这个过程中,我们“认识了”这张图片,最终“形成了这样一个想法,即我们看到了一个2”(也许最后会大声说出“2”这个词)。

前面一节的“黑匣子”函数就是这样一个神经网络的“数学化”版本。它恰好有11层(虽然只有4个“核心层”):

这个神经网络没有什么特别的“理论推导”;它只是在1998年作为一件工程构造出来的,并被发现能够工作(当然,这与我们描述我们的大脑是通过生物进化过程产生的结果并没有太大的不同)。

但这样的神经网络如何“认识”事物呢?关键在于吸引器(attractors)这个概念。想象一下,我们有一些手写的1和2的图像:

我们希望所有的1都“被吸引到一个地方”,所有的2都“被吸引到另一个地方”。或者换句话说,如果一张图像在某种程度上“更接近于1”而不是2,我们希望它最终进入“1的位置”,反之亦然。

作为一个直接的比喻,我们假设平面上有某些点(在现实生活中,它们可能是咖啡店的位置)。然后我们可以想象,从平面上的任何点开始,我们总是想要到达最近的点(即我们总是去最近的咖啡店)。我们可以通过将平面分成由理想化的“分水岭”分隔的区域(“吸引器盆地”)来表示这一点。

我们可以将这种情况视为实现一种“识别任务”,我们不是做识别给定的图像“最像哪个数字”这样的事情,而是直接地看出给定点最接近哪个点。(我们在这里展示了“Voronoi图”设置将二维欧几里得空间中的点分开;可以将数字识别任务视为做非常相似的事情,但是是在由每个图像中所有像素的灰度等级形成的784维空间中进行的。)

那么我们如何让神经网络“执行一个识别任务”呢?让我们考虑这个非常简单的情况:

我们的目标是获取一个对应于{x,y}位置的“输入”,然后将其“识别”为它最接近的三个点中的任何一个。换句话说,我们希望神经网络计算出像这样的{x,y}的函数:

那么我们如何使用神经网络做到这一点?归根结底,神经网络是一个连接在一起的理想化“神经元”集合,通常按层排列,一个简单的例子是:

每个“神经元”都被有效地设置为评估一个简单的数值的函数。为了“使用”网络,我们只需在顶部输入数字(如我们的坐标x和y),然后让每层的神经元“评估它们的函数”,并通过网络向前传递结果,最终在底部产生最终结果。

在传统的设置中,受生物的启发,每个神经元实际上都有一组来自上一层神经元的“传入连接”,每个连接都被赋予一定的“权重”(可以是一个正数或负数)。一个给定的神经元的值是通过将“前一个神经元”的值乘以其相应的权重,然后加上一个常数,并最终应用一个“阈值化”(或“激活”)函数来确定的。

在数学术语中,如果神经元具有输入x={x1,x2...},那么我们计算f[w.x+b],其中权重w和常数b通常为网络中的每个神经元选择不同的值。函数f通常是相同的。

计算w.x+b只是矩阵乘法和加法问题。激活函数f引入了非线性(最终导致了非凡的行为)。通常会使用各种不同的激活函数;在这里我们将使用斜坡函数Ramp(或ReLU):

对于我们希望神经网络执行的每个任务(或者说,我们希望它评估的每个整体函数),我们都将有不同的权重选择。(正如我们将在稍后讨论的那样,这些权重通常是通过使用机器学习从我们想要的输出示例中“训练”的神经网络来确定的。)

最终,每个神经网络只对应于某个整体的数学函数——尽管编写可能有些混乱。对于上面的示例,它将是:

ChatGPT的神经网络也只是对应于这样的数学函数———但实际上有数十亿个项。

让我们回到单个神经元。以下是具有两个输入(表示坐标x和y)的神经元在选择各种不同的权重和常数(以及斜坡函数Ramp作为激活函数)计算的一些示例:

上面的更大的网络呢?嗯,这是它计算的结果:

它不是完全“正确”,但它接近我们上面展示的“最近点”函数。

让我们看看其他一些神经网络会发生什么。在每种情况下,正如我们稍后将解释的那样,我们使用机器学习来找到最佳权重选择。然后我们在这里显示具有这些权重的神经网络的计算结果:

更大的网络通常更能够接近我们想要的函数。在每个吸引盆地的“中心”,我们通常得到我们想要的确切答案。但在边界处——当神经网络“很难做出决定”时——情况可能会更混乱。

对于这种简单的数学风格的“识别任务”,“正确答案”显而易见。但是在识别手写数字的问题中,就不那么清楚了。

如果有人将“2”写得很糟糕,看起来像“7”等等,怎么办?尽管如此,我们还是可以询问神经网络是如何区分数字的——这就给出了一个提示:

我们能够“从数学上”说明神经网络如何进行区分吗?其实不行。它只是“执行神经网络所做的操作”。但事实证明,这通常与我们人类所做出的区分相当一致。

让我们来举一个更详细的例子。假设我们有猫和狗的图像。我们训练了一个神经网络来区分它们。以下是它在一些例子上可能会做的事情:

现在,“正确答案”更加不清楚了。如果狗穿着猫形的衣服呢?等等。

无论给它什么输入,神经网络都会生成一个答案。而且,事实证明,它的方式与人类的方式相当一致。正如我之前所说的,这不是我们可以“从第一原理中推导出来的”事实。这只是一些在某些领域中经验性发现为真的东西。但这也是神经网络有用的关键原因:它们以某种“类似人类”的方式做事情。

给你自己展示一张猫的图片,并问“为什么那是一只猫?”你可能会开始说“嗯,我看到它的尖耳朵等等”。但是很难解释你是如何认出这张图像的。只是你的大脑以某种方式找到了答案。

但对于大脑来说,没有(至少现在还没有)一种方法可以“进入内部”并查看它是如何找到答案的。那么对于(人工)神经网络呢?当你展示一张猫的图片时,每个“神经元”所做的事情很容易看出来。但是即便是要获得一个基本的可视化,通常也非常困难。

在上述我们用于“最近点”问题的最终神经网络中,有17个神经元。在识别手写数字的网络中有2190个。而在我们用于识别猫和狗的网络中有60,650个。通常,很难可视化相当于60,650维空间的东西。但是因为这是一个用于处理图像的网络,它的许多神经元层都被组织成数组,就像它所查看的像素数组一样。

如果我们用一个典型的猫的图像:

那么我们可以通过一系列导出的图像表示第一层神经元的状态,其中许多图像我们可以很容易地解释为“没有背景的猫”或“猫的轮廓”这样的东西:

但是到第10层时,很难解释正在发生什么:

但是总的来说,我们可以说神经网络“挑选出某些特征”(比如尖耳朵),并利用这些特征来确定图像是什么。但这些特征是否有名称,比如“尖耳朵”?大多数情况下没有。

我们的大脑是否使用类似的特征?大多数情况下我们不知道。但是值得注意的是,像我们在这里展示的神经网络的前几层,似乎挑选出了图像的某些方面(如物体的边缘),这些方面好像与大脑的视觉处理的第一层所选出的类似。

但是假设我们想要一个关于神经网络中猫识别的“理论”。我们可以说:“看,这个特定的网络可以做到”——这立即给我们一些关于“问题难度”的感觉(例如需要多少神经元或层)。至少到目前为止,我们没有一种“叙述性描述”网络正在做什么的方法。也许这是因为它确实是在计算上是不可简化的,没有一般的方法可以找到它做了什么,除了显式地跟踪每个步骤。或者可能只是因为我们还没有“找出科学”,没有确定的“自然法则”,使我们能够总结发生了什么。

当我们讨论使用ChatGPT生成语言时,我们将遇到相同的问题。同样不清楚是否有方法“总结它正在做什么”。但是语言的丰富性和细节(以及我们对它的经验)可能比图像更进一步。

到目前为止,我们一直在谈论“已经知道”如何执行特定任务的神经网络。但是神经网络之所以如此有用(在大脑中也是如此),不仅在原则上可以执行各种任务,而且还可以逐步“从示例中训练”来执行这些任务。

当我们制作一个神经网络来区分猫和狗时,我们不必有效地编写一个程序(比如说)明确找到胡须;相反,我们只需展示许多猫和狗的示例,然后让网络从这些示例中“机器学习”如何区分它们。

而且关键是,训练过的神经网络从它展示的特定示例中“概括”。正如我们上面所见,网络并不仅仅是识别它所展示的示例猫图像的特定像素模式;相反,神经网络以某种“一般猫”的标准管理着图像的区别。

那么神经网络训练究竟是如何工作的呢?本质上,我们一直试图找到使神经网络成功复制我们所给出示例的权重。然后,我们依靠神经网络以“合理”的方式在这些示例“之间”进行“插值”(或“概括”)。

让我们来看一个比上面更简单的问题。我们尝试让神经网络学习函数:

对于这个任务,我们将需要一个只有一个输入和一个输出的网络,如下所示:

但是,我们应该使用什么权重等?对于每组可能的权重,神经网络将计算某个函数。例如,下面是使用几组随机选择的权重所做的工作:

是的,我们可以清楚地看到,在这些情况下,它甚至都没有接近复制我们想要的函数。那么我们如何找到能够复制该函数的权重?

基本思想是提供大量的“输入→输出”示例以“学习”——然后尝试找到可以复制这些示例的权重。下面是使用逐渐增加的示例完成此操作的结果:

在“训练”中的每个阶段,神经网络中的权重逐步调整——我们看到最终获得了成功复制所需函数的网络。那么我们如何调整权重呢?基本思想是在每个阶段中查看“距离我们所需的函数有多远”,然后以更接近的方式更新权重。

为了找出“我们离目标还有多远”,我们计算通常被称为“损失函数”(有时称为“成本函数”)的函数。

在这里,我们使用简单的(L2)损失函数,它只是我们得到的值和真实值之间差值平方的总和。随着我们的训练过程不断进行,我们发现损失函数逐渐减小(遵循不同任务的不同“学习曲线”)———直到我们达到了一个点,在这个点上,神经网络(至少近似)成功地重现了我们想要的函数。

好的,现在我们解释最后一个关键点,即如何调整权重以减少损失函数。

正如我们所说,损失函数给出了我们得到的值和真实值之间的“距离”。但是,“我们得到的值”在每个阶段都由当前版本的神经网络和其中的权重决定。现在假设权重是变量,比如wi。我们想要找出如何调整这些变量的值,使得取决于这些变量的损失最小。

例如,假设(极度简化了实际使用的典型神经网络)我们只有两个权重w1和w2。那么我们可能会有一个损失函数,它作为w1和w2的函数看起来像这样:

数值分析提供了各种技术,以在这种情况下找到最小值。但是,典型的方法是从先前的w1,w2开始,逐步遵循最陡峭的下降路径:

就像水流从山上流下一样,这个过程保证的只是最终到达表面的某个局部最小值(“山中湖泊”);它可能无法达到最终的全局最小值。

很明显,在“权重景观”上找到最陡峭的下降路径是不可行的。但是,微积分拯救了我们。

上面的图片展示了我们可能需要在只有两个权重的简单情况下进行的最小化工作。

换句话说,有时使用神经网络解决更复杂的问题可能比解决更简单的问题更容易,这似乎有些违反直觉。

这种现象的大致原因可能在于,当有许多“权重变量”时,就有了高维空间和“许多不同的方向”,可以引导我们走向最小值。而当变量较少时,容易陷入局部最小值(“山湖”)中,没有“方向可走”。

值得指出的是,在典型情况下,有许多不同的权重集合将给出几乎具有相同性能的神经网络。通常在实际神经网络训练中会进行许多随机选择,这些选择会导致“不同但等效的解决方案”,如下图所示:

但是,每个这样的“不同解决方案”都会具有至少稍微不同的行为。如果我们要求在我们给出训练示例的区域之外进行“外推”,我们可能会得到截然不同的结果:

但是,哪个是“正确的”呢?真的没有办法说。它们都与观察到的数据“一致”。但它们都对应于不同的“固有”方式,用于“思考”如何在“盒子外”做事。对于我们人类来说,有些可能比其他的看起来“更合理”一些。

特别是在过去的十年里,神经网络训练技术有了很多进展。而且,是的,这基本上是一门艺术。

有时,特别是回顾过去的时候,人们至少可以看到正在做的事情有一丝“科学解释”的影子。但是大多数情况下,这些技术是通过不断试错,添加想法和技巧来发现的,并逐渐建立了相当多的关于如何使用神经网络的经验。

它主要由几个关键部分组成:

越来越多的情况下,我们不是从头开始训练神经网络:新的神经网络可以直接融合另一个已经训练好的网络,或者至少可以使用该网络生成更多的训练样本。

有人可能认为,对于每种特定类型的任务,都需要使用不同的神经网络结构。

但是人们发现,即使对于明显不同的任务,相同的神经网络结构通常也可以使用。

在某种程度上,这让人想起了通用计算的概念(以及我的“计算等价原理”),但是,正如我稍后将讨论的那样,我认为这更反映了我们通常试图让神经网络执行的任务是“类似人类”的任务,而神经网络可以捕捉相当通用的“类似人类的过程”。

在早期的神经网络中,有一种想法是“尽可能少地让神经网络做事”。例如,在将语音转换为文本时,人们认为应该首先分析语音,将其分解为音素等等。

但人们发现,至少对于“类似人类的任务”来说,通常更好的做法是尝试解决“端到端问题”,让神经网络自己“发现”必要的中间特征、编码等等。

还有一种想法是,应该在神经网络中引入复杂的独立组件,以让它实际上“明确地实现特定的算法思想”。

但同样,这又一次被证明是不值得做;相反,最好只处理非常简单的组件,并让它们“自行组织”(虽然通常是以我们无法理解的方式)来实现(可能是)相当于那些算法思想的功能。

但是,神经网络的一个重要特征是,就像计算机一样,它们最终只处理数据。而当前的神经网络——使用当前的神经网络训练方法——是专门处理数字数组。

但在处理过程中,这些数组可以完全重新排列和重塑。例如,我们用于识别上面数字的网络从一个二维的“类似于图像”的数组,快速“加厚”到多个通道,然后“集中到”一维数组中,最终包含代表不同可能输出数字的元素。

如何判断一个特定任务所需的神经网络大小呢?这有点像艺术。

在某种程度上,关键是要知道“这个任务有多难”。但是对于类似人类的任务,这通常很难估计。

是的,可能有一种系统性的方法通过计算机非常“机械”地来完成任务。但很难知道是否存在人类所谓的技巧或捷径,使人们能够以“类似人类水平”的方式更轻松地完成任务。如果“机械”地玩某个游戏,可能需要枚举一个巨大的游戏树;但是可能有一种更简便(“启发式”)的方法来实现“人类水平的游戏”。

当处理小型神经网络和简单任务时,有时可以明确地看到无法从中获得“预期结果”。例如,以下是使用几个小型神经网络在上一节中进行的任务中,最好的结果:

我们可以看到,如果神经网络太小,则无法生成所需的功能。

顺便说一下,这些图片说明了一个神经网络的规律:如果在中间有一个“压缩”,强制所有东西都通过较少的中间神经元,那么通常可以使用更小的网络。(值得一提的是,“无中间层”或所谓的“感知机”网络只能学习本质上的线性函数,但只要有一个中间层,原则上可以任意地逼近任何函数,至少在有足够多的神经元的情况之下,而且为了使其可行地可训练,通常需要某种正则化或规范化。)

好吧,假设我们已经确定了某个神经网络的结构。现在的问题是获取用于训练网络的数据,而许多与神经网络以及机器学习实际挑战都集中在获取或准备必要的训练数据上。

在许多情况下(“监督学习”),我们希望获得明确的输入以及期望的输出示例。例如,我们可能需要对图像进行标记以指示其中的内容或其他属性。也许我们必须明确地进行标记——这通常需要付出巨大的代价。

但很多时候,我们可以利用已经完成的工作,或者将其用作某种代理。因此,例如,我们可以使用网页上提供的alt标签来为图像进行标记。或者在不同的领域,我们可以使用为视频创建的封闭字幕。对于语言翻译培训可以使用以不同语言存在的网页或其他文档的平行版本。

为了训练神经网络完成特定任务,需要向它展示多少数据?

同样,这很难从第一原理进行估计。通过使用“转移学习”来“转移”已经在另一个网络中学习的重要特征列表等方式,可以大大降低要求。

但通常情况下,神经网络需要“看到大量的例子”才能进行良好的训练。对于某些任务而言,重复示例可能是神经网络传统经验的重要组成部分。事实上,只需一遍遍地向神经网络展示所有的例子。在每个“训练轮次”(或“时代”)中,神经网络将处于至少稍微不同的状态,而以某种方式“提醒”它某个特定的例子对于让它“记住该例子”是有用的。(是的,也许这类似于人类记忆中的重复的作用。)

但仅仅重复相同的例子并不够。还需要向神经网络展示例子的变化。神经网络经验的一个特征是,这些“数据扩增”的变化并不需要特别复杂才能派上用场。只有是使用基本的图像处理略微修改图像,就可以使它们在神经网络培训中基本上“好像是新的”。

同样,当训练自动驾驶汽车的实际视频等材料用尽时,人们可以继续在类似的模拟视频游戏的环境中运行,来获取数据,而无需考虑实际的真实场景的细节。

那么,像ChatGPT这样的东西怎么办?好处在于它可以进行“无监督学习”,这使得它更容易从样本中获取训练。

回想一下,ChatGPT的基本任务是找出如何继续它所给的一段文本。因此,为了获取“训练样本”,我们只需要得到一段文本,将其结尾遮盖起来,然后将其用作“训练的输入”——而“输出”则是完整的未遮盖的文本。

我们将在以后讨论这个问题,但主要的观点是——与学习图片中的内容不同——不需要“明确标记”的内容;ChatGPT实际上可以直接从其获得的任何文本示例中学习。

那么神经网络的实际学习过程是怎样的呢?

归根结底,这都是为了确定哪些权重能最好地捕捉到所给出的训练样本。

然后还有一些问题,在试图最小化的损失方面,要展示多大的“批量”示例来获得每个连续估计的损失。是的,可以应用机器学习(例如我们在Wolfram语言中所做的那样)来自动化机器学习——并自动设置诸如超参数之类的东西。

整个训练过程可以查看损失是如何逐渐减少的(如下面这个Wolfram语言进度监视器所示的小型训练)。

像许多其他事情一样,似乎存在近似幂律缩放关系,这取决于所使用的神经网络大小和数据量。但是一般的结论是,训练神经网络很难,需要大量的计算工作量。作为实际问题,其中绝大部分工作量都用在数字数组上,这正是GPU擅长的领域,这就是为什么神经网络训练通常受到GPU可用性的限制。

未来是否会有根本更好的方法来训练神经网络,或者一般性地实现神经网络的功能?

我认为几乎可以肯定。神经网络的基本思想是利用大量简单(本质上相同)的组件创建一个灵活的“计算基础”,并使其能够逐步地根据实例进行修改。在当前的神经网络中,人们实际上是使用微积分的思想(应用于实数)来进行这种逐步的修改。但是越来越清楚的是,高精度数字并不重要;即使在当前的方法中,8位或更少的位数也足够了。

使用类似于细胞自动机的计算系统进行增量修改一直是不清楚的,但是没有理由认为这是不可能的。事实上,就像“2012年的深度学习突破”一样,在更复杂的情况下进行这种增量修改可能实际上比在简单情况下更容易。

神经网络——也许有点像大脑——设置了一个基本上固定的神经元网络,其中修改的是它们之间的连接强度(“权重”)。(也许至少在年轻的大脑中,还可以产生相当数量的全新连接。)

但是,虽然这可能是生物学中方便的设置,但完全不清楚这是否是实现我们需要功能最佳方式。某种涉及渐进网络重写的东西(也许让人想起我们的物理项目)最终可能会更好。

然而,即使在现有神经网络框架中,存在着一个关键限制:目前的神经网络训练基本上是顺序执行的,每批示例的效果都被传播回来以更新权重。

从某种意义上说,这是因为我们当前的计算机的内存往往都是独立于CPU(或者GPU)。但是,在大脑中,这种情况可能是不同的——每个“存储元素”(即神经元)也是一个潜在的活动计算元素。如果我们能够这种方式设置未来的计算机硬件,可能会更有效地进行训练。

像ChatGPT这样的能力看起来非常令人印象深刻,以至于人们可能会想象,如果可以“继续下去”并训练越来越大的神经网络,那么它们最终将能够“做任何事情”。

如果是那些容易被人类思维直接思考的事物,这种可能性是相当大的。但过去几百年科学的经验教训表明,有些东西可以通过正式的过程计算出来,但并不容易被人类立即理解。

数学是一个很好的例子。但一般的情况实际上是计算。而最终的问题是计算的不可简化现象。有些计算可能需要很多步才能完成,但实际上可以被“简化”成相当直接的东西。但计算不可简化的发现意味着这种方法并不总是奏效。相反,可能存在像下面这样的过程,不可避免地需要追踪每个计算步骤才能弄清楚发生了什么:

我们通常在大脑中进行的事情都是为了避免计算不可简化。在大脑中做数学需要特别的努力。在实践中,“思考”任何复杂程序操作步骤通常是几乎不可能的。

是的,我们可以记住许多特定计算系统中发生的事情的具体例子。也许我们甚至可以看到一些(“计算可简化”的)模式,使我们能够进行一些概况。但问题在于计算不可简化意味着我们永远无法保证不会出现意外情况,只有通过显式地进行计算,才能告诉我们在任何特定情况下实际发生了什么。

最终,在可学习性和计算不可简化之间存在基本的张力。学习实际上涉及通过利用规律来压缩数据。但计算不可简化意味着最终可能存在的规律性是有限制的。

实际上,我们可以想象将小型计算设备(如细胞自动机或图灵机)构建成像神经网络这样的可训练的系统。这些设备可以作为神经网络的好“工具”-就像Wolfram|Alpha是ChatGPT的好工具一样。但是计算不可简化性意味着不能指望“进入”这些设备并使它们学习。

或者换句话说,能力和可训练性之间存在最终的权衡:您希望系统充分利用其计算能力,它就越可能表现出计算不可简化性,就越难以训练。而且,它越容易训练,就越难进行复杂的计算。

(对于ChatGPT,情况实际上更加极端,因为用于生成每个输出token的神经网络是纯“前馈”网络,没有循环,因此无法进行任何具有重要“控制流”的计算。)

但是,我们现代技术世界是建立在至少数学计算(以及越来越多的一般计算)的工程学基础上的。如果我们看看自然界,它充满了不可简化的计算,我们正在慢慢理解如何模拟并利用它们来实现我们的技术目的。

是的,神经网络当然可以注意到自然界中的各种规律性,而我们也可能通过“无助的人类思维”轻易地注意到这些规律性。但是,如果我们想解决属于数学或计算科学范畴的问题,神经网络将无法做到这一点——除非它有效地“使用”一个“普通”的计算系统作为工具。

但是,所有这些可能会让人感到困惑。在过去,我们假设一些任务——包括写作文——对计算机来说在某种程度上“根本太难了”。现在我们看到像ChatGPT这样的东西完成这些任务,我们往往会突然认为计算机一定变得非常强大了——特别是超越了它们已经基本能够做到的事情(例如逐步计算细胞自动机等计算系统的行为)。

但这并不是正确的结论。计算上不可简化的过程仍然是计算上不可简化的,对于计算机来说仍然是根本性的困难,即使计算机可以轻松地计算它们的每一步。

我们应该得出的结论是,像写论文这样的任务,虽然我们人类可以做到,但我们认为计算机无法做到的任务,在某种程度上实际上比我们想象的更容易计算。

如果你拥有足够大的神经网络,那么你可能能够做任何人类能轻易做到的事情。但你不会捕捉到自然界一般可以做到的事情,或者我们从自然界中创造的工具可以做到的事情。正是这些工具(既有实际又有概念性的工具)让我们在最近几个世纪中超越了“纯粹依靠无助的人类思维”的界限,并为人类的目的捕捉了更多存在于物理和计算宇宙中的东西。

神经网络,至少目前来看,基本上是基于数字的。因此,如果我们要使用它们来处理文本之类的东西,我们需要一种用数字表示文本的方式。

当然,我们可以(像ChatGPT一样)从字典中给每个单词分配一个数字开始。但是有一个重要的思想,比如ChatGPT的中心思想,超越了这一点。这就是“嵌入”(embeddings)的思想。可以将嵌入视为通过一系列数字来尝试表示某个事物的“本质”,其特性是“附近的事物”由相邻的数字表示。

因此,举例来说,我们可以将单词嵌入看作是试图在一种“意义空间”中排列单词,在这种空间中,以某种方式"在意义上相近"的词在嵌入中出现。实际使用的嵌入(例如在ChatGPT中)往往涉及大量的数字列表。但是,如果我们将其投影到二维平面上,我们可以展示单词是如何被嵌入空间的:

是的,我们所看到的东西,非常成功地捕捉了日常印象。但是我们如何构建这样的嵌入?

大致的思路是查看大量的文本(这里来自网络的50亿个单词),然后查看不同单词出现在不同的“环境”中的“相似程度”。

例如,“鳄鱼(alligator)”和“鳄鱼(crocodile)”几乎可以在相似的句子中互换,这意味着它们会在嵌入中被放置在附近。但是,“萝卜(turnip)”和“鹰(eagle)”不太可能出现在相似的句子中,因此它们将在嵌入中被远离地放置。

但是如何使用神经网络实现这样的嵌入?让我们先谈论一下图像的嵌入,而不是单词的嵌入。我们希望找到一些方式,以数字列表的方式描述图像,以使我们“认为相似的图像”被分配相似的数字列表中。

我们如何判断是否应该“认为图像相似性”呢?好的,如果我们的图像是手写数字,我们可能会认为“如果它们是相同的数字,我们可以认为两个图像是相似的”。

之前,我们讨论了一个被训练用于识别手写数字的神经网络。我们可以将这个神经网络想象成,是被设置成在最终输出中将图像放入10个不同的桶中,每个桶代表一个数字。

但是,如果我们在做出“这是一个‘4’”决策之前,“拦截”神经网络内部发生的事情呢?我们可能会期望,在神经网络内部有一些数字,这些数字将图像描述为“大部分像4,但有点像2”或类似的东西。而这个想法就是要提取这样的数字,以将其作为嵌入中的元素使用。

因此,概念是这样的。我们不是直接试图描述“哪个图像接近哪个图像”,而是考虑一个定义明确的任务(在本例中是数字识别),对于这个任务,我们可以获得明确的训练数据,然后利用事实,即在完成这个任务时,神经网络隐含地必须做出“接近度决策”。

因此,我们永远不需要明确地谈论“图像的接近度”,而是只谈论图像表示的数字是什么,然后把它“留给神经网络”隐含地决定这对于“图像的接近度”意味着什么。

那么更详细地说,数字识别网络是如何工作的呢?我们可以认为网络由11个连续的层组成,我们可以将其用图标总结如下(激活函数显示为单独的层):

开始时,我们将实际图像输入到第一层,用像素值的二维数组表示。最后,从最后一层中获得一个包含10个值的数组,我们可以认为它们表示神经网络对输入图像对应0到9每个数字的“确认程度”。

将图像4(一个手写的4)输入后,最后一层神经元的值如下:

换句话说,神经网络此时“非常确定”这个图像是4,为了得到输出“4”,我们只需要选择数值最大值的神经元的位置即可。

但是如果我们再往前看一步呢?网络中的最后一个操作是所谓的softmax,它试图“强制确定”。但在应用它之前,神经元的值如下:

代表“4”的神经元仍然具有最高的数值。但是其他神经元的值也包含着信息。我们可以期望这个数字列表在某种意义上可以用来描述图像的“本质”,从而提供可以用作嵌入的东西。

因此,例如这里的每个4都有稍微不同的“签名(signature)”(或“特征嵌入featureembedding”)——与8完全不同:

在这里,我们基本上使用了10个数字来描述我们的图像。但通常情况下,最好使用更多的数字。例如,在我们的数字识别网络中,通过进入前一层,我们可以得到一个包含500个数字的数组。这可能是一个合理的数组,可用作“图像嵌入”。

如果我们想要对手写数字的“图像空间”进行明确的可视化,我们需要“降低维度”,将我们得到的500维向量有效地投影到三维空间中:

我们刚刚讨论了如何通过识别图像之间的相似性,从而确定它们是否对应于相同的手写数字(根据我们的训练集),有效地为图像创建表征(因此是嵌入)。如果我们有一个训练集,可以识别每个图像属于5000种常见对象类型(例如猫,狗,椅子等),那么我们可以更普遍地对图像采用同样的方法。

这样一来,我们可以制作出一种图像嵌入,它以我们对常见对象的识别为“锚点”,然后根据神经网络的行为“进行推广”的图像嵌入。

关键是,只要神经网络的行为与我们人类感知和解释图像的方式一致,这将最终成为一种“看起来对我们来说正确”的嵌入,并在执行“类似于人类判断”的任务时非常有用。

好吧,那么我们如何采用相同的方法来为单词找到嵌入呢?关键要从一个我们可以轻松地进行训练单词的任务开始。这种标准的任务是“单词预测”。想象一下,我们得到了“the___cat”。基于大量的文本语料库(比如,网络上的文本内容),填在空格中的不同单词的概率是多少?或者,给定“___black___”,不同“侧翼单词”的概率是多少?

我们如何为神经网络设置这个问题?归根结底,我们必须用数字来表达一切。

一种方法是为英语中约50,000个常用单词中的每个单词分配一个唯一的数字。因此,例如,“the”可能是914,“cat”(前面带一个空格)可能是3542(这些数字是GPT-2实际使用的数字)。

因此,对于“the___cat”问题,我们的输入可能是{914,3542}。而输出应该是一个包含约50,000个数字的列表,有效地给出每个可能的“填空”单词的概率。再次,为了找到一个嵌入,我们希望“截取”神经网络“到达结论之前”的“内部”——然后获取在那里发生的数字列表,并将其视为“每个单词特征”的数字。

那么,这些特征是什么样子的?在过去的10年中,已经开发了一系列不同的系统(word2vec、GloVe、BERT、GPT等),每个系统都基于不同的神经网络方法。但最终,它们都通过由数百到数千个数字组成的列表来描述单词特征。

在它们的原始形式下,这些“嵌入向量”是相当无信息的。例如,这是GPT-2为三个特定单词生成的原始嵌入向量:

如果我们对这些向量之间距离进行测量,那么我们可以找到单词的“近似程度”。稍后我们将更详细地讨论这种嵌入的“认知”意义。但现在的主要观点是,我们有一种有用的方法,可以将单词转化为“神经网络友好”的数字集合。

实际上,我们不仅可以将单词用一组数字表示,还可以对单词序列或者整个文本块进行相同的处理。ChatGPT就是这样处理的。它将文本表示为嵌入向量,然后寻找可能出现在下一个位置的不同单词的概率。它将答案表示为一列数字,这些数字基本上给出了可能单词的概率,有大约50,000个可能的单词。

(严格来说,ChatGPT不是处理单词,而是处理“标记(token)”——方便的语言单位,可以是整个单词,也可以是像“pre”或“ing”或“ized”这样的部分。使用标记可以更容易地处理罕见、复合和非英语单词,并且有时候,无论好坏,创造新单词。)

好的,我们终于准备好讨论ChatGPT的内部结构了。而且,没错,最终,它是一个巨大的神经网络——目前是一个拥有1750亿权重的所谓GPT-3网络版本。

从许多方面来看,这个神经网络很像我们之前讨论的其他神经网络。但它是一个特别为处理语言而设置的神经网络。最值得注意的特点是它的神经网络结构中有一部分叫做“Transformer”。

在我们上面讨论的第一个神经网络中,在任何给定层的每个神经元都基本上与前一层的每个神经元相连接(至少存在某种权重)。但这种完全连接的网络可能对于处理具有特定已知结构的数据来说有些过剩。

因此,例如在处理图像的早期阶段,通常会使用所谓的卷积神经网络("convnets"),其中神经元有效地被布置在类似于图像中的像素的网格上,并且只连接到网格上附近的神经元。

Transformer的想法是为由一段文本组成的token序列做类似的事情。但是,Transformer不仅仅是定义了可以连接的序列中的固定区域,而是引入了“注意力(attention)”的概念——更多地”注意“序列的某些部分。

也许总有一天,通过训练来进行所有定制的通用神经网络会有意义。但是,至少目前来说,在实践中将事物“模块化”似乎至关重要,就像Transformer那样,并且可能也像我们的大脑所做的那样。

好的,那么ChatGPT(或者说它所基于的GPT-3网络)实际上是做什么的呢?

请回忆一下,它的总体目标是基于它从训练中看到的内容(包括来自网页等的数十亿个页面的文本),“合理”地继续文本。因此,在任何给定的时刻,它都有一定数量的文本,并且其目标是为下一个要添加的token想出适当的选择。

它的操作可以分为三个基本阶段。

(是的,碰巧有大约与英语常用词汇相同数量的Token被使用,尽管其中只有约3000个Token是完整的单词,其余的是片段。)

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

然而,在架构的设置方式上有很多细节,反映了各种经验和神经网络知识。尽管这绝对涉及到一些技术细节,但我认为讨论其中一些细节也是有用的,这样可以更好地了解构建像ChatGPT这样的系统所需的工作。

首先是嵌入模块。下面是GPT-2的Wolfram语言示意图表示:

输入是n个token组成的向量(如上一节所说,有1到50,000的整数表示)。每个token都被单层神经网络转换为嵌入向量(GPT-2的长度为768,ChatGPT的GPT-3的长度为12,288)。

同时,还有一个“二级路径”,它将token的(整数)位置序列化,并从这些整数中创建另一个嵌入向量。最后,token值和token位置的嵌入向量相加在一起,以产生来自嵌入模块的最终嵌入向量序列。

为什么只是将token值和token位置的嵌入向量相加?我认为这并没有什么特别的科学性。只是尝试了各种不同的方法后,这似乎是一个可行的方法罢了。从某种意义上说,这也是神经网络传说的一部分,只要你的设置“大致正确”,通常就可以通过做充分的训练来确定细节,而不需要真正“在工程层面上理解”神经网络最终是如何自我配置的。

下面是嵌入模块对于如下字符串所作的工作:"hellohellohellohellohellohellohellohellohellohellobyebyebyebyebyebyebyebyebyebye":

每个token的嵌入向量的元素显示在页面下方,在整个页面上,首先看到一系列“hello”嵌入向量,然后是一系列“bye”的嵌入向量。上面的第二个数组是位置嵌入,其看起来随机的结构只是“碰巧学到的”(在本例是在“GPT-2”中)。

好的,嵌入模块后,是Transformer的“主要事件”:所谓的“注意力块”序列(GPT-2为12个,“ChatGPT”的GPT-3为96个)。它相当复杂,并且让人想起典型的大型难以理解的工程系统或生物系统。但是,下面是单个“注意力块”的示意图(对于GPT-2):

每个这样的“注意力块”内部都有一系列“注意力头”(GPT-2为12个,ChatGPT的GPT-3为96个),每个“注意力头”都独立地在嵌入向量中的不同数值块上运行。(是的,我们不知道为什么分割嵌入向量是一个好主意,或者它的不同部分"意味着"什么;这只是那些被"发现有效"的事情之一。)

那么,“注意力头”的作用是什么?基本上,它们是一种“回顾”token序列的方式(即迄今为止生成的文本),并以有用的形式“打包”过去,以便找到下一个token。

在上面的第一节中,我们讨论了使用2-gram概率来根据它们的直接前身来选择单词的方法。Transformer中的“注意力”机制允许“注意到”甚至更早的单词——因此可能捕捉到,比如说,动词可以指代出现在句子中很多单词之前的名词的方式。

经过“注意力头”处理后,得到的“重新加权的嵌入向量”(对于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的净效应是什么呢?本质上,它是将原始的token序列的嵌入集合转换为最终的嵌入集合。而ChatGPT的特定工作方式是选择该集合中的最后一个嵌入,并“解码”它以产生下一个token的概率列表。

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

ChatGPT的原始输入是一个数字数组(到目前为止是Token的嵌入向量),当ChatGPT“运行”以产生新的token时,这些数字就会“涟漪”般地通过神经网络的各个层,每个神经元都会“做自己的事情”,并将结果传递给下一层的神经元。没有循环或“回溯”,一切都通过网络“前馈”。

这与典型的计算系统(如图灵机)非常不同,在图灵机这种系统中,结果会被同一计算元素重复“再处理”。在ChatGPT中,至少在生成输出的给定token时,每个计算元素(即神经元)仅使用一次。

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

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

此外,在ChatGPT的神经网络中还有一些方面,不太自然地被认为只由“同质”层组成。例如,正如上面的图标摘要所示,在“注意块”内,有些地方对传入的数据进行了“多个拷贝”,每个拷贝都通过不同的“处理路径”(可能涉及不同数量的层)进行,然后再进行重新组合。但是,虽然这可能是正在发生事情的一种的方便性的描述,但在原则上始终可以认为是“密集填充”层,只是将一些权重设置为零罢了。

如果看一下ChatGPT中最长的路径,则涉及约400个(核心)层,在某些方面不算太多。但是有数百万个神经元,总共有1750亿个连接,因此有1750亿个权重。

要认识到的一件事是,每次ChatGPT生成新token时,它都必须进行涉及每个权重的计算。从实现的角度来看,这些计算可以在GPU上高度并行化的阵列操作中进行组织,这样可以很方便地进行。

但最终,值得注意的是,尽管这些操作在个体上都很简单,它们却可以共同完成如此出色的“类人”文本生成工作。必须再次强调的是,就我们目前所知,没有“最终理论原因”说明为什么这样的事情会奏效。事实上,正如我们将要讨论的那样,我认为我们必须将这视为一项——潜在惊人的——科学发现:在像ChatGPT这样的神经网络中,可以以某种方式捕捉人类大脑在生成语言方面的本质。

好的,我们现在已经概述了ChatGPT在设置后的工作方式。但是它是如何设置的呢?那1750亿个神经元中的权重是如何确定的呢?

基本上,它们是基于大规模的训练结果得出的,这些训练基于人类编写的海量文本语料库,如互联网、书籍等。正如我们所说,即使拥有所有这些训练数据,一个神经网络是否能成功生成“类似人类”的文本,这一点也并不明显。而且,必须再次强调,似乎需要详细的工程细节才能实现这一目标。但是ChatGPT的一个大的惊喜和发现是,它是可能的。而且,在某种程度上,“只有”1750亿个权重的神经网络可以生成人类书写的“合理模型”。

在现代,有很多由人类编写的文本以数字形式存在。公共网络上至少有几十亿个由人类编写的页面,总共可能有1万亿字的文本。如果包括非公共网页,这个数字可能会至少大100倍。到目前为止,已经有超过500万本数字化书籍可用(出版的大约有1亿本左右),提供了另外大约1000亿字的文本。这还没有提到从视频中提取的语音文本等等。

(以我个人作为对比,我一生发表的出版物总量不到300万字,过去30年我写了约1500万字的电子邮件,并打了约5000万字的文字——在过去的几年中,我在直播中说了超过1000万字。是的,我将会从这些文本中训练机器人。)

但是,好的,根据所有这些数据,如何从中训练神经网络?基本过程非常类似于我们在前面简单的例子中所讨论的内容。你提供一批示例,然后调整网络中的权重,使网络在这些示例上的误差(“损失”)最小。从错误中“反向传播”的主要开销在于,每次执行此操作时,网络中的每个权重通常都至少会有微小的调整,而且有很多权重要处理。(实际的“反向计算”通常只比正向计算困难一个小常数因子。)

使用现代GPU硬件,可以很容易地并行计算成千上万个例子的结果。但是,当涉及到实际更新神经网络中的权重时,当前的方法基本上需要一批一批地进行。(是的,这可能是实际大脑——具有计算和存储元件的组合——目前至少具有架构优势的地方。)

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

一些文本被反复使用,一些文本仅被使用了一次。但不知何故,它从所见到的文本中“得到了它所需的东西”。但是,考虑到这么多的文本可以从中学习,它需要多大的网络才能“学成呢?”同样,我们还没有根本性的理论方法来说明。最终——正如我们将在下面进一步讨论的那样——人类语言有某种"总的算法内容",以及人类通常用它说什么肯定是确定的。但是下一个问题是神经网络在基于该算法内容的模型实现的时候将会有多大的效率。我们还不知道,尽管ChatGPT的成功表明它的效率还不错。

最后我们可以注意到,ChatGPT所使用的几千亿个权重——与它接收到的训练数据中的单词(或token)总数相当。在某些方面,这也许令人惊讶(尽管在ChatGPT的较小模型中也经验性地观察到这一点),看起来工作良好的"网络规模"与"训练数据的规模"是如此相似。毕竟,ChatGPT内部并不是以某种方式“直接存储”来自网络和书籍等所有文本的所有内容。因为ChatGPT内部实际上只有一堆数字——精度不到10的数字——这些数字是对所有文本的聚合结构的某种分布式编码。

换句话说,我们可以问一下人类语言的“有效信息内容”是什么,以及通常使用它说什么。这里有语言的原始语料库。然后有ChatGPT神经网络中的表示。这种表示很可能远非“算法上最小化”的表示(正如我们将在下文讨论的那样)。但这是一种很容易被神经网络容易使用的表示。在这种表示中,训练数据似乎最终没有太多“压缩”,平均而言,不到一个神经网络权重就可以携带一个训练单词的“信息内容”。

当我们运行ChatGPT来生成文本时,我们基本上需要使用每个权重一次。因此,如果有n个权重,我们需要大约n个计算步骤——尽管在GPU上许多计算步骤可以并行完成。但是,如果我们需要大约n个单词的训练数据来设置这些权重,那么根据上面所说的,我们可以得出结论,我们需要大约n2个计算步骤来训练网络——这就是为什么使用当前的方法,我们最终需要谈论十亿美元训练费用的原因。

在训练ChatGPT时,大部分工作都是花在让它“看到”大量来自网络、书籍等现有文本的过程中。但事实证明还有另一个显然相当重要的部分。

一旦它完成了来自原始文本语料库的“原始训练”,ChatGPT内部的神经网络可以开始生成自己的文本,根据提示继续进行等等。但是,尽管这些结果通常看起来合理,但它们往往会(特别是对于较长的文本)“偏离”人类的正常文本。这不是人们可以通过对文本进行统计轻易发现的。但这是实际阅读文本的人容易注意到的东西。

ChatGPT构建的一个关键思想是,在“被动地阅读”网络等事物之后,还有一个步骤:让真实的人们积极与ChatGPT进行交互,看看它生成了什么,实际上为“如何成为一个好的聊天机器人”提供反馈。但是神经网络如何利用这个反馈呢?第一步只是让人类对神经网络生成的结果进行评分。然后建立另一个神经网络模型,试图预测那些评分。但现在这个预测模型可以在原始网络上运行——基本上就像一个损失函数,从而允许这个网络通过人类的反馈来"调整"。而实践中的结果似乎对系统成功产生"类似人类"的输出有很大影响。

总的来说,有趣的是,要让“最初训练”的网络在特定方向上有用,只需要很少的“摆弄”。人们可能会认为,要让网络表现得像“学到了新东西”,就必须运行训练算法,调整权重等等。

但实际情况并非如此。相反,只需告诉ChatGPT一次即可——作为您给出的提示的一部分——然后它就可以成功地利用您告诉它的内容来生成文本。再次强调,这种方法的成功是我认为理解ChatGPT“真正做什么”以及它与人类语言和思维结构的关系的一个重要线索。

实际上,就像人类一样,如果您告诉它一些奇怪和出乎意料的内容,完全不符合它所知道的框架,那么它似乎无法成功地“整合”这些内容。只有当它在现有框架之上以相当简单的方式进行“操作”时,才能“整合”内容。

值得再次指出的是,神经网络“捕捉”的内容,不可避免地存在“算法限制”。告诉它“浅层规则”,类似“这个对应那个”,神经网络很可能能够很好地表示和复制这些内容——事实上,它从语言中“已知”的东西,将会给它一个可以遵循的直接模式。但如果试图给它一个“深层”计算规则,其中涉及许多不可计算步骤,它就不会奏效。(请记住,每一步它都是通过其网络“向前输送数据”,除了生成新标记外,从不循环。)

当然,网络可以学习特定“不可简化的”计算的答案。但是一旦有组合数量的可能性,这种的“表格查找式”方法就行不通了。因此,就像人类一样,神经网络现在需要“伸出手来”,使用实际的计算工具了。(而Wolfram|Alpha和WolframLanguage是唯一适合的,因为它们是为了"谈论世界上的事物"而建立的,就像语言模型神经网络一样。)

人类语言以及生成语言所涉及的思维过程一直被认为是一种复杂程度的巅峰。人脑“仅有”1000亿左右的神经元(和可能100万亿的连接)的网络也许是其背后的原因,这看上去很了不起。也许,人们可以想象,大脑不仅仅是神经元网络——还有一些未被发现的新物理层面。但是现在有了ChatGPT,我们获得了重要的新信息:我们知道一个纯粹的人工神经网络,它的连接数量与大脑的神经元数量差不多,可以很好地生成人类语言,令人惊讶。

那么,像ChatGPT这样的东西如何在语言方面取得如此成功?基本答案是,语言在根本层面上比它看起来简单得多。这意味着ChatGPT——即使它的神经网络结构最终是简单的——也能够成功地“捕捉到”人类语言的本质及其背后的思维。此外,在训练中,ChatGPT以某种方式“隐式地发现”了语言(和思维)的任何规律性,使这一切成为可能。

我认为ChatGPT的成功,给我们提供了一个基本和重要的科学证据:表明我们可以期望发现全新的“语言法则”和有效的“思维法则”。在ChatGPT中,由于它是一个神经网络,这些法则充其量也是隐含的。但如果我们能够以某种方式使这些法则显式化,那么就有可能用更直接、更高效、更透明的方式做到ChatGPT所做的那些事情。

第一个是语言的句法结构。语言不仅仅是一堆随机的单词。相反,有(相当)明确的语法规则来规定不同类型的单词如何组合:例如,在英语中,名词可以由形容词修饰,后面跟动词,但通常两个名词不能直接挨在一起。这种语法结构可以(至少近似地)被一组规则捕捉,这些规则定义了如何将相当于"解析树"的东西放在一起:

ChatGPT并没有任何关于这些规则的显式“知识”。但是在训练中,它以某种方式隐式地“发现”了这些规则,然后似乎擅长遵循这些规则。那么这是怎么做到的呢?在“大局”层面上并不清楚。但是为了得到一些启示,看一个更简单的例子也许是有益的。

考虑由"("和")"组成的序列构成的“语言”,其语法规定括号必须保持平衡,可以用一个类似下面解析树的结构来表示:

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

如果我们使用一个具有8个特征向量长度为128的注意力块的Transformer网络(ChatGPT使用特征向量长度为128的网络,但其具有96个注意力块,每个块都有96个头),那么它似乎不可能学到太多关于括号语言的知识。但是使用两个注意力块,学习过程似乎会收敛-至少在给出大约1000万个示例之后(正如在Transformer网络中普遍存在的那样,给出更多示例似乎只会降低其性能)。

因此,对于这个网络,我们可以执行ChatGPT所做的类似操作,并询问下一个标记的概率,如下所示:

在第一种情况下,网络“非常确定”序列不能在这里结束——这很好,因为如果结束,括号将不平衡。然而,在第二种情况下,它“正确地识别”到序列可以在这里结束,虽然它也“指出”有可能“重新开始”,放置一个“(”,估计紧接着放一个“)”。但是,糟糕的是,即使有着大约400,000个训练的权重,它还是说有15%的概率下一个标记是“)”——这是不正确的,因为这必然导致括号不平衡。

以下是我们要求网络以逐步更长的“(”序列完成的最高的概率结果:

是的,在一定长度范围内,网络就可以做得很好。但是随后它就开始失败了。这是在神经网络(或机器学习一般)的“精确”情况中看到的一种典型现象。人类“一眼就能解决”的情况,神经网络也能解决。但是需要做一些“更算法化”(比如明确地数括号,看看它们是否闭合)的情况,神经网络往往在某种程度上“过于计算表面”,难以可靠地完成。。(顺便说一下,即使是目前完整的ChatGPT也很难在长序列中正确匹配括号。)

那么这对像ChatGPT和英语这样的语言的语法有什么意义呢?括号语言是“简朴”的——并且更像是一个“算法故事”。但在英语中,根据单词的局部选择和其他提示“猜测”语法上适合的内容更加现实。而且,是的,神经网络在这方面要好得多——尽管它可能会错过一些“形式上正确”的情况,而人类,也可能会错过。但主要的一点是,语言有一个总体的句法结构——以及它隐含着所有的规则——在某种意义上限制了神经网络需要学习的“程度”。一个关键的“自然科学式”的观察是,像ChatGPT中的神经网络的transformer架构,似乎能够成功地学习类似于嵌套树状句法结构的语言结构(至少在某种程度上近似于所有人类语言)。

语法提供了一种对语言的约束。但显然还有更多。像“Inquisitiveelectronseatbluetheoriesforfish”这样的句子在语法上是正确的,但并不是人们通常期望说出来的东西,并且如果ChatGPT生成了它也不会被认为是成功——因为,嗯,虽然每个单词都有意义,但句子基本上没有意义。

但是,有没有一种通用的方法可以判断一个句子是否有意义?没有传统的整体体理论可以回答这个问题。但是,我们可以认为ChatGPT在被训练了数十亿个(可能有意义的)来自网络等的句子后,已经隐式地“发展出了一个理论”。

这个理论可能是什么样子呢?嗯,有一个小角落,基本上已经被认识了两千年,那就是逻辑学。当然,以亚里士多德发现的三段论形式而言,逻辑学基本上是一种说法,即遵循某些模式的句子是合理的,而其他句子则不合理。例如,“所有X都是Y。这不是Y,所以它不是X”(如“所有鱼类都是蓝色的。这不是蓝色的,所以它不是鱼。”)是合理的。

而且正如人们可以有些异想天开地想象亚里士多德通过(“机器学习式”)浏览大量修辞例子来发现三段论逻辑一样,同样,在ChatGPT的训练中,它将能够通过查看网页上的大量文本等方式“发现三段论逻辑”。

(是的,虽然可以期望ChatGPT会生成包含基于三段论逻辑的“正确推理”的文本,但是在更复杂的形式逻辑方面,情况完全不同——我认为我们可以期待它在这里失败,原因与它在括号匹配中失败是相同的。)

但除了逻辑这个狭窄的例子之外,有什么方法可以系统地构建(或识别)甚合理有意义的文本吗?是的,有像MadLibs这样使用非常特定的“短语模板”的东西。但是,不知何故,ChatGPT隐式地拥有一种更通用的方法来完成这个任务。也许,除了“当你拥有1750亿个神经网络权重时,某种方式就会发生”之外,关于如何做到这一点没有什么可说。但我强烈怀疑这里有一个更简单、更强大的理论。

我们之前讨论了,在ChatGPT中,任何文本片段都可以被有效地表示为数字数组,我们可以将其视为某种“语言特征空间”中一个点的坐标。因此,当ChatGPT续写一个文本片段时,这相当于在“语言特征空间”中跟踪一条轨迹。但现在我们可以问,是什么让这个轨迹对应于我们认为有意义的文本?也许会有某种“语义动力学定律”,它们定义(或者至少限制)“语言特征空间”中的点如何移动,同时保留“意义”?

那么这个“语言特征空间”是什么样子呢?以下是一个示例,展示了如果将这样一个特征空间投影到2D,单个单词(这里指普通名词)可能被排列的方式:

上面我们看到了一个基于代表植物和动物的词语的例子。但是两种情况的共同点是,“语义上相似的词语”被放置在附近。

再举个例子,下面是对应于不同词性的单词的排列方式:

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

好的,我们至少可以认为在这个特征空间中,“意思相近的单词”会在该空间中靠近彼此。但是我们能够在这个空间中识别出什么样的额外结构呢?例如,是否存在某种“平行传送”的概念,反映了空间中的“平坦性”?了解这个问题的一种方法是看看类比:

是的,即使我们投影到二维,也经常能看到一些“平坦性的迹象”,尽管这并不是普遍存在的。

那么,轨迹呢?我们可以查看一个ChatGPT提示(prompt)在特征空间中遵循的轨迹,然后看看ChatGPT如何继续:

在这里,我们肯定没有看到一个“几何上明显”的运动定律。这并不令人惊讶;我们完全预料到这是一个相当复杂的故事。而且,例如,即使存在一个“语义动力学”,也不太清楚它用什么样的嵌入(或者实际上是什么“变量”)来最自然地表达。

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

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

这里有一个三维表示,共走了40步:

而且,是的,这似乎一团糟,对于人们期望通过经验性地研究"ChatGPT在里面做什么"来确定"类似数学物理学的"运动语义法则"的想法没有任何鼓励作用。

但也许我们只是看错了“变量”(或坐标系),只要我们找到了正确的变量,就可以立即看出ChatGPT正在做一些“数学或者物理学的简单”的事情,例如遵循测地线。但截至目前,我们还没有准备好从其“内部行为”中“经验性地解码”ChatGPT已经“发现”的有关于人类语言是如何“组合”的内容。

产生“有意义的人类语言”需要什么?在过去,我们可能认为只有人类大脑才能做到这一点。但现在我们知道,ChatGPT的神经网络也可以做得很好。不过,也许这已经是我们能走的最远的路了,不会有什么更简单--或者更容易被人理解--的东西会起作用。但我的强烈怀疑的是,ChatGPT的成功暗示了一个重要的“科学”事实:有意义的人类语言的结构和简单性实际上比我们以前知道的要更多,最后甚至可能有相当简单的规则来描述这种语言如何被组合起来。

正如我们上面提到的,句法语法给出了人类语言中对应于不同词性的词语如何组合的规则。但是为了处理意义,我们需要更进一步。其中一种方法是考虑不仅语言的句法语法,而且还有一个语义语法。

值得一提的是,即使一个句子从语义语法来看很好,也不意味着它在实践已经实现(甚至可以实现)。“大象去月球旅行”毫无疑问会“通过”我们的语义语法,但它肯定没有在我们实际的世界中实现(至少还没有)-尽管它绝对可以在虚构的世界中实现。

当我们开始谈论“语义语法”时,我们很快就会问:“它的底层是什么?”它假定了什么“世界模型”?句法语法实际上只涉及从单词中构建语言的问题。但是,语义语法必然涉及某种“世界模型”——某种作为“骨架”的东西,在其上可以分层放置由实际词语组成的语言。

直到最近,我们可能认为(人类的)语言是描述我们“世界模型”的唯一一般方法。早在几个世纪前,已经开始了有了对特定类型事物的形式化,特别是以数学为基础。但是现在有了一种更通用的形式化方法:计算语言。

是的,这是我四十多年来的一个大型项目(现在体现在Wolfram语言中):开发一种精确的符号表示,可以尽可能广泛地谈论世界上的事物,以及我们关心的抽象事物。例如,我们有关于城市、分子、图像和神经网络的符号表示,并且我们有关于如何计算这些事物的内在知识。

经过几十年的努力,我们已经在许多领域进行了覆盖。但在过去,我们并没有特别处理“日常话语”。在“我买了两磅苹果”中,我们可以轻松地表示(并进行营养和其他计算)“两磅苹果”。但是我们还没有(完全)为“我买了”建立符号表示。

这一切都与语义语法的想法有关,目标是为概念提供一个通用的符号“构建工具包”,这将为我们提供什么能与什么相匹配的规则。从而为我们可能转化为人类语言的“流程”提供规则。

但假设我们有了这个“符号话语语言”,我们会用它来做什么?我们可以从生成“本地有意义的文本”开始。但最终,我们可能希望获得更多“全局有意义”的结果,这意味着“计算”更多关于实际存在或发生在世界中的内容(或者在某个一致的虚构世界中)。

现在,Wolfram语言中已经内置了大量关于各种事物的计算知识。但对于完整的符号话语语言,我们需要构建关于世界上一般事物的其他“计算法则”:如果一个物体从A移动到B,再从B移动到C,则它已经从A移动到C,等等。

人类语言本质上是不精确的,其中一个原因是它没有“系”在特定的计算实现上,其含义基本上仅由其用户之间的“社会契约”定义。但计算语言本质上具有一定的基本精确度——因为最终它所指定的内容总是可以在计算机上“明确执行”。人类语言通常可以摆脱某种模糊性。(例如,当我们说“行星”时,它是否包括系外行星?等等。)但在计算语言中,我们必须明确清晰地描述我们所做的区别。

通常情况下,在计算语言中使用普通的人类语言来构建名称很方便。但它们在计算语言中的含义必然是精确的,而且可能涵盖或可能不涵盖典型人类语言用法中的某些特定内涵。

如何确定适合一种通用符号语言的基本“本体”?这并不容易。这也许就是为什么自亚里士多德两千多年前的原始开始以来,这方面没有做太多工作的原因。但是,今天我们已经了解了如何以计算方式思考世界的许多内容,这非常有帮助(而且,从我们的物理学项目和Ruleiad的想法中得到一个"基本形而上学"也无妨)。

但这一切在ChatGPT的背景下意味着什么呢?通过它的训练,ChatGPT已经有效地“拼凑”出了一定数量的语义语法(相当令人印象深刻)。但它的成功让我们有理由认为,构建一种更完整的计算语言形式是可行的。而且,与我们迄今为止所了解的ChatGPT内部情况不同,我们可以期望将计算语言设计得让人类易于理解。

当我们谈论语义语法时,我们可以将其类比为三段论逻辑。起初,三段论逻辑本质上是关于用人类语言表达陈述的规则集合。但是(是的,两千年后),当形式逻辑被发展出来时,三段论逻辑的最初基本结构现在可以用于构建巨大的“形式化塔”,包括现代数字电路的操作。因此,我们可以预期,更普遍的语义语法也将是如此。起初,它可能只能处理简单的模式,比如文本形式的表达。但一旦它的整个计算语言框架建立起来,我们可以期望它能够被用来建立高耸的“广义语义逻辑塔”,使我们能够以精确和形式化的方式处理以前从未被接触过的各种事物,除了在"底层"通过人类的语言,以其所有的模糊性。

我们可以将计算语言(以及语义语法)的构建视为一种表示事物的终极压缩,因为它使我们能够谈论可能性的本质,而不必处理普通人类语言中存在的所有“措辞变化”。我们可以认为ChatGPT的巨大优势也有些类似,因为它在某种程度上已经“钻研到”可以在不考虑措辞变化的情况下以语义有意义的方式组合语言。

那么,如果将ChatGPT应用于底层计算语言,会发生什么呢?计算语言可以描述什么是可能的。但是还可以增加“流行趋势”的感觉——例如基于阅读网络上的所有内容。但是,底层操作计算语言意味着像ChatGPT这样的系统立即和根本性地获得了利用潜在的不可简化计算的终极工具。这使得它不仅可以“生成合理的文本”,而且可以期望解决,有关文本是否实际上对世界或者它所讨论的内容做出“正确”陈述的任何问题。

在某种程度上,ChatGPT的基本概念相当简单。它首先从互联网、书籍等处获得大量人类创作的文本样本。然后训练一个神经网络来生成“类似”的文本。特别地,让它能够从“提示信息”开始,然后继续生成“与其训练的内容相似”的文本。

正如我们所看到的,ChatGPT中的实际神经网络是由非常简单的元素组成——尽管有数十亿个元素。神经网络的基本操作也非常简单,本质上就是对每个新单词(或单词的一部分)生成输入,然后将这些输入“在其元素中传递一次”(不使用任何循环等)。

但令人惊奇且出乎意料的是,这个过程能够产生成功地“像”网络、书籍等上面的内容的文本。它不仅是连贯的人类语言,还“说出”了“遵循其提示”的东西,利用了它“阅读”的内容。它并不总是说出“全局有意义”的话(或者对应于正确的计算),因为(例如,没有访问Wolfram|Alpha的“计算超级能力”),它只是根据它在训练材料中的“声音”所听到的内容,说出“听起来正确”的话。

ChatGPT的具体工程使其相当吸引人。但最终(至少在它可以使用外部工具之前),ChatGPT只是从它积累的“传统智慧的统计数据”中提取了一些“连贯的文本线索”。但令人惊讶的是,其结果如此的像人类。正如我所讨论的那样,这表明某些至少科学上非常重要的东西:人类语言(以及背后的思维模式)在结构上比我们想象的更简单、更“规则”化。ChatGPT已经隐含地发现了这一点。但我们可能用语义语法、计算语言等方法,明确地揭示它。

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

但是在训练(也称为学习)时,由于当前计算机的不同“硬件”的限制(以及可能一些未开发的算法思想)迫使ChatGPT使用一种策略,这种策略可能与人脑相当不同(在某些方面效率要低得多)。还有另外一点:甚至和典型的算法计算不同,ChatGPT内部没有“循环”或“重新计算数据”。这不可避免地限制了它的计算能力——即使与当前的计算机相比也是如此,但与大脑相比肯定是如此。

目前还不清楚如何“修复”这个问题,并且同时保持以合理的效率训练系统的能力。但是这样做将有望让未来的ChatGPT做更多“类似于大脑的事情”。当然,大脑也存在许多不擅长的事情,特别是涉及不可简化计算的事情。对于这些问题,大脑和像ChatGPT这样的工具都必须寻求“外部工具”,例如Wolfram语言。

但就目前而言,ChatGPT已经能够做到的事情非常令人兴奋。在某种程度上,它是一个很好的例子,证明了一个基本的科学事实,即大量简单的计算元素可以做出非凡且意想不到的事情。但它也为我们提供了两千年来最好的动力,以更好地理解人类条件的核心特征——人类语言及其背后的思维过程的基本特征和原则。

THE END
1.chatGPT登录不上怎么办登陆失败解决办法chatgpt这款软件很多人最近都在使用吧,但是有些用户在使用这个软件的时候出现了登录失败的情况,这个情况主要表现是所在地区不支持服务,下面我们就来看看解决办法吧。 chatGPT登陆失败解决办法 chatgpt下载入口:点击进入 登录不上这个问题很多的玩家都出现了,解决办法也是很简单的。 http://www.ahch.group/ahgl/5716483.html
2.国外SIM卡有信号无法连接,如何解决?网络下午好本答案参考ChatGPT-3.5 首先,我们需要检查你的SIM卡是否已被中国移动注销或移除,因为这是导致无法连接的另一个原因。 解决方案: 检查SIM卡:确保SIM卡已正确插入手机中,并且没有被其他应用程序或系统覆盖。 尝试重新设置SIM卡:在中国移动的官方网站上找到你的SIM卡,点击“重置”或“恢复出厂设置”...https://ask.csdn.net/questions/8141059/54853963
1.chatgpt绕过限制导读:为帮助您更深入了解chatgpt绕过限制,小编撰写了chatgpt绕过限制,取消chatgpt限制,chatgpt限制次数,chatgpt限制,chatgpt无限制等5个相关主题的内容,以期从不同的视角,不同的观点深入阐释chatgpt绕过限制,希望能对您提供帮助。 本文目录一览 1、chatgpt绕过限制 ...http://www.kuyin.tv/article/1784186.html
2.chatgpt访问被拒绝解决办法导读:为帮助您更深入了解chatgpt访问被拒绝解决办法,小编撰写了chatgpt访问被拒绝解决办法,chatgpt访问被拒绝,chatgpt被拒绝访问,chatgpt拒绝被访问,chatgpt访问被拒绝怎么办等5个相关主题的内容,以期从不同的视角,不同的观点深入阐释chatgpt访问被拒绝解决办法,希望能对您提供帮助。 http://chatgpt.cmpy.cn/article/2389652.html
3.chatgpt使用教程chatgpt怎么使用最新的【chatgpt】相信不少用户都有所了解,当我们完成chatgpt注册以后,很多小伙伴可能还不清楚chatgpt怎么使用,为了帮助用户们解决这个难题,专门为大家整理的详细的chatgpt使用教程,希望对你有所帮助。 chatgpt怎么使用 chatgpt下载入口:点击进入 1、首先我们需要先登录chatgpt官网,完成完成对应的chatgpt注册流程。→(...http://www.zy-ss.vip/yxzxjss/4418983.html
4.关于ChatGPT封号原因和解决办法使用ChatGPT时必须遵守平台的规定和协议,就像使用其他社交媒体和应用程序一样。只要涉及到违反相关规则的行为,比如从事非法活动、发布敏感信息、过度发送文本等,以及滥用ChatGPT技术的服务,那么用户的账号就会被封锁或限制使用。 *ChatGPT封号解决办法* 面对ChatGPT被封的困境,很多人感到猝不及防。使用ChatGPT无论在学习...https://shikelang.cc/post/569.html
5.ChatGPT在你的国家不可用?如何绕过地理限制不要忘记在下面的评论中分享您对Chat GPT的评价和任何其他帮助您绕过地理限制的解决方案。 对于不在支持的国家的用户,他们可以使用以下几种方法来使用ChatGPT: 使用VPN 用户可以使用VPN来绕过区域限制,但是对于ChatGPT,这个方法现在变得更加棘手了。 之前,用户可以通过位于支持的国家的服务器来访问ChatGPT,但现在ChatGPT...https://www.yihanseo.com/AIshengcheng/4074.html
6.解除chatgpt字数限制ChatGPT在各个领域展现出了巨大的潜力和应用前景。由于历史原因和技术限制,ChatGPT在生成对话内容时存在着一定的限制字数。这成为了很多用户和开发者所关注的问题之一。幸运的是,随着技术的不断进步,ChatGPT解除限制字数的问题正在逐渐得到解决。 ChatGPT之所以在一开始限制字数,主要是出于技术原因。对话生成是一个非常...http://chatgpt.kuyin.cn/article/3113041.html
7.ChatGPT对网络安全的影响三ChatGPT 对网络安全的影响 众所周知,AI 对网络安全带来了巨大而深刻的影响,它既被用来改进和加强网络安全解决方案,帮助人类分析师更快地分类威胁和修复漏洞,也被黑客用来发动更大规模、更复杂的网络攻击。那么以 AI 为核心的ChapGPT 又能给网络安全带来什么新的影响呢?我们可以从以下两方面展开来看: ...http://www.lnsm.gov.cn/lnsm/bmcs/2024032910152426184/index.shtml
8.ChatGPT常见问题解决办法汇总,看完帮你解决90%的报错故障!3、对ChatGPT回答的行数或者字数做出限制。如果输出的是代码,限制行数比限制字数更管用一些。让它每次只出现前10-20行,然后是接下来的10行,直到结束来解决这个问题。 17. “We’re Currently processing too many requests. Please try again later. ” ...https://www.vinuxclub.com/ai/5100.html
9.《人工智能国际治理观察》164期该监管机构怀疑ChatGPT违反了欧盟的《通用数据保护条例》(General Data Protection Regulation,简称GDPR),并要求其停止处理意大利的个人数据。监管机构要求OpenAI必须提高透明度,并发布一份信息通告,全面概述其数据处理实践。此外,监管机构还要求OpenAI立即实施严格的年龄限制措施和验证方法,以防止未成年人访问其技术。此外,...https://aiig.tsinghua.edu.cn/info/1442/1884.htm
10.ChatGPT如何注册?解决ChatGPT国内手机号无法验证问题目前ChatGPT尚未开放对中国大陆地区用户注册,因此大家要使用可能需要国外IP才能注册,注册后还需要进行手机号验证,因此你还需要这些地区的手机号来进行短信验证。 你需要准备以下工具: 准备一个国外的手机号 自备科学上网工具或你身在国外 PC浏览器,推荐Chrome或Edge的无痕模式 ...https://www.gametop10.cn/340.html
11.专家学者共议ChatGPT数据安全与解决之道“ChatGPT等聊天机器人还会带来数据越狱等新问题,例如通过提示语注入等方式,引导人工智能模型去绕过其已有的伦理、道德或开发锁定的模式,甚至绕过相关政策法规的限制,将训练集核心数据和关键文档‘套取’出来。”蓝靖强调,此外,数据窃取问题也是一个新问题。当前一些小模型可能通过数据窃取技术从大模型中偷取数据,例如斯坦...https://news.southcn.com/node_d75048eff3/f3ab439b58.shtml
12.为了搞懂数字化转型,我连问ChatGPT42个问题,通透!我对数字化转型有很多的疑问,这次向ChatGPT请教,连问42个问题,瞬间觉得通透了很多。 下面是我的问题和ChatGPT的回复,近3万字,估计已经可以汇编成一本名叫《数字化转型问题答疑集》的小册子了,共分为概念篇、方法篇、实践篇和数据篇,希望能带给你新的启示! https://blog.itpub.net/70024420/viewspace-2999908/
13.背完这篇又全又新的「专题笔记」,随他怎么考「国际传播」!请结合国际传播实践,分析如何加强我国国际传播能力建设(华侨大学专硕,2022)4.试分析新冠肺炎疫情背景下国际传播的新变化(北京外国语大学专硕,2022)5.中国如何用实践丰富国际传播话语内容(山西大学专硕,2022)6.论述怎么讲好中国故事,提高国际传播力(北京师范大学专硕,2022)7.材料题:请说明加强中国国际传播能力的重要性,...https://www.douban.com/note/855784833/
14.ChatGPT报错集锦&解决方案腾讯云开发者社区ChatGPT报错集锦 & 解决方案 新增两个报错: 第一个:进官网登录的 - Login是登录 你们英语居然比我还差 第二个:登录超时 - 返回重新登录 其他常见报错: 第一个: 线路IP不行,换其他线路都测一遍,如果都不行就换T子吧 图1:OpenAI在您的国家不可用 - 换线路: ...https://cloud.tencent.com/developer/news/1231296
15.国内ChatGPT注册教程全攻略(解决国外手机号问题)在国内怎么注册chatGPT呢?没有海外手机号码也能注册chatGPT,本文详细分享国内chatGPT注册教程全攻略(解决国外手机号问题) 1,chatGPT官网注册准备: 注册和登陆需要魔法上网,可以使用国外的网络环境,即你的网络的IP属于国外(大陆、香港、澳门等地区不能使用)。日本、美国、新加坡等区域亲测可以(看网络上不少网友反馈港...https://www.ainiseo.com/question/13664.html
16.周宁静人工智能时代犯罪参与理论面临的挑战及应对——以ChatGPT...核心技术层面:即InstructGPT,主要指基于人类反馈的强化学习(RLHF,Reinforcement Learning with Human Feedback),使得ChatGPT的产出与人类的常识、认知、需求、价值观保持一致性;5.特点:虚假事实内容减少,生成的毒性内容更少,在一定程度上解决了基于演绎推理、欺骗性反应等产生的缺陷,使对话内容更具日常有用性与较高的...https://web.shobserver.com/sgh/detail?id=1421189