问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ChatGPT的工作原理,这篇文章说清楚了!

创作时间:
作者:
@小白创作中心

ChatGPT的工作原理,这篇文章说清楚了!

引用
CSDN
1.
https://blog.csdn.net/qq_38220914/article/details/145969978

ChatGPT 能够自动生成一些读起来表面上甚至像人写的文字的东西,这非常了不起,而且出乎意料。但它是如何做到的?为什么它能发挥作用?我在这里的目的是大致介绍一下 ChatGPT 内部的情况,然后探讨一下为什么它能很好地生成我们认为是有意义的文本。

我首先要说明一下,我将把重点放在正在发生的事情的大的方向上,虽然我会提到一些工程细节,但我不会深入研究它们。(我所说的实质内容也同样适用于目前其他的 “大型语言模型” LLM 和 ChatGPT)。

首先要解释的是,ChatGPT 从根本上说总是试图对它目前得到的任何文本进行 “合理的延续”,这里的 “合理” 是指 “在看到人们在数十亿个网页上所写的东西之后,人们可能会期望某人写出什么”。

因此,假设我们已经得到了 “人工智能最好的是它能去做 ……” 的文本(“The best thing about AI is its ability to”)。想象一下,扫描数十亿页的人类书写的文本(例如在网络上和数字化书籍中),并找到这个文本的所有实例 —— 然后看到什么词在接下来的时间里出现了多少。

ChatGPT 有效地做了类似的事情,除了(正如我将解释的)它不看字面文本;它寻找在某种意义上 “意义匹配” 的东西。但最终的结果是,它产生了一个可能出现在后面的词的排序列表,以及 “概率”。

值得注意的是,当 ChatGPT 做一些事情,比如写一篇文章时,它所做的基本上只是反复询问 “鉴于到目前为止的文本,下一个词应该是什么?” —— 而且每次都增加一个词。(更准确地说,正如我将解释的那样,它在添加一个 “标记”,这可能只是一个词的一部分,这就是为什么它有时可以 “编造新词”)。

在每一步,它得到一个带有概率的单词列表。但是,它究竟应该选择哪一个来添加到它正在写的文章(或其他什么)中呢?人们可能认为它应该是 “排名最高” 的词(即被分配到最高 “概率” 的那个)。

但是,这时就会有一点巫术开始悄悄出现。因为出于某种原因 —— 也许有一天我们会有一个科学式的理解 —— 如果我们总是挑选排名最高的词,我们通常会得到一篇非常 “平淡” 的文章,似乎从来没有 “显示出任何创造力”(甚至有时一字不差地重复)。但是,如果有时(随机的)我们挑选排名较低的词,我们会得到一篇 “更有趣” 的文章。

这里有随机性的事实意味着,假如我们多次使用同一个提示,我们也很可能每次都得到不同的文章。而且,为了与巫术的想法保持一致,有一个特定的所谓 “温度” 参数(temperature parameter),它决定了以什么样的频率使用排名较低的词,而对于论文的生成,事实证明,0.8 的 “温度” 似乎是最好的。(值得强调的是,这里没有使用任何 “理论”;这只是一个在实践中被发现可行的问题)。例如,“温度” 的概念之所以存在,是因为恰好使用了统计物理学中熟悉的指数分布,但没有 “物理” 联系 —— 至少到目前为止我们如此认为。)

在我们继续之前,我应该解释一下,为了论述的目的,我大多不会使用 ChatGPT 中的完整系统;相反,我通常会使用更简单的 GPT-2 系统,它有一个很好的特点,即它足够小,可以在标准的台式电脑上运行。

因此,对于我展示的所有内容,包括明确的沃尔弗拉姆语言(Wolfram Language)代码,你可以立即在你的计算机上运行。(点击这里的任何图片都可以复制其背后的代码 —— 译者注:请查看文末的 “原文链接”,在其中点击图片获取代码)。

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

稍后,我们将看看这个神经网的内部,并谈谈它是如何工作的。但现在我们可以把这个 “网络模型” 作为一个黑匣子应用于我们迄今为止的文本,并要求按概率计算出该模型认为应该选择的前五个词:

这就把这个结果变成了一个明确的格式化的 “数据集”:

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

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

但是,如果不总是挑选 “顶级” 词,而是有时随机挑选 “非顶级” 词(“随机性” 对应 “温度” 为 0.8)呢?人们又可以建立起文本:

而每次这样做,都会有不同的随机选择,文本也会不同 —— 如这 5 个例子:

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

那么,如果继续下去会发生什么?这里有一个随机的例子。它比顶层词(零温度)的情况要好,但顶多还是有点奇怪:

这是用最简单的 GPT-2 模型(来自 2019 年)做的。用较新和较大的 GPT-3 模型,结果更好。这里是用同样的 “提示” 产生的顶部文字(零温度),但用最大的 GPT-3 模型:

这是 “温度为 0.8” 时的一个随机例子:

** **1

概率从何而来?

好吧,ChatGPT 总是根据概率来选择下一个词。但是这些概率从何而来?让我们从一个更简单的问题开始。让我们考虑一次生成一个字母(而不是单词)的英语文本。我们怎样才能算出每个字母的概率呢?

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

而这对 “狗”(dog) 也有同样的作用:

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

下面是我们得到的一个样本,如果我们用这些概率生成一个字母序列:

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

