1. 简介
本文旨在让没有计算机科学背景的人了解 ChatGPT 和类似的 AI 系统(GPT-3、GPT-4、Bing Chat、Bard 等)的工作原理。ChatGPT 是一个聊天机器人——一种建立在大型语言模型之上的对话式 AI 。这些肯定是文字,我们将把它们全部分解。在此过程中,我们将讨论它们背后的核心概念。本文不需要任何技术或数学背景。我们将大量使用隐喻来阐明这些概念。我们将讨论核心概念为何以它们的方式运作,以及我们可以期待或不期待像 ChatGPT 这样的大型语言模型做什么。
以下是我们要做的事情。我们将在不使用任何专业术语的情况下,简单介绍一些与大型语言模型和 ChatGPT 相关的术语。如果我必须使用专业术语,我会在不使用专业术语的情况下将其分解。我们将从最基础的“什么是人工智能”开始,然后逐步深入。我将尽可能多地使用一些重复的隐喻。我将从我们应该期望它们做什么或不应该期望它们做什么的角度来谈论这些技术的含义。
我们走吧!
1.什么是人工智能?
但首先,让我们先了解一些你可能经常听到的基本术语。什么是人工智能?
- 人工智能:一个实体执行的行为,如果人类做类似的事情,人们可能会合理地称之为智能。
用“智能”这个词来定义人工智能有点问题,但没有人能就“智能”的良好定义达成一致。不过,我认为这仍然相当有效。它基本上是说,如果我们看到某种人造的东西,它做的事情既有趣又有用,而且似乎有些不平凡,那么我们就可以称它为智能。例如,我们经常将“AI”一词归因于电脑游戏中的计算机控制角色。这些机器人中的大多数都是简单的if-then-else代码(例如,“如果玩家在射程内,则射击,否则移动到最近的巨石处寻求掩护”)。但如果我们的工作是让我们保持参与和娱乐,而不是做任何明显愚蠢的事情,那么我们可能会认为它们比实际情况更复杂。
一旦我们了解了某件事物的工作原理,我们可能不会留下太深刻的印象,并期待幕后有更复杂的东西。这完全取决于你对幕后发生的事情的了解程度。
关键点在于人工智能不是魔法。正因为它不是魔法,所以它才可以被解释。
让我们开始吧。
2.什么是机器学习?
您经常听到的与人工智能相关的另一个术语是机器学习。
- 机器学习:通过获取数据、形成模型、然后执行模型来创建行为的一种方法。
有时,手动创建一堆 if-then-else 语句来捕捉一些复杂的现象(如语言)太困难了。在这种情况下,我们会尝试找到一堆数据,并使用可以在数据中找到模式的算法来建模。
但是模型是什么呢?模型是一些复杂现象的简化。例如,模型车只是真实汽车的较小、较简单的版本,它具有许多属性,但并非旨在完全取代原车。模型车可能看起来很真实,并且可用于某些目的,但我们不能把它开到商店。
DALL-E 生成的桌子上的模型车图像。
就像我们可以制造更小、更简单的汽车一样,我们也可以制造更小、更简单的人类语言。我们使用“大型语言模型”这个术语,是因为从使用它们需要多少内存的角度来看,这些模型很大。生产中最大的模型,例如 ChatGPT、GPT-3 和 GPT-4 非常大,需要在数据中心服务器中运行的大型超级计算机来创建和运行。
3.什么是神经网络?
有很多方法可以从数据中学习模型。神经网络就是其中一种。该技术大致基于人类大脑如何由一个称为神经元的相互连接的脑细胞网络组成,这些脑细胞来回传递电信号,以某种方式让我们做所有的事情。神经网络的基本概念是在 20 世纪 40 年代发明的,而如何训练它们的基本概念是在 20 世纪 80 年代发明的。神经网络效率很低,直到 2017 年左右,计算机硬件才足够好,可以大规模使用它们。
但我喜欢用电路来比喻神经网络,而不是大脑。你不需要是电气工程师,也知道电流通过电线流动,而且我们有一种叫做电阻的东西,它使电流更难流过电路的某些部分。
假设您想制造一辆可以在高速公路上行驶的自动驾驶汽车。您已经在汽车的前面、后面和侧面安装了接近传感器。当附近有物体时,接近传感器会报告 1.0 的值;当附近没有物体时,接近传感器会报告 0.0 的值。
您还对汽车进行了改装,以便机器人机构可以转动方向盘、踩刹车和踩油门。当油门收到 1.0 的值时,它会使用最大加速度,而 0.0 则表示没有加速度。同样,发送给制动机构的 1.0 值表示猛踩刹车,而 0.0 表示不刹车。转向机构的取值范围为 -1.0 到 +1.0,负值表示左转,正值表示右转,0.0 表示保持直行。
您还记录了有关驾驶方式的数据。当前方道路畅通时,您会加速。当前方有车时,您会减速。当左侧有车离您太近时,您会向右转并变道。当然,除非您的右侧也有车。这是一个复杂的过程,涉及基于不同传感器信息组合的不同动作组合(左转、右转、加速或减速、刹车)。
现在你必须将传感器连接到机器人机构。你怎么做呢?目前还不清楚。所以你要将每个传感器连接到每个机器人执行器。
神经网络作为连接传感器和执行器的电路。
当你开车上路时会发生什么?电流从所有传感器流向所有机器人执行器,汽车同时左转、右转、加速和刹车。真是一团糟。
当我们的某些传感器发送能量时,该能量会流到所有执行器,汽车就会同时加速、刹车和转向。
这可不行。所以我拿起电阻器,开始将它们放在电路的不同部分,以便电流可以在某些传感器和某些机器人执行器之间更自由地流动。例如,我希望电流从前部近距离传感器更自由地流向制动器,而不是流向方向盘。我还放入了称为门的东西,它可以阻止电流流动,直到积累足够的电流来拨动开关(仅当前部近距离传感器和后部近距离传感器报告高数字时才允许电流流动),或者仅当输入电气强度较低时才向前发送电能(当前部近距离传感器报告低值时向加速器发送更多电力)。
但是我应该把这些电阻和门放在哪里呢?我不知道。我开始把它们随机地放在各处。然后我再试一次。也许这次我的车开得更好,这意味着有时当数据表明最好刹车时它会刹车,当数据表明最好转向时它会转向,等等。但它并不是一切都做对了。有些事情它做得更糟(当数据表明最好刹车时加速)。所以我继续随机尝试不同的电阻和门组合。最终我会偶然发现一个效果很好的组合,我宣布成功。也许它看起来像这样:
经过全面训练的神经网络。深色线条表示电路中能量流动更自由的部分。中间的圆圈是门,可能会从下方积累大量能量,然后再将能量传送到顶部,或者甚至可能在下面能量很少时将能量传送到上方。
(实际上,我们不会添加或减去始终存在的门,但我们会修改门,使它们以更少的来自下方的能量激活,或者需要更多的来自下方的能量,或者可能仅当来自下方的能量很少时才释放大量能量。机器学习纯粹主义者可能会对这种描述感到有点恶心。从技术上讲,这是通过调整门上的偏置来实现的,这通常不会显示在这样的图表中,但就电路隐喻而言,可以将其视为进入每个门的电线直接插入电源,然后可以像所有其他电线一样进行修改。)
让我们试驾一下吧!
随机尝试很糟糕。一种称为反向传播的算法可以相当好地猜测如何改变电路的配置。算法的细节并不重要,只要知道它对电路做了微小的改变,使电路的行为更接近数据所建议的,经过数千或数百万次调整,最终可以得到接近数据的结果。
我们称电阻和门为参数,因为实际上它们无处不在,而反向传播算法所做的就是声明每个电阻更强或更弱。因此,如果我们知道电路的布局和参数值,就可以在其他汽车中重现整个电路。
4.什么是深度学习?
深度学习认识到,除了电阻和门之外,我们还可以把其他东西放入电路中。例如,我们可以在电路中间进行数学计算,在将电流传送出去之前将数字相加和相乘。深度学习仍然使用相同的基本增量技术来猜测参数。
5.什么是语言模型?
当我们以汽车为例时,我们试图让神经网络做出与我们的数据一致的行为。我们想知道我们是否可以创建一个电路,以与驾驶员在类似情况下一样的方式操纵汽车中的机械装置。我们可以用同样的方式处理语言。我们可以查看人类编写的文本,并想知道电路是否可以产生与人类倾向于产生的单词序列非常相似的单词序列。现在,当我们看到单词时,我们的传感器就会启动,我们的输出机制也是单词。
我们想做什么?我们想创建一个电路,根据输入的一堆单词猜测输出单词。例如:
“很久以前 ____”
似乎应该用“时间”而不是“犰狳”来填空。
我们倾向于用概率来讨论语言模型。从数学上讲,我们将上述示例写为:
如果您不熟悉该符号,请不要担心。这只是数学术语,表示给定(竖线符号表示给定)一堆单词“once”、“upon”和“a”时单词“time”的概率 ( P ) 。我们期望一个好的语言模型产生单词“time”的概率高于单词“armadillo”。|
我们可以将其概括为:
这只是意味着根据给定的所有单词(位置 1 到n -1 的单词)来计算序列中第 n个单词的概率。
但是让我们稍微回顾一下。想象一下老式的打字机,就是那种带有击针臂的打字机。
DALL-E2 制作了这张图片。看看所有的击球臂!
只不过我们不是为每个字母配备不同的打针臂,而是为每个单词配备一个打针臂。如果英语有 50,000 个单词,那么这就是一台大型打字机!
想象一下类似的网络,而不是汽车的网络,只不过电路顶部有 50,000 个输出连接到撞针臂,每个单词一个。相应地,我们将有 50,000 个传感器,每个传感器检测不同输入单词的存在。所以我们最终要做的是选择一个获得最高电信号的撞针臂,这就是填入空白处的单词。
我们现在的处境是这样的:如果我想制作一个接收单个单词并生成单个单词的简单电路,我必须制作一个具有 50,000 个传感器(每个单词一个)和 50,000 个输出(每个撞击臂一个)的电路。我只需将每个传感器连接到每个撞击臂,总共 50,000 x 50,000 = 25 亿条电线。
底部的每个圆圈感应一个单词。需要 50,000 个传感器才能识别单词“once”。能量通过某个任意网络发送。顶部的所有圆圈都连接到每个单词的撞击臂。所有撞击臂都会接收一些能量,但其中一个撞击臂接收的能量会比其他撞击臂多。
那是一个很大的网络!
但情况变得更糟。如果我想做“从前有个___”的例子,我需要感知三个输入位置中的每一个单词。我需要 50,000 x 3 = 150,000 个传感器。连接多达 50,000 个打击臂,我就可以得到 150,000 x 50,000 = 75 亿条线路。截至 2023 年,大多数大型语言模型可以容纳 4,000 个单词,最大的可以容纳 32,000 个单词。我的眼睛都流泪了。
以三个单词作为输入的网络每个单词需要 50,000 个传感器。
我们需要一些技巧来处理这种情况。我们将分阶段进行。
5.1 编码器
我们要做的第一件事是将电路分成两个电路,一个称为编码器,另一个称为解码器。很多单词的意思大致相同。考虑以下短语:
国王坐在___上
王后坐在___上
公主坐在___上
摄政王坐在___上
上述所有空白的合理猜测是“王座”(或者可能是“厕所”)。也就是说,我可能不需要在“国王”和“王座”之间,或者在“女王”和“王座”之间等之间单独接线。相反,如果我有某种近似表示皇室的东西,并且每次看到“国王”或“女王”时,我都使用这种中间的东西,那就太好了。然后我只需要担心哪些词的意思大致相同,然后如何处理它(将大量能量传送到“王座”)。
所以这就是我们要做的事情。我们将设置一个电路,该电路需要 50,000 个字传感器,并映射到一些较小的输出集,比如 256 个而不是 50,000 个。而且,我们不仅可以触发一个撞击臂,还可以同时压碎一堆撞击臂。撞击臂的每种可能组合都可以代表不同的概念(例如“皇室”或“装甲哺乳动物”)。这 256 个输出将使我们能够表示 2²⁵⁶ = 1.15 x 10⁷⁸ 个概念。实际上,它甚至更多,因为就像在汽车示例中我们可以将刹车踩到一半一样,这 256 个输出中的每一个不仅可以是 1.0 或 0.0,还可以是介于两者之间的任何数字。所以也许更好的比喻是,所有 256 个撞击臂都会压下,但每个压下的力度都不同。
好的……以前一个单词需要 50,000 个传感器中的一个来触发。现在,我们将一个激活的传感器和 49,999 个关闭的传感器精简为 256 个数字。因此,“国王”可能是 [0.1, 0.0 , 0.9, …, 0.4],“女王”可能是 [0.1, 0.1 , 0.9, …, 0.4],它们几乎相同。我将这些数字列表称为编码(由于历史原因也称为隐藏状态,但我不想解释这一点,所以我们将继续使用编码)。我们将将 50,000 个传感器压缩成 256 个输出的电路称为编码器。它看起来像这样:
编码器网络将检测单个单词所需的 50,000 个传感器值压缩为 256 个数字的编码(较浅和较深的蓝色用于表示较高或较低的值)。
5.2 解码器
但编码器不会告诉我们下一个单词应该是哪个。因此,我们将编码器与解码器网络配对。解码器是另一个电路,它采用 256 个数字组成编码,并激活原始的 50,000 个打击臂,每个单词一个。然后,我们会选择电输出最高的单词。它看起来是这样的:
解码器网络将编码中的 256 个值扩展为与每个可能的单词相关的 50,000 个打击臂的激活值。一个单词激活最高的一个。
5.3 编码器和解码器一起
以下是编码器和解码器协同工作以形成一个大型神经网络的情况:
编码器-解码器网络。它只是一个位于编码器顶部的解码器。
顺便说一句,经过编码后,单个单词输入到单个单词输出只需要 (50,000 x 256) x 2 = 2560 万个参数。这似乎好多了。
这个例子是一个单词的输入,产生一个单词的输出,所以如果我们想读n 个单词,我们需要 50,000 x n 个输入,而编码则需要256 x n 个输入
但为什么这样做有效呢?通过强制将 50,000 个单词全部放入一小组数字中,我们迫使网络做出妥协并将可能触发相同输出单词猜测的单词组合在一起。这很像文件压缩。当您压缩文本文档时,您会得到一个不再可读的较小文档。但您可以解压缩文档并恢复原始可读文本。这是可以做到的,因为 zip 程序用简写符号替换了某些单词模式。然后,当它解压缩时,它知道要将哪些文本换回简写符号。我们的编码器和解码器电路学习了电阻器和门的配置,这些配置可以压缩然后解压缩单词。
5.4 自我监督
我们如何知道每个单词的最佳编码?换句话说,我们如何知道“king”的编码应该与“queen”的编码相似,而不是“armadillo”的编码?
作为一个思想实验,考虑一个编码器-解码器网络,它应该接收一个单词(50,000 个传感器)并产生与输出完全相同的单词。这是一件愚蠢的事情,但它对接下来的事情很有启发。
经过训练的编码器-解码器网络输出与输入相同的单词(与之前的图像相同,但使用颜色进行激活)。
我输入单词“king”,然后单个传感器通过编码器发送电信号,并在中间部分打开编码中的 256 个值。如果编码正确,则解码器将向同一个单词“king”发送最高电信号。对吧,很简单?别急。我很可能会看到带有单词“armadillo”的击打臂具有最高的活化能。假设“king”的击打臂获得 0.051 电信号,而“armadillo”的击打臂获得 0.23 电信号。实际上,我甚至不关心“armadillo”的值是多少。我只需查看“king”的输出能量即可知道它不是 1.0。1.0 和 0.051 之间的差异是误差(也称为损失),我可以使用反向传播对解码器和编码器进行一些更改,以便下次我们看到单词“king”时进行略微不同的编码。
我们对所有单词都这样做。编码器必须做出妥协,因为 256 比 50,000 小得多。也就是说,有些单词必须在中间使用相同的激活能量组合。因此,当有选择时,它会希望“king”和“queen”的编码几乎相同,而“armadillo”的编码则非常不同。这将使解码器只需查看 256 个编码值,就能更好地猜测单词。如果解码器看到 256 个值的特定组合,并猜测“king”为 0.43,而“queen”为 0.42,只要“king”和“queen”获得最高的电信号,并且 49,998 个打击臂中的每一个都获得较小的数字,我们就可以接受。换句话说,我们可能更愿意接受网络混淆国王和皇后,而不是混淆国王和犰狳。
我们说神经网络是自监督的,因为与汽车示例不同,你不必收集单独的数据来测试输出。我们只需将输出与输入进行比较——我们不需要为输入和输出分别收集数据。
5.5 掩蔽语言模型
如果上述思想实验看起来有点傻,那么它就是所谓的掩码语言模型的基础。掩码语言模型的理念是接收一个单词序列并生成一个单词序列。输入和输出中的一个单词被隐藏。
[面具]坐在王座上。
网络会猜测所有单词。好吧,猜测未屏蔽的单词相当容易。我们真正关心的只是网络对屏蔽单词的猜测。也就是说,输出中的每个单词都有 50,000 个 striker arms。我们查看屏蔽单词的 50,000 个 striker arms。
屏蔽序列。我厌倦了绘制大量连接线,所以我只画红线来表示上下所有事物之间的大量连接。
我们可以移动掩码并让网络猜测不同位置的不同单词。
一种特殊类型的掩码语言模型仅在末尾有掩码。这被称为生成模型,因为它猜测的掩码始终是序列中的下一个单词,这相当于生成下一个单词,就好像下一个单词不存在一样。像这样:
[面具]
女王 [面具]
女王坐在 [面具] 女王坐在 [面具]
女王坐在 [面具]
女王坐在 [面具]
我们也称其为自回归模型。回归这个词听起来不太好。但回归只是意味着试图理解事物之间的关系,比如输入的单词和应该输出的单词。自动的意思是“自我”。自回归模型是自我预测的。它预测一个单词。然后用这个词来预测下一个单词,再用这个单词来预测下一个单词,依此类推。这其中有一些有趣的含义,我们稍后会再讨论。
6.什么是 Transformer?
截至撰写本文时,我们听到了很多关于 GPT-3、GPT-4 和 ChatGPT 的消息。GPT 是一家名为 OpenAI 的公司开发的一种大型语言模型的特定品牌。GPT 代表生成式预训练 Transformer。让我们来分析一下:
- 生成性。该模型能够生成所提供的输入的延续。也就是说,给定一些文本,模型会尝试猜测接下来会出现哪些单词。
- 预先训练。该模型是在非常大的通用文本语料库上进行训练的,只需训练一次即可用于许多不同的事情,而无需从头开始重新训练。
更多关于预训练的内容… 该模型是在非常大的通用文本语料库上训练的,该语料库表面上涵盖了大量可以想象到的主题。这或多或少意味着“从互联网上抓取”,而不是从一些专门的文本存储库中获取。通过对通用文本进行训练,语言模型能够比例如对特定类型的文本(如医学文档)进行训练的语言模型更能响应更广泛的输入。在通用语料库上训练的语言模型理论上可以合理地响应互联网文档中可能出现的任何内容。它可能可以很好地处理医学文本。仅在医学文档上训练的语言模型可能对与医学背景相关的输入反应良好,但在响应其他输入(如闲聊或食谱)时会非常糟糕。
要么模型在很多方面都足够好,人们永远不需要训练自己的模型,要么人们可以做一些称为微调的事情,这意味着采用预先训练的模型并对其进行一些更新,以使其在专门任务(如医疗)上更好地工作。
现在来看看变压器……
- Transformer。一种特定类型的自监督编码器-解码器深度学习模型,具有一些非常有趣的特性,使其擅长语言建模。
Transformer是一种特殊的深度学习模型,它以特定的方式转换编码,使猜测被忽略的单词变得更容易。2017 年,Vaswani 等人在一篇名为《注意力就是你所需要的一切》的论文中介绍了它。Transformer的核心是经典的编码器-解码器网络。编码器执行非常标准的编码过程。简单到让你大吃一惊。但它还添加了另一个东西,称为自注意力。
6.1 自注意力
自注意力的理念如下:序列中的某些单词与序列中的其他单词相关。考虑这句话“外星人降落在地球上,因为它需要躲在行星上。”如果我们屏蔽掉第二个单词“外星人”,并让神经网络猜出这个词,它会有更好的机会,因为有“降落”和“地球”这样的词。同样,如果我们屏蔽掉“它”,并让网络猜这个词,单词“外星人”的存在可能会让它更有可能选择“它”而不是“他”或“她”。
词语之间通过功能、指代同一事物或相互传达含义而相互关联。
我们说序列中的单词会关注其他单词,因为它们捕捉到了某种关系。这种关系不一定是已知的。它可能是解析代词,可能是动词和主语关系,可能是与同一概念相关的两个单词(“地球”和“行星”)。无论它是什么,知道单词之间存在某种关系对于预测很有用。
下一节将深入探讨自注意力的数学原理,但主要思想是,Transformer 会学习输入序列中哪些单词是相关的,然后为输入序列中的每个位置创建一个新的编码,该编码是所有相关单词的合并。你可以将其视为学习编造一个由“alien”、“landed”和“earth”(aliandearth?)混合而成的新词。这是可行的,因为每个单词都被编码为数字列表。如果alien = [0.1, 0.2, 0.3, …, 0.4] 且landed = [0.5, 0.6, 0.7, …, 0.8] 且earth = [0.9, 1.0, 1.1, …, 1.2],那么第二个单词位置可能被编码为所有这些编码的总和,[1.5, 1.8, 2.1, …, 2.4],它本身并不对应任何单词,但捕获了所有单词的片段。这样,当解码器最终在第二个位置看到该单词的新编码时,它就拥有大量关于该单词在序列中如何使用的信息,从而可以更好地猜测任何掩码。(该示例只是将编码加在一起,但实际情况会比这更复杂一些)。
6.2. 自注意力机制如何工作?
自注意力机制是对普通编码器-解码器网络的重大改进,因此如果您想进一步了解其工作原理,请继续阅读。否则,请随意跳过本节。TL;DR:自注意力机制是数学运算“点积”的别称。
自我注意力分为三个阶段。
(1)我们像平常一样对输入序列中的每个单词进行编码。我们对单词编码进行四份复制。一份我们称之为残差,并留作安全保管。
(2)我们对其他三个进行第二轮编码(我们正在编码一个编码)。每个编码过程都不同,因此它们都变得不同。我们将其中一个称为查询(q),一个称为键(k),一个称为值(v)。
我想让你想象一个哈希表(在 Python 中也称为字典)。表中存储了大量信息。表中的每一行都有一个键(一些唯一标识符)和值(存储在行中的数据)。要从哈希表中检索某些信息,您需要进行查询。如果查询与键匹配,则提取值。
哈希表可用于查询教授在哪所大学工作。
自注意力机制的工作原理有点像模糊哈希表。您提供一个查询,它不会寻找与键的精确匹配,而是根据查询和键之间的相似性找到近似匹配。但如果匹配不是完美匹配怎么办?它会返回该值的一部分。好吧,这只有在查询、键和值都是数字时才有意义。它们是:
具有部分匹配的哈希表。
这就是我们要做的。对于输入中的每个单词位置,我们将采用q编码和k编码并计算相似度。我们使用一种称为点积的东西,也称为余弦相似度。不重要。关键是每个单词都是一个包含 256 个数字的列表(基于我们之前的示例),我们可以计算数字列表的相似度并将相似度记录在矩阵中。我们将这个矩阵称为自注意力分数。如果我们有三个单词的输入序列,我们的注意力分数可能看起来像这样:
每个单元格表示一个位置上的编码词对另一个位置上的编码词的关注程度。
网络将第一个单词视为查询,并与第二个键匹配(我们可以说第一个单词“关注”第二个单词)。如果第二个单词是查询,它将与第三个键匹配。如果第三个单词是查询,它将与第一个键匹配。实际上,我们永远不会有这样的 1 和 0;我们会有 0 和 1 之间的部分匹配,并且每个查询(行)将与几个键(列)部分匹配。
现在继续使用检索隐喻,我们将此矩阵与v编码相乘,然后会发生一些有趣的事情。假设我们的v编码如下所示:
每一行都是序列中一个单词的编码。
也就是说,第一个单词被编码为 0.10…0.19 的数字列表,第二个单词被编码为 0.20…0.29 的数字列表,第三个单词被编码为 0.30…0.39 的数字列表。这些数字是为了说明目的而编造的,永远不会如此整齐。
通过价值观增加注意力。
第一个查询与第二个键匹配,因此检索第二个编码字。第二个查询与第三个键匹配,因此检索第三个编码字。第三个查询与第一个键匹配,因此检索第一个编码字。我们实际上所做的就是交换行!
实际上,分数不会是完美的 1 和 0,结果会是每种编码的一小部分混合在一起(例如,97% 的单词 1 加上 1% 或单词 3 加上单词 2 的 2%)。但这说明了自注意力是如何混合和交换的。在这个极端版本中,第一个单词被交换为第二个单词,依此类推。所以也许单词“earth”被交换为单词“planet”。
我们如何知道我们正确地编码了q、k和v?如果整个网络猜测掩码最佳单词的能力有所提高,那么我们就是正确地编码了q、k和v。如果没有,我们下次更改参数以进行稍微不同的编码。
(3)我们要做第三件事,就是把所有计算的结果加到残差中。还记得我们放在一边的原始编码的第一个副本吗?没错,我们将混合和交换后的版本添加到其中。现在,“earth”不仅仅是“earth”的编码,而是一个由“earth”和“planet”混合而成的虚构单词……pearth?ealanet?其实不是这样的。无论如何,这是将发送到解码器的最终转换编码。我们可能同意,在每个位置上都有一个假词,而这个假词实际上编码了两个或更多个单词,这对于基于每个位置的单个单词进行预测更有用。
然后再依次重复几次(多层)。
我省略了很多关于编码器的最终编码如何进入解码器的细节(另一轮注意,称为源注意,其中编码器对每个位置的编码用作q和k,以应用于另一个不同版本的v),但此时您应该对事情有一个大致的了解。最后,解码器从编码器接收编码,将能量发送到单词的打击臂,我们选择能量最强的单词。
7.大型语言模型为何如此强大?
那么这一切意味着什么呢?大型语言模型(包括 ChatGPT、GPT-4 等)只做一件事:它们接收一堆单词,并试图猜测下一个单词应该是什么。如果这是“推理”或“思考”,那么它只是一种非常特殊的形式。
但即使这种特殊形式似乎也很强大,因为 ChatGPT 和类似程序似乎可以很好地完成很多事情:写诗、回答有关科学和技术的问题、总结文档、起草电子邮件,甚至编写代码,仅举几例。它们为什么会这么好用呢?
秘诀有两个方面。第一个我们已经讨论过了:Transformer 学会混合单词上下文,使其非常擅长猜测下一个单词。秘诀的另一个部分是系统如何训练。大型语言模型是根据从互联网上抓取的大量信息进行训练的。这包括书籍、博客、新闻网站、维基百科文章、reddit 讨论、社交媒体对话。在训练期间,我们从其中一个来源输入一段文本,并要求它猜测下一个单词。记住:自我监督。如果它猜错了,我们会稍微调整模型,直到它猜对为止。如果我们要考虑 LLM 被训练做什么,那就是生成可能合理地出现在互联网上的文本。它无法记住互联网,因此它使用编码来做出妥协,结果会有点错误,但希望不会错得太离谱。
重要的是不要低估互联网上文本在主题方面的多样性。LLM 已经见识过一切。他们见过几乎所有主题的数十亿次对话。因此,LLM 可以生成看起来像是在与您对话的文字。它见过几乎所有可以想象到的诗歌和音乐歌词,因此它可以生成看起来像诗歌的文本。它见过数十亿份家庭作业及其解决方案,因此它可以对您的家庭作业做出合理的猜测,即使略有不同。它见过数十亿份标准化考试题目及其答案。我们真的认为今年的 SAT 题目与去年的题目有那么大的不同吗?它见过人们谈论他们的假期计划,因此它可以猜出看起来像假期计划的单词。它见过数十亿个代码执行各种操作的示例。计算机程序员所做的很多工作是将用于执行非常典型且易于理解的事情的代码片段组装成更大的代码块。因此,LLM 可以为您编写那些小而常见的代码片段。它看过 stackoverflow.com 上数十亿个错误代码示例及其更正。是的,所以它可以接受你的错误代码并提出修复建议。它看过数十亿人发推文说他们碰过热炉子并烫伤了手指,所以法学硕士知道一些常识。它读过很多科学论文,所以它可以猜出众所周知的科学事实,即使你并不了解这些事实。它看过数十亿人总结、将文本改写为要点、描述如何使文本更符合语法或更简洁或更有说服力的例子。
重点是:当你要求 ChatGPT 或其他大型语言模型做一些聪明的事情时——而且它确实成功了——你很有可能要求它做一些它已经见过数十亿个例子的事情。即使你想出了一些非常独特的东西,比如“告诉我 Flash Gordon 吃了六个墨西哥卷饼后会做什么”(这很独特吗,我甚至不知道),它也见过关于 Flash Gordon 的同人小说,也见过人们谈论吃太多墨西哥卷饼,并且可以——由于自我注意力——将零碎的信息混合搭配起来,得出一个听起来合理的回答。
与大型语言模型交互时,我们的第一反应不应该是“哇,这些东西一定非常聪明、非常有创造力或非常善解人意”。我们的第一反应应该是“我可能要求它做一些它之前已经见过的事情”。这可能意味着它仍然非常有用,即使它没有“认真思考”或“做一些非常复杂的推理”。
我们不需要使用拟人化方法来理解它如何为我们提供回应。
关于这个主题的最后一点说明:由于大型语言模型的工作方式和训练方式,它们倾向于提供一些中等响应的答案。在询问有关 Flash Gordon 的故事后,模型倾向于给出平均响应,这对我来说可能很奇怪。但在故事或诗歌的背景下,这些响应可以被认为是许多人(在互联网上写作)在不得不妥协时会想出的东西。这不会很糟糕。按照一个人坐着试图自己想出一些东西的标准,这可能相当不错。但你的故事和诗歌可能也只是普通的(但它们对你来说很特别)。抱歉。
8.我应该注意什么?
Transformer 的工作方式和训练方式确实带来了一些微妙的影响。以下是技术细节的直接影响。
- 大型语言模型是在互联网上训练的。这意味着它们也训练了人类的所有阴暗面。大型语言模型训练了种族主义言论、性别歧视言论、针对各种类型的人的各种侮辱、人们对他人的刻板假设、阴谋论、政治错误信息等。这意味着语言模型选择生成的单词可能会重复这些语言。
- 大型语言模型没有“核心信念”。它们是单词猜测器;它们试图预测如果同一句话出现在互联网上,下一个单词会是什么。因此,人们可以要求大型语言模型写一个支持某件事或反对某件事的句子,语言模型会遵循这两种方式。这些并不表明它相信这件事或另一件事,或改变其信念,或表明某件事比另一件事更正确。如果训练数据中有更多关于某件事的例子而不是另一件事,那么大型语言模型将倾向于更一致地响应训练数据中更频繁出现的内容,因为它更频繁地出现在互联网上。请记住:该模型正在努力模仿最常见的反应。
- 大型语言模型没有任何真理或对错感。有些事情我们认为是事实,比如地球是圆的。法学硕士往往会这么说。但如果上下文是正确的,它也会说相反的话,因为互联网上确实有关于地球是平的文字。法学硕士不能保证会提供真相。我们可能倾向于猜测我们认为是真的单词,但这是我们最接近声称法学硕士“知道”什么真理或对错的方式。
- 大型语言模型可能会犯错。训练数据可能包含大量不一致的材料。当我们提出问题时,自注意力可能不会关注我们想要它关注的所有事物。作为一个猜词器,它可能会做出不幸的猜测。有时,训练数据已经看到一个单词很多次,以至于它更喜欢那个单词,即使它对于输入来说没有意义。上述情况导致了一种称为“幻觉”的现象,即猜测的单词既不是来自输入,也不是“正确的”。LLM 倾向于猜测小数而不是大数,因为小数更常见。所以 LLM 不擅长数学。LLM 偏爱数字“42”,因为人类因为一本特定的名书而这样喜欢它。LLM 偏爱更常见的名字,所以可能会编造作者的名字。
- 大型语言模型是自回归的。因此,当它们做出我们认为错误的猜测时,这些猜测的单词会被添加到它们自己的输入中,从而猜测下一个单词。也就是说:错误会累积。即使出错的概率只有 1%,自注意力也会关注到这个错误的选择,并加倍处理这个错误。即使只犯了一个错误,之后的一切都可能与这个错误有关。然后语言模型可能会在此基础上犯下更多错误。Transformer 没有办法“改变主意”或重试或自我纠正。它们会顺其自然。
- 我们应该始终验证大型语言模型的输出。如果你要求它做一些你自己无法充分验证的事情,那么你应该考虑一下自己是否愿意对所犯的任何错误采取行动。对于低风险的任务,比如写一篇短篇小说,这可能没问题。对于高风险的任务,比如试图获取信息来决定投资哪只股票,也许这些错误可能会导致你做出代价高昂的决定。
- 自注意力机制意味着,你在输入提示中提供的信息越多,响应就越专业化,因为它会将更多你的单词混合到猜测中。响应的质量与输入提示的质量成正比。更好的提示会产生更好的结果。尝试几种不同的提示,看看哪种最适合你。不要以为语言模型“理解”了你想要做的事情,并会在第一次就尽最大努力。
- 你实际上并不是在与大型语言模型“对话”。大型语言模型不会“记住”交流中发生的事情。你的输入进入。响应出来。LLM 什么都不记得。你的初始输入、响应以及你对响应的响应都会进入。因此,如果它看起来像是在记住,那是因为对话日志变成了一个全新的输入。这是一个前端编程技巧,可以让大型语言模型看起来像是在进行对话。由于这个技巧,它可能会保持主题,但不能保证它不会与之前的响应相矛盾。此外,可以输入到大型语言模型中的单词数量是有限制的(目前 ChatGPT 允许大约 4,000 个单词,而 GPT-4 允许大约 32,000 个单词)。输入的大小可能非常大,因此对话通常会在一段时间内保持连贯。最终,累积的日志会变得太大,对话的开头将被删除,系统将“忘记”之前的事情。
- 大型语言模型不解决问题或规划。但你可以让它们制定计划并解决问题。我在这里要进行一些区分。问题解决和规划是人工智能研究社区中某些团体保留的术语,具有非常具体的含义。具体来说,它们意味着有一个目标——你想要在未来实现的事情——并通过在可能更接近该目标的替代方案之间做出选择来努力实现该目标。大型语言模型没有目标。它们有一个目的,即在给定输入序列的情况下选择最有可能出现在训练数据中的单词。它们是模式匹配。特别是规划通常涉及一种称为前瞻的东西。当人类进行规划时,他们会想象他们的行为的结果并根据目标分析未来。如果看起来它更接近目标,那么这是一个很好的举措。如果没有,我们可能会尝试想象另一个动作的结果。还有更多内容,但关键点是大型语言模型没有目标,也不会做前瞻。Transformer 是向后看的。自注意力只能应用于已经出现的输入词。现在,大型语言模型可以生成看起来像计划的输出,因为它们已经在训练数据中看到了很多计划。它们知道计划是什么样的,它们知道在关于它们所见过的某些主题的计划中应该出现什么。它会对那个计划做出很好的猜测。该计划可能会忽略有关世界的特定细节,倾向于最通用的计划。大型语言模型当然没有“仔细考虑过替代方案”或尝试了一件事然后回溯并尝试了另一件事。Transformer 内部没有任何机制可以指出对未来进行如此来回的考虑。(对此有一个警告,将在下一节中介绍。)在要求计划时,请务必验证输出。
9.ChatGPT 有何特别之处?
“所以我听说 RLHF 使得 ChatGPT 变得非常智能。”
“ChatGPT 使用强化学习,这就是它如此智能的原因。”
嗯…有一点。
截至撰写本文时,人们对 RLHF(带人工反馈的强化学习)感到非常兴奋。人们做了一些事情来专门训练 ChatGPT(以及越来越多的其他大型语言模型)。它们并不完全是新的,但在 ChatGPT 发布时,它们被广泛引入并产生了巨大的影响。
ChatGPT 是一个基于 Transformer 的大型语言模型。ChatGPT 因善于对输入提示做出响应以及拒绝回答某些可能被视为有害或主观的问题而赢得了声誉。它所做的与上面描述的并没有什么特别不同。事实上,它非常普通。但有一个不同之处:它的训练方式。ChatGPT 的训练方式与常规方式一样 — — 抓取大量互联网数据,截取文本片段,然后让系统预测下一个单词。这产生了一个已经非常强大的单词预测器(相当于 GPT-3)的基础模型。但还有两个额外的训练步骤。指令调整和带有人工反馈的强化学习。
9.1. 指令调优
大型语言模型有一个特殊问题:它们只想输入一个单词序列并生成接下来的内容。大多数时候,这就是人们想要的。但并非总是如此。考虑以下输入提示:
“写一篇关于亚历山大·汉密尔顿的文章。”
您认为答案应该是什么?您可能认为答案应该是“亚历山大·汉密尔顿于 1757 年出生于尼维斯。他是一位政治家、律师、陆军上校和美国第一任财政部长……”但您实际上可能会得到这样的答案:
“你的文章应该至少有五页,双倍行距,并至少包含两处引用。”
刚刚发生了什么?好吧,语言模型可能已经看到了很多学生作业的例子,这些作业以“写一篇关于……的文章”开头,并包括详细说明长度和格式的单词。当然,当你写“写一篇文章……”时,你认为你是在向语言模型写指令,就好像它是一个理解意图的人一样。语言模型不理解你的意图,也没有自己的意图;它们只将输入与它们在训练数据中看到的模式进行匹配。
为了解决这个问题,可以进行所谓的指令调整。这个想法相当简单。如果你得到了错误的答案,写下正确的答案应该是什么,并将原始输入和新的、更正的输出作为训练数据通过神经网络发送。有了足够多的更正输出示例,系统将学会改变其电路,以便优先选择新的答案。
不需要做任何太花哨的事情。只要让很多人与大型语言模型互动,要求它做很多事情,并在它表现不正确时写下更正。然后收集所有犯错的例子和新的正确输出,并进行更多训练。
这使得大型语言模型表现得好像它理解了输入提示的意图,并且好像它在遵循指令。它除了试图猜测下一个单词之外什么都不做。但现在新的训练数据让它猜测似乎对输入更敏感的单词。
9.2. 从人类反馈中进行强化学习
训练的下一步是从人类反馈中进行强化学习。我认为这需要一点解释。
强化学习是一种 AI 技术,传统上用于一些机器人研究以及虚拟游戏代理(想想可以下国际象棋、围棋或星际争霸的 AI 系统)。强化学习特别擅长弄清楚当它得到所谓的奖励时该做什么。奖励只是一个数字,表示它做得有多好(+100 表示做得非常好;-100 表示做得非常糟糕)。在现实世界和游戏中,奖励通常很少给予。在游戏中,你可能需要做很多动作才能获得任何积分。也许你只会在游戏的最后得到积分。在现实世界中,没有足够多的人告诉你你什么时候做得很好(你做得很好)。除非你是一条狗(他们都是好孩子)。你真正需要知道的唯一一件事是,强化学习系统试图预测他们将来会得到多少奖励,然后选择最有可能获得更多未来奖励的动作。这与人们用狗食来训练狗的行为方式并无太大不同。
好的,将这些都存储起来并考虑以下提示:
马克是哪方面的专家?
假设语言模型的输出是:
马克在人工智能、图形和人机交互领域发表过多篇著作。
这只是部分正确。我不发表图形文章。我真的很想给这个评论一个差评,或者 -1 分。但只有一部分是错的:单词“graphics”。如果我告诉系统整个句子都是错的,语言模型可能会知道应该避免使用所有这些词。好吧,其中许多词都是合理的。
这就是强化学习的作用所在。强化学习的工作原理是尝试不同的替代方案,看看哪种替代方案能获得最大的回报。假设我要求它对原始提示生成三个不同的响应。
马克在人工智能、图形和人机交互领域发表过多篇著作。
Mark 曾从事人工智能、安全 NLP 系统和人机交互方面的工作。
标记为研究人工智能、游戏 AI 和图形。
我可以对第一个选项点赞 (+1),对第二个选项点反对 (-1),对第三个选项点反对 (-1)。就像玩游戏一样,强化学习算法可以回顾并找出导致 -1 的一个共同点是单词“graphics”。现在系统可以集中精力于该单词,并调整神经网络电路,使其不将该单词与特定输入提示结合使用。
再次,我们将让一群人与大型语言模型进行交互。这一次,我们将为人们提供三种(或更多)可能的响应。我们可以通过要求大型语言模型多次响应提示并在选择击打臂时引入一点随机性来实现这一点(你没有忘记这些,对吧?)。我们有时可能会选择第二或第三高的激活击打臂,而不是选择激活度最高的击打臂。这会产生不同的文本响应,我们要求人们选择他们最喜欢的第一个响应、第二个响应等等。现在我们有了替代方案和数字。现在我们可以使用强化学习来调整神经网络电路。
[实际上,我们利用这些赞成和反对的反馈来训练第二个神经网络,以预测人们会赞成还是反对。如果该神经网络能够很好地预测人们的偏好,那么我们就可以使用第二个神经网络来猜测语言模型的响应可能会得到赞成还是反对,并用它来训练语言模型。]
强化学习将文本生成视为一个游戏,每个动作都是一个单词。在一个序列的末尾,语言模型会被告知它是得了一些分还是丢了一些分。语言模型并不完全像上一节讨论的那样进行前瞻性预测,但它在某种意义上已经被训练来预测哪些单词会得到赞。大型语言模型仍然没有明确的目标,但它有一个“获得赞许”的隐含目标(或者我们也可以说它有一个“让普通人满意”的隐含目标),并且已经学会将某些提示的某些反应与获得赞许联系起来。这有很多规划的特质,但没有明确的前瞻性机制。更像是它记住了获得奖励的策略,这些策略往往在很多情况下都有效。
RLHF 是否让 ChatGPT 更加智能,在很大程度上…它让 ChatGPT 更有可能产生我们希望看到的那种反应。它看起来更智能,因为它的输出似乎传达了一种感觉,即它理解我们输入的意图,并有自己的回应意图。这是一种错觉,因为它仍然只是对单词进行编码和解码。但话又说回来,这就是我们开始写这篇文章的地方😉。
指令调整和 RLHF 还使 ChatGPT 能够抵御某些类型的滥用,例如生成种族主义、性别歧视或政治色彩浓厚的内容。这仍然可以做到,而且无论如何,旧版本的 GPT-3 一直能够做到这一点。然而,作为一项面向公众的免费服务,ChatGPT 对某些类型的滥用产生的阻力传达了一种安全感。它还抵制将意见作为事实提供,这也消除了一种对用户的潜在伤害。
[使用强化学习来修改预先训练的语言模型并不是什么新鲜事。它至少可以追溯到 2016 年,并已用于使大型语言模型更安全。大多数基于强化学习的大型语言模型调整都使用第二个模型来提供奖励,ChatGPT 也是如此。ChatGPT 值得注意的是使用强化学习调整的系统的规模,以及大规模的人工反馈收集工作。]
10. 结论
当我手绘神经网络时,它看起来像鲸须。无论如何,我希望我能够过滤掉一些围绕大型语言模型的炒作。
RA/SD 衍生者AI训练营。发布者:chris,转载请注明出处:https://www.shxcj.com/archives/4299