![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2Fe5af7ff4-115b-4a33-a27b-1a14895f70c0%2FUntitled.png%3Ftable%3Dblock%26id%3D1fb009b7-6e3d-4350-a1d7-2d3f6c6bbc3c%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DAH3ZmisA0I0ZFoJ2Kugn5ww4e47YRKEbA_BCrDmUdXs?table=block&id=1fb009b7-6e3d-4350-a1d7-2d3f6c6bbc3c&cache=v2)
只是每次增加一个词而已
ChatGPT能够自动生成一些甚至在表面上看起来像人类写的文字的东西,这很了不起,而且出乎意料。但它是如何做到的呢?为什么它能发挥作用?我在这里的目的是大致介绍一下ChatGPT的内部情况,然后探讨一下为什么它能很好地生成我们认为是有意义的文本。我应该在一开始就说,我将把重点放在正在发生的事情的大画面上,虽然我将提到一些工程细节,但我不会深入研究它们。(我所说的本质也同样适用于目前其他的 "大型语言模型"[LLMs]和ChatGPT。)
首先要解释的是,ChatGPT从根本上说一直在努力做的是对它目前得到的任何文本进行 "合理的延续",这里的 "合理 "是指 "在看到人们在数十亿个网页上写的东西之后,人们可能期望某人写的东西,等等。”
因此,假设我们有这样一段文字:"人工智能最好的东西是它的能力"。想象一下,扫描数十亿页的人类书写的文本(比如在网络上和数字化书籍中),并找到这个文本的所有实例 —— 然后看下一个词是什么时候出现的。ChatGPT有效地做了类似的事情,除了(正如我将解释的)它不看字面文本;它寻找在某种意义上 "意义相符 "的东西。但最终的结果是,它产生了一个可能紧随其后的词的排序列表,以及 "概率"。
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2Ff467b97e-8340-4211-847a-0c26e7baa2b6%2FUntitled.png%3Ftable%3Dblock%26id%3D07b136ca-bc1b-4e9b-862b-d0430c7c81bb%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DbRXu6mG3lZVMDTe8MaI2y5pBRn2Y7ilIcosrbsMy1Ec?table=block&id=07b136ca-bc1b-4e9b-862b-d0430c7c81bb&cache=v2)
值得注意的是,当ChatGPT做一些事情,比如写一篇文章时,它所做的基本上只是一遍又一遍地问:"鉴于到目前为止的文本,下一个词应该是什么?"--而且每次都添加一个词。(更准确地说,正如我将解释的那样,它在添加一个 "标记",这可能只是一个词的一部分,这就是为什么它有时可以 "编造新词")。
但是,好吧,在每一步,它都会得到一个带有概率的单词列表。但是,它究竟应该选择哪个词来添加到它正在写的文章(或其他什么)中呢?人们可能认为它应该是 "排名最高 "的词(即被分配到最高 "概率 "的那个)。但是,这时就会有一点巫术开始悄悄出现。因为出于某种原因--也许有一天我们会有一个科学式的理解--如果我们总是挑选排名最高的词,我们通常会得到一篇非常 "平淡 "的文章,似乎从来没有 "显示出任何创造力"(甚至有时一字不差地重复)。但是,如果我们有时(随机地)挑选排名较低的词,我们会得到一篇 "更有趣 "的文章。
这里有随机性的事实意味着,如果我们多次使用相同的提示,我们很可能每次都得到不同的文章。而且,为了与巫术的想法保持一致,有一个特定的所谓 "温度 "参数,它决定了排名较低的词被使用的频率,对于论文的生成,事实证明,0.8的 "温度 "似乎是最好的。(值得强调的是,这里没有使用任何 "理论";这只是一个在实践中被发现有效的问题)。例如,"温度 "的概念之所以存在,是因为统计物理学中熟悉的指数分布刚好被使用,但没有 "物理 "联系——至少到目前为止我们知道。)
在我们继续之前,我应该解释一下,为了论述的目的,我大多不会使用ChatGPT中的完整系统;相反,我通常会使用更简单的GPT-2系统,它有一个很好的特点,那就是它足够小,可以在标准的台式电脑上运行。因此,对于我展示的所有内容,我将能够包括明确的沃尔弗拉姆语言代码,你可以立即在你的计算机上运行。(点击这里的任何图片可以复制它背后的代码)。
例如,这里是如何获得上述概率表的。首先,我们必须检索底层的 "语言模型 "神经网络。
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2F9b169f65-b0bb-45ef-9f98-cd0c26fd62b2%2FUntitled.png%3Ftable%3Dblock%26id%3D5b32234d-193f-4790-a5a5-2110297592e4%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DES82GUqQbF044g5mo3jSJvG-cioKK6szsOqc2u0OB98?table=block&id=5b32234d-193f-4790-a5a5-2110297592e4&cache=v2)
稍后,我们将看看这个神经网的内部,并谈谈它是如何工作的。但现在我们可以把这个 "网络模型 "作为一个黑匣子应用到我们迄今为止的文本中,并要求按概率计算出模型说应该遵循的前五个词。
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2F866b11d7-7067-4fdf-9965-ce60cc2dadc6%2FUntitled.png%3Ftable%3Dblock%26id%3Dd6ad8d07-be36-4605-b983-d647fd095069%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3D5YTYNKcDsbYOxCzkAF6DulnuiI4SRsUMbjsXwYTb0jA?table=block&id=d6ad8d07-be36-4605-b983-d647fd095069&cache=v2)
这就把这个结果变成了一个明确的格式化的 "数据集"。
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2F2f649b81-fba2-4b97-9e25-cdda0d971fb6%2FUntitled.png%3Ftable%3Dblock%26id%3De2d8a430-152d-42c1-a745-6ad44e2163b2%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DHmuG7juWBtjnUwoCV63uxhCStkZRVLd7rfiCDf8Vejw?table=block&id=e2d8a430-152d-42c1-a745-6ad44e2163b2&cache=v2)
下面是重复 "应用模型 "的情况——在每一步中加入概率最高的词(在此代码中指定为模型中的 "决定")。
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2F9f0587cb-5b75-4842-9d0e-e6b2ca5ea91f%2FUntitled.png%3Ftable%3Dblock%26id%3D82b9d605-ddf8-4bda-8ce6-d9f0c785cf9e%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DDbnYSXdvx8XLmfr2sBAiyB64WHUqAUJCusv22D9mcUU?table=block&id=82b9d605-ddf8-4bda-8ce6-d9f0c785cf9e&cache=v2)
如果再继续下去会怎样?在这种("零温度")情况下,很快就会出现相当混乱和重复的情况:
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2Fe0531557-39a9-4888-9978-831a1352876b%2FUntitled.png%3Ftable%3Dblock%26id%3Da93f1dfc-f05e-40aa-8283-80629fe133dd%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DtyYWEsvUXfNhKesZeOvxOf3F3VIBQgC0_M-FU3KvAUI?table=block&id=a93f1dfc-f05e-40aa-8283-80629fe133dd&cache=v2)
但如果不总是挑选 "顶级 "词,而是有时随机挑选 "非顶级 "词("随机性 "对应 "温度 "为0.8)呢?人们又可以建立起文本:
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2F7aa21b79-5297-4276-864f-36975e542869%2FUntitled.png%3Ftable%3Dblock%26id%3D2e606845-738b-4a75-a2c3-49d99f760a63%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DDc7gRr7Hkku2MPHyx_fyZ3uauDWcp0fViN9zndUIUaw?table=block&id=2e606845-738b-4a75-a2c3-49d99f760a63&cache=v2)
而每次这样做,都会有不同的随机选择,文本也会不同——如这5个例子:
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2F99633c3e-31e6-4e24-843b-8f5aca1338f4%2FUntitled.png%3Ftable%3Dblock%26id%3D691b12e5-d0a9-46ef-b855-e7eb4593a579%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3DF20myxriSFVq_rtz4jTDKEcZC0n0YrnNhYmnFB57g8g?table=block&id=691b12e5-d0a9-46ef-b855-e7eb4593a579&cache=v2)
值得指出的是,即使在第一步,也有很多可能的 "下一个词 "可供选择(温度为0.8),尽管它们的概率下降得相当快(而且,是的,这个对数图上的直线对应于n-1的 "幂律 "衰减,这是语言的一般统计中非常有特点的):
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fd54b0f25-9426-4b83-9c51-2e6165a030b2%2F330b9782-3c7c-4e7b-84e8-3a4377c67e81%2FUntitled.png%3Ftable%3Dblock%26id%3Daea18655-ebf8-418c-9f3c-a3632a8dbb77%26spaceId%3Dd54b0f25-9426-4b83-9c51-2e6165a030b2%26expirationTimestamp%3D1725048000000%26signature%3D_noiFDEJWutGT7sbFoMBr4rFgJKqn5uxCYKHwg0h8fc?table=block&id=aea18655-ebf8-418c-9f3c-a3632a8dbb77&cache=v2)