我们可以通过强迫 “字长” 的分布与英语中的分布相一致,在制造 “单词” 方面做得稍微好一点:

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

这里有一个字母本身的概率图:

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

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

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

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

显然,这是一派胡言。那么,我们如何才能做得更好呢?就像对待字母一样,我们可以开始考虑的不仅仅是单个词的概率,还有成对的或更长的词的 n-grams 的概率。在成对的情况下,以下是我们得到的 5 个例子,所有情况都是从 “猫” 这个词开始的:

它变得稍微 “看起来很合理” 了。我们可以想象,如果我们能够使用足够长的 n-grams,我们基本上会 “得到一个 ChatGPT” —— 在这个意义上,我们会得到一些东西,以 “正确的总体论文概率” 生成论文长度的单词序列。但问题是:没有足够的英文文本可以推导出这些概率。

在网络的抓取中,可能有几千亿个单词;在已经数字化的书籍中,可能有另外几千亿个单词。但是有了 4 万个常用词,即使是可能的 2-grams 的数量也已经是 16 亿了,可能的 3-grams 的数量是 60 万亿。

所以我们没有办法从现有的文本中估计出所有这些的概率。而当我们达到 20 个字的 “文章片段” 时,可能性的数量比宇宙中的粒子数量还要多,所以从某种意义上说,它们永远不可能全部被写下来。

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

** **2

什么是模型?

假设你想知道(就像伽利略在 15 世纪末所做的那样),从比萨塔的每一层落下的炮弹要多长时间才能落地。那么,你可以在每一种情况下测量它,并将结果制成表格。或者你可以做理论科学的精髓:建立一个模型,给出某种计算答案的程序,而不是仅仅测量和记住每个案例。

让我们想象一下,我们有(有点理想化的)数据,说明炮弹从不同楼层落下需要多长时间。

我们如何计算出它从一个我们没有明确数据的楼层落下需要多长时间?在这种特殊情况下,我们可以用已知的物理学定律来计算。但是,如果说我们所得到的只是数据,而我们不知道有什么基本定律在支配它。那么我们可以做一个数学上的猜测,比如说,也许我们应该用一条直线作为模型。

我们可以选择不同的直线。但这是平均来说最接近我们所给的数据的一条。而根据这条直线,我们可以估算出任何楼层的下降时间。

我们怎么知道要在这里尝试使用一条直线呢?在某种程度上我们不知道。这只是数学上简单的东西,而我们已经习惯了这样的事实:我们测量的很多数据都被数学上简单的东西很好地拟合了。我们可以尝试一些数学上更复杂的东西 —— 比如说 a + bx + cx2,然后在这种情况下,我们做得更好:

不过,事情可能会出大问题。比如这里是我们用 a + b/c + x sin(x) 最多也就做成:

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

但令人瞩目的是,ChatGPT 的底层结构 —— “仅仅” 有这么多的参数 —— 足以使一个计算下一个单词概率的模型 “足够好”,从而为我们提供合理的文章长度的文本。

— 3 —

类人的任务模型

我们上面举的例子涉及到为数字数据建立模型,这些数据基本上来自于简单的物理学 —— 几个世纪以来我们都知道 “简单数学适用”。但是对于 ChatGPT 来说,我们必须为人类语言文本建立一个模型,即由人脑产生的那种模型。而对于这样的东西,我们(至少现在)还没有类似 “简单数学” 的东西。那么,它的模型可能是什么样的呢?

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

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

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

当我们为上面的数字数据建立一个模型时,我们能够取一个给定的数字值 x,然后为特定的 a 和 b 计算 a + bx。

因此,如果我们把这里的每个像素的灰度值当作某个变量 xi,是否有一些所有这些变量的函数,在评估时告诉我们这个图像是什么数字?事实证明,有可能构建这样一个函数。不足为奇的是,这并不特别简单。一个典型的例子可能涉及 50 万次数学运算。

但最终的结果是,如果我们把一幅图像的像素值集合输入这个函数,就会得出一个数字,指定我们的图像是哪个数字。稍后,我们将讨论如何构建这样一个函数,以及神经网络的概念。但现在让我们把这个函数当作黑匣子,我们输入例如手写数字的图像(作为像素值的阵列),然后我们得到这些数字对应的数字:

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

但为什么我们说这是一个 “错误” 的结果呢?在这种情况下,我们知道我们通过模糊一个 “2” 得到所有的图像。但是,如果我们的目标是制作一个人类识别图像的模型,那么真正要问的问题是,如果遇到这些模糊的图像,在不知道其来源的情况下,人类会做什么。

如果我们从我们的功能中得到的结果通常与人类会说的话一致,我们就有一个 “好的模型”。而非微不足道的科学事实是,对于像这样的图像识别任务,我们现在基本上知道如何构建这样的函数。

我们能 “从数学上证明” 它们的作用吗?嗯,不能。因为要做到这一点,我们必须有一个关于我们人类正在做什么的数学理论。以 “2” 图像为例,改变几个像素。我们可以想象,只有几个像素 “不合适”,我们还是应该认为这个图像是 “2”。但这应该到什么程度呢?这是一个关于人类视觉感知的问题。而且,是的,对于蜜蜂或章鱼来说,答案无疑是不同的 —— 对于假定的外星人来说,可能完全不同。

— 3 —

神经网路

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号