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