ChatGPT正在做什么...以及为什么它有效?

原文地址:What Is ChatGPT Doing … and Why Does It Work? 

2023 年 2 月 14 日

只需一次添加一个单词

ChatGPT可以自动生成一些读起来就像人类书写的文本一样的东西,这是了不起的,也是出乎意料的但它是如何做到的呢?为什么它有效?我在这里的目的是粗略地概述 ChatGPT 内部正在发生的事情,然后探索为什么它可以很好地生成我们认为有意义的文本。我应该在一开始就说,我将重点关注正在发生的事情的大局,虽然我会提到一些工程细节,但我不会深入探讨它们。(我所说的本质同样适用于其他当前的“大型语言模型”[LLM] 和 ChatGPT。)

首先要解释的是,ChatGPT 从根本上一直在尝试做的是对迄今为止所获得的任何文本进行“合理的延续”,其中“合理”的意思是“人们在看到人们写的内容后可能期望某人写什么”已经写在数十亿个网页上,等等。”

假设我们已经得到了文本“人工智能最好的事情是它的能力”。想象一下,扫描数十亿页的人类书写文本(例如在网络上和数字化书籍中)并找到该文本的所有实例,然后查看接下来出现的单词是什么时间。ChatGPT 有效地做了类似的事情,除了(正如我将解释的)它不查看文字文本;它寻找某种意义上“意义匹配”的事物。但最终的结果是,它生成了一个可能跟随的单词的排名列表,以及“概率”:

值得注意的是,当 ChatGPT 做类似写文章之类的事情时,它本质上只是一遍又一遍地询问“给定到目前为止的文本,下一个单词应该是什么?”,并且每次都添加一个单词。(更准确地说,正如我将解释的那样,它添加了一个“标记”,它可能只是单词的一部分,这就是为什么它有时可以“组成新单词”。)

但是,好吧,在每一步它都会得到一个带有概率的单词列表。但它实际上应该选择哪一篇来添加到它正在写的文章(或其他内容)中呢?人们可能认为它应该是“排名最高”的单词(即被分配最高“概率”的单词)。但这就是一点巫毒开始蔓延的地方。因为出于某种原因——也许有一天我们会对它有一个科学式的理解——如果我们总是选择排名最高的单词,我们通常会得到一个非常好的单词。 “平淡”的文章,似乎从来没有“表现出任何创造力”(甚至有时逐字重复)。但如果有时(随机)我们选择排名较低的单词,我们会得到一篇“更有趣”的文章。

事实上,这里存在随机性,这意味着如果我们多次使用相同的提示,我们每次都可能得到不同的文章。而且,为了与 voodoo 的思想保持一致,有一个特殊的所谓“温度”参数,它决定了排名较低的单词的使用频率,对于论文生成,事实证明 0.8 的“温度”似乎是最好的。(值得强调的是,这里没有使用“理论”;这只是在实践中发现有效的问题。例如,“温度”的概念之所以存在,是因为碰巧使用了统计物理学中熟悉的指数分布,但不存在“物理”联系——至少据我们所知。)

在我们继续之前,我应该解释一下,为了说明的目的,我基本上不会使用ChatGPT 中的完整系统;相反,我通常会使用更简单的GPT-2 系统,该系统具有一个很好的功能,即它足够小,可以在标准台式计算机上运行。因此,对于我展示的基本上所有内容,我都将能够包含显式的Wolfram 语言代码,您可以立即在计算机上运行它们。(点击此处任意图片即可复制其背后的代码。)

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

稍后,我们将深入研究这个神经网络,并讨论它是如何工作的。但目前我们可以将这个“网络模型”作为黑盒应用到我们的文本中,并根据模型所说的概率来询问前 5 个单词:

这将获取该结果并将其放入显式格式化的“数据集”中:

如果重复“应用模型”,会发生以下情况 - 在每一步添加具有最高概率的单词(在此代码中指定为模型的“决策”):

如果一个人持续更长时间会发生什么?在这种(“零温度”)情况下,结果很快就会变得相当混乱和重复:

但是,如果不是总是选择“顶部”单词,而是有时随机选择“非顶部”单词(“随机性”对应于“温度”0.8)呢?再次可以构建文本:

每次这样做时,都会做出不同的随机选择,并且文本也会不同 - 正如以下 5 个示例所示:

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

那么如果一个人持续更长时间会发生什么呢?这是一个随机的例子。它比顶部单词(零温度)的情况要好,但最多仍然有点奇怪:

这是使用最简单的 GPT-2 模型(2019 年起)完成的。使用更新、更大的 GPT-3 模型,结果会更好。这是使用相同“提示”生成的顶部单词(零温度)文本,但具有最大的 GPT-3 模型:

这是“温度 0.8”下的随机示例:

概率从何而来?

好的,ChatGPT 总是根据概率选择下一个单词。但这些概率从何而来?让我们从一个更简单的问题开始。让我们考虑一次生成一个字母(而不是单词)的英文文本。我们如何计算出每个字母的概率应该是多少?

我们能做的最简单的事情就是获取英文文本样本,并计算其中不同字母出现的频率。例如,这对维基百科关于“猫”的文章中的字母进行计数:

这对“狗”也有同样的作用:

结果相似,但不一样(“o”无疑在“dogs”文章中更常见,因为毕竟它出现在“dog”一词本身中)。尽管如此,如果我们采用足够大的英语文本样本,我们可以期望最终得到至少相当一致的结果:

如果我们只是生成具有这些概率的字母序列,我们会得到以下示例:

我们可以通过添加空格将其分解为“单词”,就好像它们是具有一定概率的字母一样:

我们可以通过强制“单词长度”的分布与英语中的一致来更好地制作“单词”:

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

这是字母本身的概率图:

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

例如,我们在这里看到,除了“u”行之外,“q”列是空白的(零概率)。好的,现在我们不再一次生成一个字母的“单词”,而是使用这些“2-gram”概率一次查看两个字母来生成它们。这是结果的示例,其中恰好包含一些“实际单词”:

有了足够多的英文文本,我们不仅可以对单个字母或字母对(2-grams)的概率进行很好的估计,而且还可以对较长的字母序列进行估计。如果我们生成n元语法概率逐渐变长的“随机词”,我们会看到它们逐渐变得“更现实”:

但现在让我们假设(或多或少像 ChatGPT 一样)我们正在处理整个单词,而不是字母。英语中大约有 40,000 个合理常用的单词。通过查看大量的英语文本语料库(比如几百万本书,总共有几千亿个单词),我们可以估计每个单词的常见程度。使用它,我们可以开始生成“句子”,其中每个单词都是独立随机挑选的,其出现在语料库中的概率相同。这是我们得到的示例:

毫不奇怪,这是无稽之谈。那么我们怎样才能做得更好呢?就像字母一样,我们不仅可以开始考虑单个单词的概率,还可以考虑单词对或更长n元语法的概率。成对进行此操作,以下是我们得到的 5 个示例,所有情况都从单词“cat”开始:

它变得稍微“看起来更明智”了。我们可能会想象,如果我们能够使用足够长的n元语法,我们基本上会“得到一个 ChatGPT”——从某种意义上说,我们会得到一些东西,可以生成具有“正确的整体文章”的文章长度的单词序列。概率”。但问题是:目前还没有足够的英文文本来推断这些概率。

网络爬虫中可能有几千亿个单词;数字化的书籍中可能还有数千亿字。但对于 40,000 个常见单词,即使可能的 2-gram 数量也已经是 16 亿个,而可能的 3-gram 数量则达到 60 万亿个。因此,即使从现有的文本中我们也无法估计所有这些的概率。当我们写到20个字的“论文片段”时,可能性的数量比宇宙中的粒子数量还多,所以从某种意义上说,它们永远不可能全部写下来。

所以,我们能做些什么?最重要的想法是建立一个模型,让我们能够估计序列出现的概率——即使我们从未在我们所查看的文本语料库中明确看到过这些序列。ChatGPT 的核心正是所谓的“大语言模型”(LLM),它的构建是为了很好地估计这些概率。

什么是模型?

假设您想知道(正如伽利略在 1500 年代末所做的那样)从比萨斜塔每一层投下的炮弹需要多长时间才能落地。好吧,您可以在每种情况下进行测量并制作结果表格。或者你可以做理论科学的本质:建立一个模型,给出某种计算答案的程序,而不仅仅是测量和记住每个案例。

假设我们有(有点理想化的)炮弹从不同楼层落下所需时间的数据:

我们如何计算从没有明确数据的地板上掉下来需要多长时间?在这种特殊情况下,我们可以使用已知的物理定律来解决这个问题。但假设我们拥有的只是数据,而我们不知道管辖这些数据的基本法律是什么。然后我们可能会做出一个数学猜测,比如也许我们应该使用直线作为模型:

我们可以选择不同的直线。但这是平均最接近我们给出的数据的一个。从这条直线我们可以估算出任何楼层的跌落时间。

我们怎么知道在这里尝试使用直线?在某种程度上我们没有。这只是数学上简单的东西,而且我们已经习惯了这样一个事实:我们测量的大量数据结果与数学上简单的东西非常吻合。我们可以尝试一些数学上更复杂的东西——比如a + x + 2——然后在这种情况下我们做得更好:

不过,事情也可能会变得很糟糕。就像这是我们可以用a + b / x + c sin( x )做的最好的事情:

值得理解的是,永远不存在“无模型模型”。您使用的任何模型都有一些特定的底层结构 - 然后是一组特定的“您可以转动的旋钮”(即您可以设置的参数)来适应您的数据。就 ChatGPT 而言,使用了大量此类“旋钮”——实际上,有 1750 亿个。

但值得注意的是,ChatGPT 的底层结构——“仅仅”有那么多参数——足以建立一个模型,“足够好”地计算下一个单词的概率,从而为我们提供合理的论文长度的文本片段。

类人任务模型

我们上面给出的例子涉及为数值数据建立一个模型,该模型本质上来自简单的物理学——几个世纪以来我们都知道“简单的数学适用”。但对于 ChatGPT,我们必须建立一个由人脑产生的人类语言文本模型。对于类似的事情,我们(至少现在)还没有“简单数学”之类的东西。那么它的模型会是什么样子呢?

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

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

然后,为了查明作为输入给出的图像是否对应于特定数字,我们可以与我们拥有的样本进行显式的逐像素比较。但作为人类,我们似乎确实做得更好——因为我们仍然可以识别数字,即使它们是手写的,并且有各种修改和扭曲:

当我们为上面的数值数据创建模型时,我们能够获取给定的数值x ,然后计算特定的ab的a + bx。因此,如果我们将这里每个像素的灰度值视为某个变量i,是否存在所有这些变量的某个函数——在评估时——告诉我们图像的数字是多少?事实证明,构造这样的函数是可能的。毫不奇怪,但它并不是特别简单。一个典型的例子可能涉及五十万次数学运算。

但最终的结果是,如果我们将图像的像素值集合输入到这个函数中,就会得到一个数字,指定我们拥有图像的哪个数字。稍后,我们将讨论如何构造这样的函数以及神经网络的思想。但现在让我们将该函数视为黑匣子,我们在其中输入手写数字的图像(作为像素值数组),然后得到这些对应的数字:

但这里到底发生了什么?假设我们逐渐模糊一个数字。有一段时间我们的函数仍然“识别”它,这里是“2”。但很快它就“失去了它”,并开始给出“错误”的结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值