一文读懂大语言模型(上)

简介: 一文读懂大语言模型

以 ChatGPT 为代表的大语言模型被很多人认为是新一轮科技革命的起点,本文旨在通过概念性介绍,让普通人能够尽可能理解人工智能以及大语言模型的基本概念,从而了解这些技术能做以及不能做什么。原文: A Very Gentle Introduction to Large Language Models without the Hype

0. 简介

本文旨在让没有计算机科学背景的人对 ChatGPT 和类似的人工智能系统(GPT-3、GPT-4、Bing Chat、Bard 等)的工作原理有一些了解。ChatGPT 是一种基于大语言模型(Large Language Model) 的对话式 AI 聊天机器人。这些词汇当前还比较陌生,但我们将逐步拆解,讨论它们背后的核心概念。这篇文章不需要任何技术或数学背景,我们通过大量比喻来说明这些概念,讨论核心概念的工作方式,以及 ChatGPT 这样的大语言模型可以或不可以做什么。


这就是本文要做的,在没有任何术语的情况下慢慢讲解与大语言模型和 ChatGPT 相关的术语,对于必要术语,我将用常见词汇来拆解解释。我们从"什么是人工智能"开始,逐步深入。我会尽可能多的使用重复出现的比喻,从我们应该期望 AI 能做什么或不能做什么来谈论这些技术的含义。


出发!

1. 什么是人工智能(Artificial Intelligence)?

我们先从一些可能经常听到的基本术语开始。什么是人工智能(artificial intelligence)


  • 人工智能 : 如果一个实体的行为和人类类似,这个实体可能会被称之为智能。


"智能"的定义并没有达成一致,因此用"智能"这个词来定义人工智能有点问题,不过我觉得这仍然相当不错。基本上可以认为,如果看一些人工的东西,做一些吸引人的、有用的、让人惊叹的事情,就可以称之为智能。例如,我们经常将"AI"一词归因于电脑游戏中由电脑控制的角色,这些机器人大多是简单的 if-then-else 代码(例如: 例如,"如果玩家在射程内,那么射击,然后移动到……")。但如果工作会让我们保持投入和兴奋,而不是做那些明显的傻事,我们可能会认为这些工作更复杂。


我们一旦了解了某些东西是如何工作的,可能并不会留下太深刻的印象,而且会期望在幕后看到更复杂的东西,这完全取决于你对幕后发生事情了解多少。


重点是,人工智能不是魔法。因为不是魔法,所以可以解释。


让我们开始吧。

2. 什么是机器学习(Machine Learning)?

你经常听到的另一个与人工智能相关的术语是机器学习(machine learning)


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


有时候,手动创建一堆 if-then-else 语句来捕捉复杂的现象(比如语言)非常困难。在这种情况下,我们试图找到一堆数据,并用可以在数据中找到的模式来建模的算法。


但什么是模型呢?模型是对一些复杂现象的简化。例如,模型汽车是一辆真正汽车的更小、更简单版本,它有许多属性,但并不意味着完全取代原来的汽车。一辆模型车可能看起来很真实,有时候很有用,但不能开它去购物。


DALL-E 生成的桌子上的汽车模型图片。


就像我们能造出更小更简单的汽车一样,我们也能造出更小更简单的人类语言。我们用术语"大语言模型(large language models)",因为考虑到它们需要多少内存,这些模型非常大。生产中最大的模型,如 ChatGPT、GPT-3 和 GPT-4,大到需要在数据中心服务器上运行大型超级计算机来创建和运行。

3. 什么是神经网络(Neural Network)?

有许多从数据中学习模型的方法,神经网络就是其中之一。该技术大致模仿人类大脑通过神经元相互连接的脑细胞网络而组成,这些神经元来回传递电信号,以某种方式使人类能够完成各种任务。20 世纪 40 年代提出了神经网络的基本概念,但直到 20 世纪 80 年代才发明了训练神经网络的基本概念。神经网络效率非常低下,直到 2017 年左右,由于计算机硬件的发展,才让大规模使用神经网络成为可能。


不过,相对于大脑,我更喜欢用电路来比喻神经网络。即使你不是电气工程师,也应该知道电是通过电线流动的,而有种叫做电阻的东西,可以阻碍电流经过电路的某些部分。


假设你想做一辆能在高速公路上行驶的自动驾驶汽车,汽车的前部、后部和侧面都配备了距离传感器,当有什么东西非常接近时,传感器报告数值为 1.0,而当附近没有任何东西时,报告数值为 0.0。


你还调整了汽车的控制,使自动装置可以转动方向盘、踩刹车、踩油门。当加速器接收到值 1.0 时,表示用最大的加速度,0.0 表示不加速。同样,发送给制动装置的值 1.0 表示猛踩刹车,0.0 表示不刹车。发送给转向装置的值为-1.0 到+1.0,负值表示向左转向,正值表示向右转向,0.0 表示保持直线。


你还得记录驾驶数据。当前方道路畅通时,就加速。前面有车时,要减速。当一辆车从左边靠得太近时,就向右转,改变车道(除非右边也有一辆车)。这是一个复杂的过程,涉及基于不同传感器信息的不同动作组合(向左转向,向右转向,加速或减速,刹车)。


现在要把传感器和自动装置连接起来。该怎么做?目前还不清楚。所以你把每个传感器和每个自动装置驱动器连接起来。


作为电路连接传感器和执行器的神经网络。


就这样开车上路的话会发生什么?电流从所有传感器流向所有执行器,汽车同时向左、向右转向、加速和刹车,一团糟。


当传感器发送电流时,会流向所有执行器,汽车就会同时加速、刹车和转向。


这可不行。所以我想在电路的不同部分放上电阻,这样电流就只能在某些传感器和某些执行器之间流动。例如,我希望电流只从前方距离传感器流向刹车,而不是流向方向盘。此外,我还放了一些叫做门的东西,可以阻止电流流动,直到电力积累到足够翻转开关(只有当前方距离传感器和后方距离传感器报告的数字比较高时才允许电流流动),或者只有在输入电流强度低时才流动(当前方距离传感器报告数值较低时向加速器发送更多电流)。


但把这些电阻和门放在哪里呢?不知道。一开始我把它们随意放在各个地方,然后再试一次。也许这次车开得更好了,它在数据显示应该刹车的时候刹车,应该转向的时候转向,等等。但并不是每件事都做对了,有些事情做得更糟(数据显示需要刹车的时候它却加速了),所以我一直随机尝试电阻和门的不同组合。最终,我偶然发现一种效果足够好的组合,成功了。也许看起来像这样:


经过训练的神经网络。较暗的线表示电路中电流可以自由流动的部分。中间的圆圈是门,在将电流发送到上面的执行器之前,可能会从下面的传感器积累大量电流,或者可能在几乎没有电流的情况下发送电流。


(我们在现实中不能增加或减少门,它们总是存在的,但可以修改门,使它们以更少或更多的电流激活。纯粹的机器学习主义者可能会对这种描述感到恶心。不过从技术上说,这是通过调整门的偏置(bias) 来完成的,通常不会在图表中显示,但就电路比喻而言,可以将其视为直接插入电源的门的导线,然后可以像其他导线一样进行修改。)


让我们试驾一下吧!



随机尝试是种很糟糕的方式,有一种被称为反向传播(back propagation) 的算法在猜测如何改变电路的配置方面相当出色。算法细节并不重要,只需要知道算法会对电路进行微小调整,让电路的行为更接近数据的建议,经过数百万次调整,最终使电路与数据一致。


我们把电阻和门称为参数,但实际上参数无所不在,反向传播算法会声明每个电阻的强弱,因此一旦知道了电路的布局和参数,就可以复制到其他汽车上。

4. 什么是深度学习(Deep Learning)?

深度学习可以让我们在电路中加入除了电阻和门之外的其他东西。例如,可以在电路中进行数学计算,在输出电流之前进行相加或相乘。深度学习仍然使用一样基本增量技术猜测参数。

5. 什么是语言模型(Language Model)?

在汽车的例子里,我们试图让神经网络的行为与数据一致,从而创造出一种能够操纵汽车机械装置的电路,模拟司机的行为。我们可以用同样的方式对待语言,看看人类写的文本,并尝试电路是否能产生与人类产生的单词序列非常相似的单词序列。现在,当传感器看到单词时就会启动,输出的也是单词。


我们要做什么?尝试创建一个电路,在给定一堆输入单词的情况下,猜测输出单词。例如:


"Once upon a ___"


看上去空格里填"time"比"armadillo"更合适。


我们倾向于从概率角度来讨论语言模型,上述例子的数学形式为:



如果不熟悉这个符号,别担心,这只是一个数学术语,意思是"time"这个词在给定(|符号的意思表示给定)一堆单词"once"、"upon"和"a"条件下出现的概率(P)。我们期望好的语言模型输出"time"这个词的概率比"armadillo"这个词的概率高。


可以将其概括为:



意思是计算序列中第 n 个单词在给定在它之前所有单词(从位置 1 到 n-1 的单词)的条件下出现的概率。


不过现在退一步,想想老式打字机,就是那种有撞针的打字机。


DALL-E2 生成了这张照片,看看那些撞针!


除了每个字母都有不同的撞针,我们给每个单词都装上一个撞针,如果英语有 5 万个单词,那么这会是一台巨大的打字机!


设想一个与汽车网络不同但类似的网络,电路顶部有 5 万个输出连接到撞针上,每个单词一个。相应的,有 5 万个传感器,每个传感器检测不同输入单词。最终选择一个能得到最高电流信号的撞针,对应的单词就会出现在空白纸上。


现在的情况是,如果想做一个简单的电路,输入一个单词并产生一个单词,就必须做一个有 5 万个传感器(每个单词一个)和 5 万个输出(每个撞针一个)的电路。只需将传感器连接到撞针上,总共 50000 × 50000 = 25 亿根电线。


底部的每个圆圈表示一个单词,需要 5 万个传感器来识别单词"once",电流通过网络随意传播,上面每个圆圈都连接到一个单词的撞针上,所有撞针都得到了一些电流,但其中某个会得到更多的电流。


这是个很大的网络!


更糟的是,如果我想以"Once upon a ___ "为例,需要感知三个输入位置都是哪个单词,将会需要 50000 × 3 = 150,000 个传感器,连接到 5 万个撞针,得到 15 万 × 5 万 = 75 亿个电线。截至 2023 年,大多数大型语言模型可以接收 4000 个单词,最大的可以接收 3.2 万个单词。我要哭了。


以三个单词作为输入的网络,每个单词需要 50000 个传感器。


需要一些技巧来处理这种情况,我们将分阶段进行。

5.1 编码器(Encoders)

第一件事是把电路分成两个电路,一个叫编码器(encoder) ,一个叫解码器(decoder) 。由于许多单词的意思大致相同,比如以下短语:


The king sat on the ___

The queen sat on the ___

The princess sat on the ___

The regent sat on the ___


对于上面所有空格,一个合理的猜测是"throne"(或者"toilet")。也就是说,可能不需要在"king"和"throne"之间、"queen"和"throne"之间进行区分,相反,如果有一些近似意味着"royalty"的东西,每次看到"king"或"queen",就可以用这个东西来代替。然后就只需要关心哪些单词的意思大致相同,然后该怎么做(向"throne"发送大量电流)。


这就是我们要做的。设置一个电路,有 5 万个单词的传感器,并映射到一些较小的输出集合(比如 256 个而不是 5 万个)。同时不是只能触发一个撞针,而是可以一次触发一堆。每种可能的撞针组合都可以代表不同的概念(如"royalty"或"armored mammals")。这 256 个输出使我们能够表示 2256=1.15×1078 个概念,而在现实中甚至更多。就像在汽车的例子中,可以踩下部分刹车,这 256 个输出的每一个都处于 1.0 和 0.0 之间。也许更贴切的比喻是 256 只撞针都向下击打,但每只力度不同。


