返回资讯中心
外部精选
软件工程
#开发者实时流

GPT架构图解:GPT无法理解词语,需将单词转为向量处理

来源标题:The GPT Architecture, on a Napkin (2022)

GPT作为机器学习算法无法直接理解词语,需将单词转换为数值向量。GPT词表包含50257个词,每个词通过one-hot编码转为50257维向量,序列处理时形成2048×50257矩阵。GPT-3实际采用字节级BPE分词,将文本拆分为字符组而非完整单词。

Hacker News 最新zenincognito2026/11/8 · 5 天前23 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

等等,GPT实际上并不能理解单词。作为一个机器学习算法,它处理的是数字向量。那么,我们如何将单词转化为向量呢?

第一步是建立一个包含所有单词的词表,这样我们就可以为每个单词分配一个数值。比如,土豚是0,亚伦是1,依此类推。(GPT的词表包含50257个单词。)于是,我们可以将每个单词转换为一个大小为50257的独热编码向量,其中仅索引i(即单词的数值)处的维度为1,其余均为0。当然,我们对序列中的每个单词都执行此操作,从而得到一个2048 x 50257的由1和0组成的矩阵。

注意:为了提高效率,GPT-3实际上采用了字节级字节对编码(BPE)分词法。这意味着词表中的“单词”并非完整单词,而是文本中频繁出现的字符组(对于字节级BPE,即字节)。使用GPT-3的字节级BPE分词器,“并非所有英雄都披着斗篷”这句话被分割成 tokens “Not” “all” “heroes” “wear” “cap” “es”,它们在词表中的ID分别为3673、477、10281、5806、1451、274。这里有一个非常好的入门介绍,以及一个GitHub实现,你可以自己尝试一下。2022年更新:OpenAI现在有一个分词工具,允许你输入一些文本并查看它是如何被分解成tokens的。

50257对于向量来说相当大,且大部分填充为零,浪费了很多空间。为了解决这个问题,我们学习一个嵌入函数:一个神经网络,它接收一个长度为50257的由1和0组成的向量,输出一个n长度的数字向量。这里,我们试图将单词含义的信息存储(或投影)到一个更小的维度空间中。例如,如果嵌入维度是2,就相当于在二维空间中为每个单词存储一个特定坐标。另一种直观的理解方式是,每个维度都是一个虚构的属性,如“柔软度”或“虚构度”,给定每个属性的值,我们就能准确知道所指的单词。当然,嵌入维度通常远大于2:GPT使用的是12288维。实践中,每个单词的独热向量与学习到的嵌入网络权重相乘,最终得到一个12288维的嵌入向量。用算术术语来说,我们将2048 x 50257的序列编码矩阵与50257 x 12288的嵌入权重矩阵(已学习)相乘,得到2048 x 12288的序列嵌入矩阵。

从现在起,我将把二维矩阵画成小方块,并在旁边标注维度。适用时,我会分隔矩阵行,以明确每一行对应序列中的一个单词。还需注意,由于矩阵乘法的工作原理,嵌入函数(即嵌入权重矩阵)是分别应用于每个单词编码(即序列编码矩阵中的行)的。换句话说,结果等同于将每个单词编码向量分别传递给嵌入函数,最后将所有结果连接起来。这意味着:至此,序列中尚无信息流动,也没有关于tokens绝对或相对位置的信息。

为了编码当前token在序列中的位置,作者将token的位置(一个标量i,在[0-2047]范围内)通过12288个正弦函数传递,每个函数具有不同的频率。为何此法有效,我并未完全明白。作者解释为这产生了许多相对位置编码,对模型很有用。对于这一选择的其他可能心智模型:考虑信号常被表示为周期性样本之和的方式(见傅里叶变换或SIREN网络架构),或是语言自然呈现各种长度的循环(如诗歌)的可能性。结果是,对于每个token,得到一个12288维的数字向量。正如嵌入一样,我们将这些向量合并成一个2048行的单一矩阵,其中每一行是序列中某个token的12288列位置编码。

最后,这个序列位置编码矩阵,其形状与序列嵌入矩阵相同,可以直接与其相加。

简而言之,注意力机制的目的是:对于序列中的每个输出,预测应关注哪些输入tokens及关注程度。这里,设想一个包含3个token的序列,每个token用512个值的嵌入表示。模型学习3个线性投影,所有这些都应用于序列嵌入。换句话说,学习3个权重矩阵,将我们的序列嵌入转换为三个独立的3x64矩阵,每个矩阵服务于不同的任务。前两个矩阵(“查询”和“键”)相乘(QKT),得到一个3x3矩阵。这个矩阵(通过softmax归一化)表示每个token对其他token的重要性。注意:这是GPT中唯一跨序列单词操作的运算,也是唯一矩阵行间交互的运算。第三个矩阵(“值”)与这个重要性矩阵相乘,结果为每个token生成一个所有其他token值的混合,权重由各自token的重要性决定。例如,如果重要性矩阵仅由1和0组成(每个token只有一个其他token对其重要),结果就像根据哪个token最重要来选择值矩阵中的行。希望这有所帮助,即使未能直观理解注意力过程,至少能理解所使用的精确代数。

现在,在作者提出的GPT模型中,他们使用了多头注意力。这意味着上述过程重复多次(GPT-3中为96次),每次都有不同的学习到的查询、键、值投影权重。每个注意力头的结果(单个2048 x 128矩阵)被拼接在一起,形成一个2048 x 12288矩阵。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →