我们将简要介绍一些与大型语言模型和 ChatGPT 相关的术语,不使用任何专业词汇。如果必须使用专业术语,我会进行分解。我们将从最基础的“什么是人工智能”开始,逐步深入。我会尽可能多地使用一些常用的比喻。我将从我们应该期待它们做什么,以及不应该期待它们做什么的角度,来探讨这些技术的含义。

简介

本文旨在帮助没有计算机科学背景的人士了解 ChatGPT 以及类似 AI 系统(GPT-3、GPT-4、Bing Chat、Bard 等)的工作原理。ChatGPT 是一个聊天机器人——一种基于大型语言模型构建的对话式 AI 。这些肯定都是术语,我们会把它们全部分解开来。在此过程中,我们将讨论其背后的核心概念。本文不需要任何技术或数学背景。我们将大量使用比喻来阐述这些概念。我们将讨论这些核心概念的工作原理,以及我们对像 ChatGPT 这样的大型语言模型的期望。

以下是我们接下来要做的事情。我们将简要介绍一些与大型语言模型和 ChatGPT 相关的术语,不使用任何专业词汇。如果必须使用专业术语,我会进行分解。我们将从最基础的“什么是人工智能”开始,逐步深入。我会尽可能多地使用一些常用的比喻。我将从我们应该期待它们做什么,以及不应该期待它们做什么的角度,来探讨这些技术的含义。

1.什么是人工智能

首先,我们先来了解一些你可能经常听到的基本术语。什么是人工智能?

•人工智能:如果像人类做类似的事情,那么人们可能会合理地称之为智能的实体。

用“智能”一词来定义人工智能有点问题,但没有人能就“智能”的合理定义达成一致。不过,我认为这个定义仍然相当合理。它的基本含义是,如果我们观察到某种人造的东西,它做的事情既引人入胜又实用,而且看起来并不琐碎,那么我们就可以称之为智能。例如,我们经常将“AI”一词归类于电脑游戏中由电脑控制的角色。这些机器人大多是简单的if-then-else代码(例如,“如果玩家在攻击范围内,则射击,否则移动到最近的巨石处寻求掩护”)。但如果我们所做的工作是让我们保持参与和娱乐,而不是做任何明显愚蠢的事情,那么我们可能会认为它们比实际上更老练。

一旦我们理解了某些事物的工作原理,我们可能不会对它印象深刻,而是期待幕后有更复杂的东西。这完全取决于你对幕后发生的事情的了解程度。

关键在于,人工智能并非魔法。正因为它不是魔法,所以它才能被解释。

2.什么是机器学习

您经常听到的与人工智能相关的另一个术语是机器学习。

•机器学习:通过获取数据、形成模型、然后执行模型来创建行为的一种方法。

有时,手动创建一堆 if-then-else 语句来捕捉一些复杂的现象(例如语言)实在太难了。在这种情况下,我们会尝试查找大量数据,并使用能够从数据中发现模式的算法进行建模。

但什么是模型?模型是对某些复杂现象的简化。例如,汽车模型只是真实汽车的缩小版、简化版,它拥有真实汽车的许多属性,但并非旨在完全取代原车。汽车模型可能看起来很真实,并且在某些方面有用,但我们不能把它开到商店去。

就像我们可以制造更小、更简单的汽车一样,我们也可以制造更小、更简单的人类语言。我们使用“大型语言模型”这个术语,是因为这些模型从使用它们所需的内存大小来看,确实很大。目前生产环境中最大的模型,例如 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”这个词出现的概率。

我们可以将其概括为:

这只是意味着根据序列中第 n个单词之前的所有单词(位置 1 到n -1 的单词)来计算该单词的概率。

但让我们稍微回顾一下。想象一下老式打字机,就是那种带有击针臂的打字机。

只不过,我们不再为每个字母配备一个击针臂,而是为每个单词配备一个击针。如果英语有5万个单词,那么这台打字机就够大了!

与其考虑汽车的网络,不如设想一个类似的网络,只不过电路顶部有 5 万个输出连接到撞针臂,每个输出对应一个单词。相应地,我们将有 5 万个传感器,每个传感器检测不同的输入单词。所以,我们最终要做的就是选择一个接收最高电信号的撞针臂,这个单词就是填入空格的单词。

我们现在的处境是这样的:如果我想做一个接收单个单词并输出单个单词的简单电路,我就得做一个有 5 万个传感器(每个单词一个)和 5 万个输出(每个撞击臂一个)的电路。我只需将每个传感器连接到每个撞击臂,总共需要 5 万 x 5 万 = 25 亿条线路。

底部的每个圆圈感知一个单词。识别“一次”这个词需要 5 万个传感器。这些能量会通过某个任意网络发送。顶部的所有圆圈都连接到每个单词的撞击臂。所有撞击臂都会接收一些能量,但其中一个撞击臂接收的能量会比其他撞击臂多。

那是一个很大的网络!

但情况更糟。如果我想做“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 编码器

我们要做的第一件事是将电路分成两个电路,一个叫做编码器,另一个叫做解码器。很多单词的意思大致相同。考虑以下短语:

国王坐在___上,王后坐在___上,
公主坐在___上,
摄政王坐在___上

以上所有空格的合理猜测应该是“王座”(或者可能是“厕所”)。也就是说,我可能不需要在“国王”和“王座”之间,或者“女王”和“王座”之间,等等之间分别使用不同的线路。相反,如果我能找到一个近似表示皇室的词,并且每次看到“国王”或“女王”时,都用这个中间词来代替,那就太好了。这样,我只需要考虑哪些词的意思大致相同,然后该如何处理(把大量的精力放在“王座”上)。

所以,我们接下来要做的事情是:搭建一个电路,它能容纳 5 万个单词传感器,并映射到一组较小的输出,比如 256 个,而不是 5 万个。这样,我们就能一次触发多个撞击臂,而不是只触发一个。撞击臂的每种可能组合都可以代表一个不同的概念(例如“皇室”或“装甲哺乳动物”)。这 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个数字,并激活最初的5万个打击臂,每个单词一个。然后,我们会选择电流输出最高的单词。它看起来就像这样:

解码器网络将编码中的 256 个值扩展为与每个可能单词相关的 50,000 个打击臂的激活值。一个单词激活最高的一个。

5.3 编码器和解码器一起

编码器和解码器共同作用,形成一个大型神经网络:

编码器-解码器网络。它只是一个位于编码器之上的解码器。

顺便说一下,一个单词的输入经过编码后,只需要 (50,000 x 256) x 2 = 2560 万个参数。这看起来好多了。

该示例针对一个单词的输入和产生一个单词的输出,因此如果我们想要读取n 个单词,我们将有 50,000 x n 个输入,而编码则需要256 x n

但为什么这样做有效呢?通过强制将 50,000 个单词全部塞进一小组数字中,我们迫使网络做出妥协,将可能触发相同输出单词猜测的单词组合在一起。这很像文件压缩。当你压缩一个文本文档时,你会得到一个更小的文档,它不再可读。但你可以解压文档并恢复原始的可读文本。这是因为压缩程序会用简写符号替换某些单词模式。然后,当它解压时,它知道要用简写符号替换哪些文本。我们的编码器和解码器电路会学习一种电阻器和门电路的配置,用于压缩和解压单词。

5.4 自我监督

我们如何知道每个单词的最佳编码?换句话说,我们如何知道“king”的编码应该与“queen”的编码相似,而不是“armadillo”的编码?

不妨做一个思想实验,设想一个编码器-解码器网络,它应该输入一个单词(5万个传感器),并输出完全相同的单词。这样做可能有点傻,但对接下来的内容却很有启发。

经过训练的编码器-解码器网络输出与输入相同的单词(与之前的图像相同,但使用颜色进行激活)。

我输入单词“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 个击打臂中的每一个都获得较小的数字,我们就可以接受。换句话说,我们可能更愿意接受网络混淆“king”和“queen”,而不是混淆“kings”和“armadillos”。

我们说神经网络是自监督的,因为与汽车的例子不同,你不需要收集单独的数据来测试输出。我们只需将输出与输入进行比较——我们不需要为输入和输出分别准备数据。

5.5 掩蔽语言模型

如果上述思想实验看起来有点傻,那么它正是所谓的掩码语言模型(masked language models)的基础。掩码语言模型的思想是输入一个单词序列,并生成一个单词序列。输入和输出中的一个单词会被隐藏。

[面具] 坐在王座上。

网络会猜测所有单词。其实,猜测未屏蔽的单词相当容易。我们真正关心的只是网络对屏蔽词的猜测。也就是说,输出中每个单词都有 50,000 个 striker arm。我们关注的是屏蔽词的 50,000 个 striker arm。

遮蔽一个序列。我已经厌倦了画那么多连接线,所以我只画红线来表示上下所有东西之间的大量连接。

我们可以移动掩码并让网络猜测不同位置的不同单词。

有一种特殊的掩码语言模型,掩码只在末尾。这种模型被称为生成模型,因为它猜测的掩码始终是序列中的下一个单词,这相当于生成下一个单词,就好像下一个单词不存在一样。就像这样:

[面具]
女王 [面具]
女王坐在 [面具] 女王坐在 [面具]
女王坐在 [面具]
女王坐在 [面具]

我们也称之为自回归模型。 “回归”这个词听起来不太好。但回归只是意味着试图理解事物之间的关系,比如输入的单词和应该输出的单词。 “自”的意思是“自我”。自回归模型具有自我预测能力。它预测一个单词,然后用这个单词预测下一个单词,然后用这个单词预测下一个单词,如此反复。这其中有一些有趣的含义,我们稍后会再讨论。

6.什么是变压器

截至撰写本文时,我们听到了很多关于 GPT-3、GPT-4 和 ChatGPT 的消息。GPT 是由 OpenAI 公司开发的一种大型语言模型的特定品牌。GPT 代表生成式预训练 Transformer。让我们来详细分析一下:

•生成式。该模型能够根据提供的输入生成后续内容。也就是说,给定一些文本,模型会尝试猜测接下来会出现哪些单词。

•预训练。该模型是在非常大的通用文本语料库上进行训练的,只需训练一次即可用于许多不同的事情,而无需从头开始重新训练。

该模型基于一个非常庞大的通用文本语料库进行训练,该语料库表面上涵盖了大量可以想到的主题。这或多或少意味着“从互联网上抓取”,而不是取自某些专门的文本库。通过对通用文本进行训练,语言模型能够比例如对特定类型文本(例如医学文档)进行训练的语言模型更能响应更广泛的输入。理论上,在通用语料库上训练的语言模型可以合理地响应互联网文档中可能出现的任何内容。它可能对医学文本的处理还算不错。仅对医学文档进行训练的语言模型可能对与医学背景相关的输入响应良好,但在响应其他输入(例如闲聊或食谱)时会非常糟糕。

要么模型在很多方面都足够好,人们永远不需要训练自己的模型,要么人们可以做一些称为微调的事情,这意味着采用预先训练的模型并对其进行一些更新,以使其在专门任务(如医疗)上更好地工作。

现在来看看变压器……

•Transformer。一种特定类型的自监督编码器-解码器深度学习模型,具有一些非常有趣的特性,使其擅长语言建模。

Transformer是一种特殊的深度学习模型,它以特定的方式转换编码,使被遮挡的单词更容易被猜出。它是由 Vaswani 等人在 2017 年发表的一篇名为《Attention is All You Need》的论文中提出的。Transformer的核心是经典的编码器-解码器网络。编码器执行非常标准的编码过程。简单到你可能会感到震惊。但它还添加了一个叫做自注意力(self-attention)的东西。

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. 自注意力机制如何工作

自注意力机制是对传统编码器-解码器网络的重大改进,因此如果您想进一步了解它的工作原理,请继续阅读。否则,请跳过本节。简而言之:自注意力机制是数学运算“点积”的别称。

自我注意力分为三个阶段。

(1)我们像往常一样对输入序列中的每个单词进行编码。我们将单词编码复制四份。其中一份我们称之为残差,并留作安全保管。

(2)我们对另外三个数据进行第二轮编码(也就是对一个编码进行编码)。每个数据都经过不同的编码过程,因此它们最终都变得不同。我们将其中一个称为查询 ( q ),一个称为键 ( k ),一个称为值 ( v )。

我想让你想象一下哈希表(在 Python 中也称为字典)。表中存储了大量信息。表中的每一行都有一个键(key),即一个唯一标识符,以及一个值(value),即存储在该行中的数据。要从哈希表中检索某些信息,你需要进行查询。如果查询与键匹配,则提取值。

可以使用哈希表来查询教授在哪所大学工作。

自注意力机制的工作原理有点像模糊哈希表。你提供一个查询,它不是寻找与键的精确匹配,而是根据查询和键之间的相似性找到近似匹配。但是,如果匹配不是完全匹配怎么办?它会返回该值的一部分。这只有当查询、键和值都是数字时才有意义。它们是:

具有部分匹配的哈希表。

这就是我们要做的。对于输入中的每个单词位置,我们将采用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%)。但这说明了自注意力机制是如何进行混合和交换的。在这个极端版本中,第一个单词被替换成了第二个单词,依此类推。所以也许“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 上看过数十亿个错误代码示例及其修正。是的,所以它可以接收你的错误代码并提出修复建议。它见过数十亿人发推文说他们碰过热炉子烫伤了手指,所以大型语言模型(LLM)知道一些常识。它读过大量的科学论文,所以它可以猜测出众所周知的科学事实,即使你并不了解这些事实。它见过数十亿人总结、改写文本要点、描述如何使文本更符合语法、更简洁或更具说服力的例子。

重点在于:当你要求 ChatGPT 或其他大型语言模型做一些巧妙的事情——而且它确实成功了——你要求它做的事情很可能是它已经看过数十亿个例子的事情。即使你想出了一些非常独特的问题,比如“告诉我,Flash Gordon 吃了六个墨西哥卷饼后会做什么”(这算不算独特,我甚至不知道),它也看过关于 Flash Gordon 的同人小说,也看过人们谈论吃了太多墨西哥卷饼,并且能够——凭借自注意力机制——将零散的信息混合搭配,组合成一个听起来合理的答案。

与大型语言模型交互时,我们的第一反应不应该是“哇,这些东西一定很聪明,很有创造力,或者理解力很强”。我们的第一反应应该是“我可能让它做了一些它之前已经见过的片段”。这可能意味着它仍然非常有用,即使它没有“认真思考”或“进行一些非常复杂的推理”。

我们不需要使用拟人化来理解它如何为我们提供回应。

关于这个主题的最后一点说明:由于大型语言模型的工作方式和训练方式,它们提供的答案往往是中位数。如果说模型在询问一个关于《飞侠哥顿》的故事后,往往会给出平均水平的答案,这听起来可能很奇怪。但就一个故事或一首诗而言,这些答案可以理解为许多人(在互联网上写作的人)在不得不妥协的情况下会想出的结果。这不会很糟糕。以一个独自坐着思考的人的标准来看,这已经相当不错了。但你的故事和诗歌可能也很普通(但它们对你来说很特别)。 对不起。

8.我应该注意什么

Transformer 的工作原理和训练方式会带来一些非常微妙的影响。以下是这些技术细节的直接影响。

1.大型语言模型是在互联网上训练的。这意味着它们也训练了人性中所有阴暗的一面。大型语言模型训练的内容包括种族主义言论、性别歧视言论、针对各种人的各种侮辱、人们对他人的刻板印象、阴谋论、政治错误信息等等。这意味着语言模型选择生成的词汇可能会重复这些语言。

2.大型语言模型没有“核心信念”。它们只是词语猜测器;它们试图预测如果同一句话出现在互联网上,接下来的词语会是什么。因此,我们可以要求大型语言模型写一个句子来支持某件事,或者反对同一件事,语言模型会两种方式都遵循。这些并不表明它相信某件事或另一件事,或者改变了它的信念,或者某件事比另一件事更正确。如果训练数据中某件事的例子比另一件事多,那么大型语言模型就会倾向于对训练数据中出现频率更高的事物做出更一致的反应,因为这些事物在互联网上出现的频率更高。记住:模型正在努力模仿最常见的反应。

3.大型语言模型不具备任何真理或对错的概念。有些事情我们认为是事实,比如地球是圆的。大型语言模型(LLM)往往会这样说。但如果上下文正确,它也会说相反的话,因为互联网上确实有关于地球是平的文字。大型语言模型并不能保证提供真理。我们可能倾向于猜测那些我们认同为真的词语,但这几乎是我们能够断言大型语言模型“了解”什么真理或对错的方式了。

4.大型语言模型可能会犯错。训练数据可能包含很多不一致的材料。当我们提出问题时,自注意力机制可能无法关注到我们想要它关注的所有内容。作为一个猜词器,它可能会做出错误的猜测。有时,训练数据已经见过某个单词很多次了,以至于它更喜欢用这个词,即使这个词对于输入来说毫无意义。上述情况会导致一种称为“幻觉”的现象,即猜测的单词既不是来自输入,也不是“正确的”。LLM 倾向于猜测小数而不是大数,因为小数更常见。所以 LLM 不擅长数学。LLM 偏爱数字“42”,因为人类会因为某本名著而这样做。LLM 偏爱更常见的名字,因此可能会编造作者的名字。

5.大型语言模型是自回归的。因此,当它们做出我们认为可能不太好的猜测时,这些猜测的单词会被添加到它们自己的输入中,用于猜测下一个单词。也就是说,错误会累积。即使只有 1% 的错误概率,自注意力机制也能注意到这个错误的选择,并加倍努力去解决这个错误。即使只犯了一个错误,之后的所有错误都可能与这个错误有关。然后,语言模型可能会在此基础上犯下更多错误。Transformer 无法“改变主意”、重试或自我修正。它们会顺其自然。

6.我们应该始终验证大型语言模型的输出。如果你要求它做一些你自己无法胜任验证的事情,那么你应该考虑一下自己是否能够接受对模型中可能出现的错误采取行动。对于低风险的任务,比如写一篇短篇小说,这样做或许没问题。但对于高风险的任务,比如尝试获取信息来决定投资哪只股票,这些错误可能会导致你做出代价高昂的决定。

7.自注意力机制意味着你在输入提示中提供的信息越多,响应就越专业化,因为它会将更多你的词汇融入到猜测中。响应的质量与输入提示的质量成正比。更好的提示会产生更好的结果。尝试几个不同的提示,看看哪个最适合你。不要想当然地认为语言模型“理解”了你的意图,并会在第一次就尽力而为。

8.你实际上并非在与大型语言模型“对话”。大型语言模型不会“记住”交流中发生的事情。你的输入会被输入,回复会被输出。LLM 什么都不记得。你的初始输入、回复以及你对回复的回复都会被输入。因此,如果它看起来像是在记住,那是因为对话日志变成了新的输入。这是一个前端编程技巧,可以让大型语言模型看起来像是在进行对话。由于这个技巧,它可能会保持对话主题,但无法保证它不会与之前的回复相矛盾。此外,输入大型语言模型的单词数量是有限制的(目前 ChatGPT 允许输入大约 4,000 个单词,而 GPT-4 允许输入大约 32,000 个单词)。输入量可能很大,因此对话通常会在一段时间内保持连贯。最终,累积的日志会变得过大,对话的开头会被删除,系统会“忘记”之前的内容。