好吧,以前一个单词需要 5 万个传感器中的某一个来激活,现在我们把一个激活的传感器和 49999 个关闭的传感器浓缩成 256 个数字。所以"king"可能是[0.1, 0.0, 0.9, …, 0.4],"queen"可能是[0.1, 0.1, 0.9, …, 0.4],几乎一样。这些数字列表被称为 encodings(由于历史原因也称为隐藏状态 hidden state,但我不想解释这个,所以我们将坚持使用 encoding)。把 5 万个传感器压缩成 256 个输出的电路被称为 encoder,看上去是这样的:


encoder 网络将监测单个单词所需的 5 万个传感器值压缩为 256 个数字编码(较浅和较深的蓝色用于表示较高或较低的值)。

5.2 解码器(Decoders)

但编码器不会告诉我们下一个单词应该是哪个,所以我们将编码器与解码器网络配对。解码器是另一个电路,采用 256 个数字构成编码,并激活原始的 5 万个撞针,每个单词一个,然后选择输出电量最高的单词,看起来是这样的:


解码器网络将编码中的 256 个值扩展为与每个可能的单词相关联的 5 万个撞针的激活值,数值最高的单词被激活。

5.3 编码器和解码器的组合

编码器和解码器一起工作,形成一个大神经网络:


编码器-解码器网络。


顺便说一下,通过编码实现单个单词输入单个单词输出只需要(50000 × 256) × 2 = 2560 万个参数,看起来好多了。


这个例子是一个单词输入并产生一个单词输出,所以如果想要读取 n 个单词,将有 50000 × n 个输入,编码后将有 256 × n 个输入。


为什么会这样?通过将 5 万个单词都压缩到一个小的数字集合中,我们迫使网络做出妥协,并将可能触发相同输出单词的输入单词分组在一起。这很像文件压缩,压缩文本文档时,我们会得到一个较小的不可读的文档。但可以解压缩文档并恢复原始可读文本。因为 zip 程序用符号替换了某些单词模式,解压缩时知道要将哪些文本替换符号。编码器和解码器电路学习了某种电阻和门的配置,可以用来压缩和解压缩单词。

目录
相关文章
|
2月前
|
机器学习/深度学习 编解码 计算机视觉
一文读懂深度学习中的各种卷积 !!
一文读懂深度学习中的各种卷积 !!
38 0
|
20天前
|
机器学习/深度学习 人工智能 搜索推荐
【边做边学】大语言模型(LLM)
【边做边学】大语言模型(LLM)
|
5月前
|
机器学习/深度学习 人工智能 搜索推荐
11月推荐阅读的12篇大语言模型相关论文
现在已经是12月了,距离2024年只有一个月了,本文总结了11月的一些比较不错的大语言模型相关论文
141 0
|
6月前
|
机器学习/深度学习 存储 人工智能
一文读懂大语言模型(下)
一文读懂大语言模型(下)
53 0
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
一文读懂“大语言模型”
本文基于谷歌云的官方视频:[《Introduction to Large Language Models》](https://www.youtube.com/watch?v=zizonToFXDs&t=525s&ab_channel=GoogleCloudTech) ,整理而成,希望对大家入门大语言模型有帮助。
15173 1
一文读懂“大语言模型”
|
12月前
|
机器学习/深度学习 编解码 算法
一文读懂卷积神经网络
一文读懂卷积神经网络
194 0
|
机器学习/深度学习 人工智能 自然语言处理
为什么ChatGPT这么强?—— 一文读懂ChatGPT原理!
为什么ChatGPT这么强?—— 一文读懂ChatGPT原理!
|
机器学习/深度学习 算法
一篇文章读懂人工神经网络
人工神经网络(ANN)是通过中神经元的信息处理机制开发的解决各种问题的数学模型。本文将通过讲解人工神经网络的原理、实现步骤、实际案例,带着大家读懂人工神经网络。
491 1
一篇文章读懂人工神经网络
|
机器学习/深度学习 自然语言处理 索引
动手学深度学习(八) NLP 文本预处理
动手学深度学习(八) NLP 文本预处理
272 0