分享

ChatGPT 的工作原理以及它为何能够产生连贯且多样化的对话1

本帖最后由 nettman 于 2023-5-21 23:48 编辑

1.png

它只是一次添加一个词

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

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

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


1.png

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

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

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

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


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


1.png

稍后,我们将深入了解这个神经网络,并讨论它是如何工作的。但是现在我们可以将这个“网络模型”作为一个黑盒子应用到我们的文本中,并按模型说应该遵循的概率要求前 5 个词:


1.png

这会获取该结果并将其变成一个明确格式化的“数据集”:


1.png

下面是如果重复“应用模型”会发生什么——在每一步添加具有最高概率的词(在此代码中指定为模型的“决定”):


1.png

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


1.png

但是,如果不是总是选择“顶级”词,而是有时随机选择“非顶级”词(“随机性”对应于“温度”0.8)怎么办?同样可以构建文本:


1.png

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


1.png

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

1.png

那么,如果持续时间更长会怎样?这是一个随机的例子。它比顶级(零温度)情况要好,但充其量还是有点奇怪:


1.png

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


1.png

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


1.png

概率从何而来?

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

我们可以做的一件非常简单的事情就是取一个英文文本样本,然后计算不同字母在其中出现的频率。因此,例如, 这会计算维基百科关于“猫”的文章中的字母 :


1.png

这对“狗”做了同样的事情:


1.png

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


1.png

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


1.png

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


1.png

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


1.png

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


这是字母本身的概率图:


1.png

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


1.png

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

1.png

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

1.png

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


1.png

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


1.png

它变得更加“明智”。我们可能会想象,如果我们能够使用足够长的 n -grams,我们基本上会“得到一个 ChatGPT”——从某种意义上说,我们会得到一些东西,它会生成文章长度的单词序列,并带有“正确的整体文章”概率”。但这就是问题所在:甚至没有足够多的英文文本能够推断出这些概率。

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

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


什么是模型?

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

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


1.png

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


1.png

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

我们怎么知道在这里尝试使用直线?在某种程度上我们没有。这只是数学上简单的东西,我们已经习惯了这样一个事实,即我们测量的大量数据被证明是数学上简单的东西。我们可以尝试一些数学上更复杂的东西——比如 1.png ——然后在这种情况下我们做得更好:


1.png

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


1.png

值得理解的是,从来没有“无模型模型”。你使用的任何模型都有一些特定的底层结构——然后是一组特定的“你可以转动的旋钮”(即你可以设置的参数)来适应你的数据。在 ChatGPT 的案例中,使用了很多这样的“旋钮”——实际上是 1750 亿个。

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

下一篇:ChatGPT 的工作原理以及它为何能够产生连贯且多样化的对话2
https://www.aboutyun.com/forum.php?mod=viewthread&tid=35212



------------------我的底线------------------------
中文版ChatGPT
https://chat.aboutyun.com/

加微信赠送Chat GPT教程:



获取更多资源:
领取100本书+1T资源
http://www.aboutyun.com/forum.php?mod=viewthread&tid=26480

大数据5个项目视频
http://www.aboutyun.com/forum.php?mod=viewthread&tid=25235

名企资源、名企面试题、最新BAT面试题、专题面试题等资源汇总
https://www.aboutyun.com/forum.php?mod=viewthread&tid=27732





没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条