【官方双语】GPT是什么?直观解释Transformer | 深度学习第5章
视频通过可视化方式深入浅出地解析了GPT及Transformer架构的底层原理、数据流动过程及词向量转换机制。
UP主: 3Blue1Brown · 时长: 27:14 · 🔗 B站原视频
发布: 2024-04-30 · 收录: 2024-09-04
标签: GPT · Transformer · 深度学习 · 大语言模型 · 神经网络
GPT 是什么:Generative / Pre-trained / Transformer
GPT 这三个字母代表 Generative Pre-trained Transformer。
Generative 比较直观,就是能生成新文本的模型。Pre-trained 指模型先在海量数据上做过预训练,并且暗示后面还可以用额外训练在具体任务上微调。
关键在最后一个词:Transformer。Transformer 是一种特定的神经网络(机器学习模型),也是当下这一波 AI 热潮背后的核心发明。
这套视频要做什么:跟着数据流走一遍 Transformer
这期视频和后续章节想做的是:用偏可视化的方式解释 Transformer 内部到底发生了什么。
我们会跟着在网络里流动的数据,一步一步看它怎么走、怎么变。
Transformer 都能用来做什么
基于 Transformer 可以做很多不同类型的模型。
- 有些模型输入音频,输出文字转写。
- 也有模型反过来,只用文本就能合成语音(这句话就来自这种模型)。
- 2022 年火起来的很多工具,比如输入文字描述生成图片的 Dolly、Midjourney,也都建立在 Transformer 之上。
最初的 Transformer 是 Google 在 2017 年提出的,目标是做机器翻译:把一种语言的文本翻译成另一种语言。
我们重点关注的这一类模型,会读入一段文本(有时也会配合图像或声音),然后预测“接下来最可能出现什么”。这个预测的形式是:对很多可能的“文本片段”给出一个概率分布。
乍看之下,“预测下一个词”和“生成文本”像是两件事,但只要你能预测下一个词,就可以通过不断把预测结果接到后面、再继续预测,来生成一整段文本。
作为聊天机器人:从 system prompt 到持续预测
要把这种“预测下一个 token”的工具做成聊天机器人,一个最直接的起点是:
先给一点文本来建立“用户在和一个乐于助人的 AI 助手互动”的场景,也就是 system prompt。然后把用户的提问当作第一段对话输入,让模型去预测一个“这种助手会怎么回答”的续写。
要让它表现得更好,还需要额外的训练步骤,但从高层看,大致就是这个思路。
Transformer 的第一步:token、向量、嵌入
当你把输入喂给模型,第一步是把输入拆成很多小片段,这些片段叫 tokens。
- 对文本来说,token 往往是一个词、词的一部分,或常见的字符组合。
- 如果涉及图像或声音,token 也可能是图像的小块(patch),或声音的小段。
接下来,每个 token 都会对应到一个向量,也就是一串数字,用来“编码”这个片段的含义。你可以把这些向量想成高维空间里的坐标:含义相近的词,往往会落在彼此接近的位置。
负责“把 token 变成向量”的,是一个嵌入矩阵(embedding matrix)。它会为词表里的每个 token 提供一个向量。我们把它记作 (W_E)。像模型里的其他矩阵一样,它一开始是随机的,但会在训练中学出来。
在 GPT‑3 里,词向量维度是 12,288;词表大小是 50,257。所以仅这一块 embedding 的参数量大约是:
50,257 × 12,288 ≈ 617,000,000(约 6.17 亿)
注意力模块:让向量彼此“交流”
得到一串向量之后,它们会通过一个 attention block。
attention block 允许这些向量互相传递信息、更新彼此的值,用来处理“上下文会改变词的含义”这种情况。比如:
- “a machine learning model” 里的 model
- “a fashion model” 里的 model
这两个 model 的含义不同,而注意力模块要做的事,就是判断上下文里哪些词对更新某个词的“含义”最相关,以及应该怎么更新。
这里说的“含义”,最终都编码在向量的各个分量里。
前馈网络(MLP / Feedforward)
attention 之后,向量还会经过另一类运算,不同资料可能会叫它 multilayer perceptron(MLP)或 feedforward layer。
一点背景:机器学习、可训练参数、权重
机器学习的思路是:很多任务(比如给图片打标签、根据一段文字预测下一个词)看起来需要直觉和模式识别。
早期 AI 可能会尝试在代码里手写规则,但机器学习更常见的做法是:搭一个非常灵活、带很多可调参数的结构(像一堆旋钮),然后用大量“输入—输出”样例去调这些参数,让模型模仿这种行为。
深度学习指的是一类在过去几十年里被证明能很好扩展规模的模型。它们通常使用同一种训练算法:反向传播(backpropagation)。
这些可训练参数几乎总被叫做 weights(权重)。因为在这些模型里,参数与数据的交互核心就是“加权求和”。实际实现里,你通常会看到它们被打包成各种矩阵与向量乘法。
权重 vs 数据:训练学到的“脑子”和一次运行的“输入”
在讲解里可以把两类东西分开:
- 权重(weights):训练中学到的,决定模型行为。
- 数据(data):一次运行中输入的具体内容,比如一段文本,在网络里流动并被变换。
词向量的几何直觉:语义方向与类比
把词变成向量在 Transformer 之前就很常见,只是如果你第一次看到会有点怪。
一个核心直觉是:训练过程中,模型往往会学出一种嵌入空间,使得空间里的某些方向带有语义含义。比如你去找与 “tower” 的 embedding 最近的词,会发现它们都很“tower-ish”。
经典类比是:king + woman − man ≈ queen(大致上)。不过在一些数据里,queen 的真实用法不只是 “king 的女性版”,所以这个例子常常没你想的那么准。家庭关系一类的类比往往更能说明问题。
另一个例子:Italy − Germany + Hitler,会接近 Mussolini。这体现的是“方向”可以编码某类关系信息。
点积:一种相似度(对齐程度)的计算方式
接下来很有用的一个数学直觉是点积(dot product)。
计算上,点积就是对应分量相乘再求和,这很符合我们在网络里经常做的加权求和。几何上,当两个向量方向更一致时,点积更大;当它们正交时,点积为 0。
上下文长度(context size):一次能处理多少 token
网络一次只能处理固定数量的向量,这个数量叫 context size。
GPT‑3 训练时的 context size 是 2048,所以流经网络的数据看起来像一个有 2048 列的数组,每一列是一个 12,288 维向量。
这也限制了模型在预测下一个词时,最多能利用多少上下文信息。这就是为什么早期某些聊天机器人在长对话里会“忘记”前面的内容。
输出层与 softmax:把分数变成概率分布
最终我们想要的输出是:对“下一步可能出现的 token”给出一个概率分布。
如果你有一串数字想把它当作概率分布,每个值必须在 0 到 1 之间,并且总和为 1。softmax 是把一串任意实数变成合法概率分布的常用方法,它会让大的值更接近 1,小的值更接近 0。
softmax 的做法是:先对每个数做 (e^{x}),得到一串正数;再把它们除以总和,让结果归一化为和为 1 的分布。
temperature:让分布更“随机”或更“确定”
在生成时,softmax 里常会引入一个常数 (t),叫 temperature。
- (t) 更大:较小的值会得到更多权重,分布更均匀,输出更发散。
- (t) 更小:大的值更占优势,分布更尖锐,输出更确定。
logits:softmax 之前的“原始分数”
术语上,softmax 的输入常被叫做 logits。也就是说:模型把文本输入进来,embedding 经过网络流动,最后通过一个“反嵌入”矩阵(unembedding matrix)做线性变换,得到一串还没归一化的原始输出分数,这些分数就是下一词预测的 logits。
这章的目标:为注意力机制打地基
这一章的很多内容是在为理解 attention 机制做铺垫。
如果你对词向量、softmax、点积如何衡量相似度,以及“所有计算基本都要写成带可训练参数的矩阵乘法”这些概念有直觉,那么理解注意力机制这个现代 AI 爆发的基石就会顺很多。下一章会继续展开。