9.大型语言模型不解决问题或规划。但你可以要求它们制定计划并解决问题。这里我要进行一些区分。解决问题和规划是人工智能研究社区中某些群体保留的术语,用于表示非常具体的含义。具体来说,它们意味着有一个目标——你想要在未来实现的事情——并通过在可能更接近该目标的选项之间做出选择来努力实现该目标。大型语言模型没有目标。它们有一个目的,即在给定输入序列的情况下选择最有可能出现在训练数据中的单词。它们是模式匹配。特别是规划,通常涉及一种称为前瞻的东西。当人类进行规划时,他们会想象他们的行为的结果,并根据目标分析未来。如果它看起来更接近目标,那么这是一个很好的举动。如果没有,我们可能会尝试想象另一个动作的结果。还有更多内容,但关键在于大型语言模型没有目标,也不会进行前瞻。Transformer 是向后看的。自注意力只能应用于已经出现过的输入词。现在,大型语言模型可以生成看起来像计划的输出,因为它们已经在训练数据中看到了很多计划。它们知道计划是什么样的,它们知道关于它们所见过的某些主题的计划中应该出现什么。它会对这个计划做出很好的猜测。这个计划可能会忽略关于世界的特定细节,倾向于最通用的计划。大型语言模型当然没有“仔细考虑过所有替代方案”,也没有尝试过一件事然后回溯并尝试另一件事。Transformer 内部没有任何机制可以对未来进行如此反复的考虑。在要求计划时,务必验证输出。

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 的一个共同点是“图形”这个词。现在,系统可以锁定这个词,并调整神经网络电路,使其不与特定的输入提示结合使用。

再次,我们将让一群人与大型语言模型进行交互。这次,我们将提供三种(或更多)可能的答案。我们可以让大型语言模型对提示做出多次响应,并在选择击打臂时引入一些随机性(你没忘了这些吧?)。我们有时不会选择激活程度最高的击打臂,而是选择激活程度第二高或第三高的击打臂。这会给出不同的文本答案,我们会要求人们选择他们最喜欢的答案、第二喜欢的答案,等等。现在我们有了备选答案和数字。现在我们可以使用强化学习来调整神经网络电路。

实际上,我们会利用这些“赞”和“踩”的反馈来训练第二个神经网络,预测人们会给出“赞”还是“踩”的反馈。如果这个神经网络能够足够准确地预测人们的偏好,那么我们就可以用第第二个神经网络来猜测语言模型的回复可能会得到“赞”还是“踩”,并以此来训练语言模型。

强化学习是如何将文本生成视为一个游戏,其中每个动作都是一个单词。在一个序列的末尾,语言模型会被告知它是得了分还是丢了分。语言模型并不像上一节讨论的那样严格进行前瞻,但在某种意义上,它已经被训练来预测哪些单词会得到点赞。大型语言模型仍然没有明确的目标,但它有一个“获得点赞”的隐含目标(或者我们也可以说它有一个“让普通人满意”的隐含目标),并且已经学会将对某些提示的某些反应与获得点赞联系起来。这具有许多规划的特质,但没有明确的前瞻机制。更像是它记住了获得奖励的策略,这些策略在很多情况下都有效。

RLHF 是否能让 ChatGPT 更智能,关键在于它能让 ChatGPT 更有可能做出我们期望看到的那种反应。它看起来更智能,是因为它的输出似乎传达了一种感觉,它理解我们输入的意图,并且有自己的回应意图。这只是一种错觉,因为它仍然只是在对单词进行编码和解码。不过话说回来,这正是我们开始写这篇文章的原因。

指令调整和 RLHF 也使 ChatGPT 能够抵御某些类型的滥用,例如生成种族主义、性别歧视或政治色彩浓厚的内容。这种情况仍然存在,而且无论如何,旧版本的 GPT-3 一直能够做到这一点。然而,作为一项面向公众的免费服务,ChatGPT 针对某些类型的滥用所设置的阻力传达了一种安全感。它还能防止将观点当作事实提供,这也消除了一种对用户的潜在危害。

使用强化学习来修改预训练语言模型并非新鲜事。它至少可以追溯到 2016 年,并已用于提高大型语言模型的安全性。大多数基于强化学习的大型语言模型调优方法都会使用第二个模型来提供奖励,ChatGPT 也采用了这种方法。ChatGPT 的显著特点在于其使用强化学习进行调优的系统的规模,以及大规模的人工反馈收集工作。

10.结束

当我手绘神经网络时,它看起来像鲸须。总之,我希望我已经能够拨开一些关于大型语言模型的面纱。

 零基础入门AI大模型

今天贴心为大家准备好了一系列AI大模型资源,包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

1.学习路线图

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

 

 

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。

 

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

5.免费获取(扫下方二v码即可100%领取)
Logo

一座年轻的奋斗人之城,一个温馨的开发者之家。在这里,代码改变人生,开发创造未来!

更多推荐