大型语言模型(LLM)究竟如何工作

0xkato 发布于 2026-06-02 阅读 96

本文详细介绍了现代基于Transformer的大型语言模型(LLM)的核心机制,包括标记化、嵌入、位置编码(RoPE)、注意力机制、多头注意力、前馈网络、残差流、层归一化和下一个token预测。文章通过清晰的步骤和通俗易懂的“小解释”概念,帮助读者理解LLM如何从文本生成整数序列,并通过注意力让token间共享信息。同时解释了架构与训练权重的区别,以及不同模型(如LLaMA、Mistral)的常见选择(如GQA、SwiGLU、MoE)。适合对LLM工作原理感兴趣的读者入门或复习。

分词

模型并不直接阅读文本。它们读取的是整数 ID。将你的 prompt 转换为这些整数序列的步骤称为分词。分词器接收一个字符串,生成一个整数序列,每个整数指向固定词汇表中的一个条目。现代 LLM 的词汇表通常包含数万到数十万个条目。

小解释:Token ID
Token ID 是模型用来表示词汇表条目之一的整数。模型处理的是数字,而不是书面词语本身。

Token 通常不是完整的单词。它们通常是子词片段。单词 "tokenization" 可能被拆分为 ["token", "ization"]。单词 "running" 可能被拆分为 ["run", "ning"]。原因在于效率。完整单词的词汇表太大,且无法泛化到新词。字符级词汇表又太小,迫使模型从零开始学习最简单的模式。子词分词介于两者之间。最常见的片段成为单个 Token,罕见或新颖的单词则由较小的片段组合而成。

小解释:词汇表
词汇表是分词器固定的片段列表。每个片段都有一个 ID,模型只能直接接收该列表中的 ID。

这种权衡会在人们意想不到的地方显现出来。经典的例子是:问 LLM “strawberry” 中有几个字母 "R"。LLM 过去常常答错。这并不是模型在计数方面失败,而是模型并非直接操作字母,它只处理恰好拼出人类会逐个字母拆分的单词的 Token ID。

分词将文本转换为 Token ID

不同的模型家族使用不同的分词器。GPT 模型使用字节对编码变体。SentencePiece 在 LLaMA 风格的模型中很常见。选择会影响计算量(更少的 Token 意味着更少的工作)以及多语言覆盖等方面,但基本形态是相同的。输入文本,输出整数。

现在 prompt 是一个整数序列,下一步是赋予这些整数意义。


嵌入

1024 这样的 Token ID 只是一个行索引。它本身没有任何意义。赋予它意义的是一张巨大的表,称为嵌入矩阵。

每个模型都有这样一个矩阵。词汇表中每个条目对应一行,每行是一个长数字向量。每行的长度是模型的隐藏大小。在许多 7B 类模型中,这意味着每个 Token 有 4,096 个数字。较大的模型通常使用更宽的向量。

小解释:向量
向量是一个数字列表。在 Transformer 中,每个 Token 变成一个向量,这样模型就可以对它进行数学运算。

当分词器将整数交给模型时,模型查找该行并使用该向量。这个向量就是该 Token 的嵌入。它是模型对该 Token “含义” 的表示,是在训练期间学习得到的。

小解释:嵌入矩阵
嵌入矩阵是一个查找表。输入 Token ID,输出学习到的向量。

这些嵌入的一个有趣特性是,语义相似的 Token 最终会得到相似的向量。"king" 的向量在空间上接近 "queen" 的向量,"Paris" 的向量接近 "France" 的向量。这些都不是硬编码的。它是在大量文本上训练自然出现的,模型学习到这些位置是因为这能让它很好地预测文本。

你可以对嵌入进行算术运算,有时是有效的。著名的例子是 king − man + woman ≈ queen。嵌入空间的几何结构承载着真实的语义结构,尽管没有人告诉模型要这样构建。

具有语义关系的嵌入空间类比图

值得明确的是:在这个阶段,每个 Token 都被替换为其嵌入,但仅凭嵌入本身并不能说明该 Token 在序列中的位置。"dog" 的向量,无论 "dog" 是 prompt 中的第一个词还是第五个词,都是一样的。这是一个问题。

这正是位置编码要填补的空白。


位置编码

纯自注意力机制本身并没有内置的词序表示。如果没有某种位置信号,它就无法直接知道 "dog" 出现在 "bites" 之前还是之后。

词序会改变含义。因此模型需要另一个部分。它需要一种方法将每个 Token 的位置注入到数学运算中。

小解释:位置编码
位置编码是模型获取顺序信息的方式。它告诉模型每个 Token 在序列中的位置。

原始的 Transformer 论文(Vaswani et al. 2017)通过为每个位置赋予自己独特的数字模式,并将其直接添加到每个 Token 的嵌入中,在所有其他处理之前完成。位置 1 有一种模式,位置 5 有另一种模式,位置 100 又有另一种。这些模式来自不同频率的正弦和余弦波。现在,"dog" 在位置 1 的嵌入与 "dog" 在位置 5 的嵌入不同,仅仅是因为添加的位置模式不同。

这很有效,选择正弦编码部分是因为它们可以外推到训练期间见过的确切序列长度之外。但是,随着模型规模的扩大,加性位置方案仍然存在两个重要问题。

首先,嵌入必须在一组数字中同时承载含义和位置。能打包的信息量是有限的。

其次,特别是学习到的绝对位置嵌入不能很好地泛化。如果你在最长 2,048 个 Token 的 prompt 上训练,模型在训练期间从未见过位置 5,000,并且该位置的嵌入也不是以同样的方式学习到的。

现代模型大多使用一种不同的方案,称为旋转位置嵌入(RoPE),由 Su 等人于 2021 年提出,现在用于 LLaMA、Mistral、Gemma、Qwen 以及大多数其他开源权重家族。直观地说:RoPE 不是将位置信息添加到每个 Token 的向量中,而是根据其位置以一定角度旋转该向量。位置 1 的 Token 获得一个小的旋转,位置 100 的 Token 获得一个较大的旋转。当稍后在注意力机制中比较两个 Token 时,重要的是它们旋转的差值,这编码了它们之间的距离。

小解释:RoPE
RoPE 代表旋转位置嵌入。它不是添加位置向量,而是旋转 Token 向量,使得相对距离在注意力机制中显现出来。

旋转位置嵌入按位置旋转向量

实际优势是确实存在的。RoPE 自然地编码了相对位置(这更接近注意力实际想要的)。它更好地泛化到更长的上下文。并且它不会为模型增加新的参数。

即使有了好的位置编码,现代 LLM 也有一个著名的“迷失在中间”问题(Liu et al. 2023)。它们更可靠地使用长 prompt 开头和结尾的信息,而不是埋在中间的信息。这就是为什么像“把重要上下文放在开头”或“在结尾重复关键信息”这样的提示工程技巧确实有效。模型并没有平等地使用 prompt 的每个部分。

在 Token 含义和位置都被编码之后,下一个问题是 Token 之间究竟如何交换信息?


注意力

这就是赋予该架构其名称的机制。注意力。

在每个 Transformer 层内部,注意力做一件事。它让每个 Token 可以查看它被允许看到的其他 Token,并决定哪些 Token 对下一步重要。

它通过同时赋予每个 Token 三个角色来实现这一点。每个 Token 被转换为三个新向量,称为 Query、Key 和 Value(Q、K、V)。

小解释:Q、K、V
Query 意思是“我在找什么”,Key 意思是“我匹配什么”,Value 是当匹配强烈时被复制的信息。

  • Query 问:“我从其他 Token 那里寻找什么?”
  • Key 说:“这就是我提供给看向我的 Token 的东西。”
  • Value 承载:“这就是当匹配发生时被传递的东西。”

同一个 Token 同时扮演所有三个角色。Q、K、V 的变换是学习到的矩阵,因此模型在训练过程中弄清楚每个 Token 应该寻找什么以及应该提供什么。

匹配通过相似度分数进行。每个 Token 的 Query 与被允许看到的每个 Token 的 Key 进行比较,使用缩放点积。直观地,这衡量了两个向量对齐的程度。缩放用于在 softmax 之前保持数值稳定。

小解释:点积
点积是一种简单评估两个向量对齐程度的方法。对齐程度越高意味着匹配越强。

然后,匹配分数通过 softmax 转换为权重。Softmax 接受任意一组数字,并将其转换为一个类似于概率的分布,总和为 1。匹配分数较高的 Token 获得更高的权重,然后这些权重用于对 Value 向量进行加权平均。

小解释:softmax
Softmax 将原始分数转换为总和为 1 的权重。大分数获得大权重,小分数获得小权重。

一个例子。考虑句子 “The cat that I saw yesterday was sleeping.” 当模型处理 “was” 时,它需要弄清楚什么在睡觉。“was” 的 Query 向量与被允许查看的 Token 的 Key 向量进行比较。与 “cat” 的点积很高,因为模型已经学到像 “was” 这样的动词需要一个主语,并且像 “cat” 这样的主语会产生与之很好对齐的 Key 向量。与 “yesterday” 的点积很低。Softmax 将这些分数转换为权重,“cat” 获得高权重,“yesterday” 获得低权重。然后模型对相应的 Value 向量进行加权求和,因此 “cat” 的 Value 支配了结果。“was” 的新表示现在主要由 “cat” 的 Value 塑造。这就是一个位于前面几个位置的 Token 如何成为指代对象的。

对于 GPT 风格的语言模型,有一个特定的约束,即它们从左到右生成文本。位置 5 的 Token 只允许关注位置 1 到 5。它不能关注位置 6、7、8 的 Token,因为这些还没有生成。这称为因果掩码。实现很简单:未来 Token 的匹配分数非常低,以至于在 softmax 后它们实际上权重为零。

小解释:因果掩码
因果掩码隐藏了未来的 Token。它阻止仅解码器的语言模型在预测下一个 Token 时窥视未来。

显示因果掩码和对 “cat” 高注意力的注意力热图

可解释性研究中最有趣的发现之一是关于称为归纳头(induction heads)的专门注意力头,由 Anthropic 在 2022 年发现。这些头学会了在 prompt 中发现 “A B ... A” 形式的模式,并预测 B 接下来出现。当模型第二次看到 “A” 时,归纳头会回顾 “A” 之前出现的位置,看到后面跟着什么,并复制它。它们是上下文学习(LLM 从 prompt 中获取模式并继续执行的能力)背后最清晰的已知机制之一。

小解释:归纳头
归纳头是一种注意力头,它注意到 prompt 中重复的模式并帮助继续下去。

注意力有一个巨大的成本。在全注意力中,每个 Token 都会与它被允许看到的所有 Token 进行比较,因此将 prompt 长度加倍大致会使工作量增加四倍。这就是为什么长 prompt 运行成本高,也是为什么最近很多研究都集中在提高注意力效率上(FlashAttention、稀疏注意力、线性注意力)。

但一个注意力头只会给模型一种学习到的关于这些关系的视图。


多头注意力

单次注意力传递只给模型一种决定哪些 Token 对哪些其他 Token 重要的方式。这还不够。语言有许多同时发生的关系。主语和动词一致。代词及其所指代的名称。句子之间的远距离引用。词序和局部短语。

多头注意力通过并行运行多次注意力来解决这个问题,每次并行传递在其自己的更小空间中操作。每次并行传递称为一个头。

小解释:注意力头
注意力头是独立的一次注意力传递,具有自己的学习到的投影。

这部分经常被错误描述,包括在很多教程中。每个头并不是获得原始 Token 向量的一个文字切片。每个头都有自己的学习到的投影矩阵,将完整的 Token 向量映射到其自己更小的 Q、K、V 向量。因此,如果一个模型每个 Token 有 4,096 个数字,并有 32 个头,每个头通常在一个 128 维的空间中工作,但这 128 个数字是完整 4,096 个数字的学习到的投影,而不是固定的切片。是同一个 Token 的不同“视图”,而不是不同的块。

每个头独立运行其注意力传递。然后所有头的输出被拼接起来,并通过一个最终的线性层,将它们混合回一个全尺寸的向量。模型也学习这个最终的混合。

多头注意力组合专门的注意力头

有趣的是,不同的头往往最终变得部分专门化。模型从未被告知每个头应该做什么。专门化在训练过程中自然出现。研究人员发现了跟踪语法(将动词与其宾语、冠词与其名词联系起来)的头、确定哪个代词指代哪个名称的头、跟踪位置模式的头、归纳头等等。一个单一的 Transformer 层可能有 32 个头。一个现代前沿模型有数十层。因此,一个典型的 LLM 总共有数千个注意力头,每个头都添加了自己的学习到的视图。

有一个实际成本问题促使了最近的一个架构变化。每个头需要为其已生成的所有 Token 在内存中保留 Key 和 Value 向量,这样当生成新 Token 时,模型不必从头重新计算所有内容。这称为 KV 缓存,是运行长上下文的 LLM 时的主要内存成本。

小解释:KV 缓存
KV 缓存在生成过程中存储旧的 Key 和 Value 向量。它使模型无需在每次添加 Token 时重新计算整个 prompt。

现代仅解码器 LLM 大多使用一种称为分组查询注意力(GQA)的变体。不是每个头都有自己的 Key 和 Value,而是头组共享相同的 Key 和 Value 头。LLaMA-2 70B 有 64 个查询头,但只有 8 个 Key/Value 头。Mistral 7B 有 32 个查询头和 8 个 Key/Value 头。结果是准确性几乎与全多头注意力相同,但内存压力和推理成本大大降低。

小解释:GQA
分组查询注意力允许多个查询头共享较少的 Key/Value 头。这减少了 KV 缓存内存,同时保持许多查询视图。


前馈网络

在注意力完成 Token 之间的信息混合后,每一层都有一个第二步,这一点很少有人提及。那就是前馈网络。

注意力是关于 Token 之间相互交流,而前馈网络则是关于每个 Token 独立地进行更多处理。它独立地对每个 Token 的向量运行,没有跨 Token 的混合。

前馈网络依次做三件事:

  1. 将 Token 的向量扩展到更大的尺寸(原始 Transformer 使用了 4 倍,而现代 SwiGLU 模型通常使用不同的扩展尺寸)。
  2. 应用一个非线性函数。
  3. 将向量压缩回其原始尺寸。

前馈网络扩展、变换并压缩每个 Token 向量

中间的那个非线性步骤在做一些值得理解的具体事情。非线性是一个使其输入弯曲的函数。最简单的 ReLU,对任何负数输出零,并通过正数不作改变。

小解释:非线性
非线性是一个防止网络坍缩成一个大的线性变换的函数。

没有它,FFN 就只是堆叠在一起的两个线性层,而堆叠纯线性数学会导致坍缩。连续两个线性层在数学上等同于一个单一的线性层,而连续一百个线性层仍然等同于一个。非线性阻止了这种坍缩,这就是 FFN 能够比单个矩阵乘法做更丰富事情的原因。

原始的 Transformer 使用了 ReLU。GPT 和 BERT 转向了 GELU。像 LLaMA、Mistral 和 PaLM 这样的现代模型使用了 SwiGLU。扩展然后压缩的结构保持不变。被迭代的是非线性本身。

密集 Transformer 模型中的大部分参数位于 FFN 中,而不是注意力中。很大一部分权重位于前馈层。

而这些参数并不是通用的。它们承载了模型存储的大量事实和语义结构。研究人员发现 FFN 内部的一些神经元与特定概念或事实强烈相关。一个神经元可能在与埃菲尔铁塔相关的文本上强烈激活。另一个在编程语言上。另一个在过去时态的动词上。当模型“知道”巴黎是法国的首都时,这个事实在特定层的 FFN 权重和激活中表示。

这种存储记忆的属性有一个有趣的后果。研究人员已经找到了如何在已训练的模型中直接编辑某些事实而无需重新训练的方法。像 ROME(Rank-One Model Editing,秩一模型编辑)这样的方法可以通过对特定的 FFN 权重矩阵进行有针对性的低秩编辑,将“埃菲尔铁塔在巴黎”改为“埃菲尔铁塔在罗马”。然后模型倾向于生成与编辑后的关联一致的文本。

一些现代前沿模型已经开始用所谓的混合专家(MoE)来替换密集 FFN。不是每层一个前馈网络,而是模型有许多并行的 FFN(称为专家)和一个微小的路由器网络,它决定每个 Token 由哪些专家处理。Mixtral 8x7B 每层有 8 个专家;对于任何给定的 Token,只有 2 个被激活。总参数量大幅度增加,但每个 Token 的计算量增长得慢得多,因为只有几个专家运行。这就是如何在不让推理成本按比例增长的情况下扩展参数数量的方法。

小解释:MoE
混合专家意味着模型有多个前馈网络,并且每个 Token 仅通过其中的几个进行路由。

Mixtral 8x7B 有 467 亿个总参数,但每个 Token 只使用约 129 亿个参数。这已成为非常大模型的常见选择,因为它允许你不断增加参数量,而不会使推理成本按比例增长。


残差流和层归一化

残差流使模型成为“加性”而非“替换性”。在注意力运行之后,或者在前馈网络运行之后,结果通常不会替换 Token 的向量。它会添加到它上面。按位置添加。新向量等于旧向量加上子块的输出。

小解释:残差连接
残差连接将一个块的输出添加回它起始的向量。它给信息和梯度提供了一条穿过网络的捷径。

跨越三十、五十或一百层,每一层的贡献会累积起来,而不是简单地覆盖之前的向量。这个运行总和称为残差流,它有一个奇怪的属性。原始的输入嵌入仍然有一条直接相加的路径进入后面的层,与沿途每个子块的贡献混合在一起。

残差流累积注意力和前馈输出

残差连接并非为 Transformer 发明。它们来自 ResNet(He et al. 2015),最初用于图像识别。动机是深度网络无法训练。训练信号在通过许多层反向传播时变得太弱(有时太强)。模型无法真正从自己的错误中学习。添加一条捷径路径让信号可以直接从输出流向输入。突然之间,你可以训练具有数百层的网络。Transformer 继承了同样的技巧。

在现代可解释性研究中,残差流已成为中心对象。每个组件、每个注意力头、每个前馈网络,甚至最后的解嵌入步骤,都从残差流中读取并写回。

第二个部分,层归一化,存在的原因更加实际。没有它,残差流将无法保持稳定。通过数十次加法的数字往往会要么爆炸性增长,要么坍缩到零。无论哪种情况,训练都会失败。层归一化在子块之间将每个 Token 向量重新缩放到一个受控范围。

小解释:层归一化
层归一化重新缩放 Token 向量,使其数字在模型训练期间保持稳定范围。

最初的 2017 年 Transformer 在每个子块之后应用归一化(后归一化)。这对于浅层模型有效,但随着深度增加,训练变得不可靠。现代 Transformer(GPT-2 之后,LLaMA、Mistral)通常在每个子块之前应用归一化(前归一化)。这是使非常深的 Transformer 更容易训练的改变之一。

该函数本身也发生了变化。许多现代开源模型(LLaMA、Mistral、Gemma、Phi)使用一种更简单的变体,称为 RMSNorm。原始的层归一化同时做两件事:将每个向量移近零,然后重新缩放数字的大小。RMSNorm 去掉了移位步骤,只保留了重新缩放。根据经验,重新缩放带来了大部分好处,同时计算成本更低。

小解释:RMSNorm
RMSNorm 是一种更便宜的归一化方法,它重新缩放向量大小,而不首先减去均值。

这就是不起眼的机制。没有残差连接,非常深的模型训练起来会困难得多。没有层归一化,运行总和可能会爆炸或坍缩。两者兼备,就能得到数百层深的模型。


下一个 Token 预测

在所有注意力层和前馈处理层完成后,模型为序列中的每个 Token 都有一个向量。在生成过程中,为了预测下一个词,它只取最后一个 Token 的最终向量。

这个最后的向量被转换为每个可能的下一个 Token 的一个数字。如果词汇表有 100,000 个 Token,那么就有 100,000 个数字。这些数字称为 logits。它们还不是概率。它们可以是任何大小,正数或负数。

小解释:logits
Logits 是每个可能的下一个 Token 的原始分数。它们只在 softmax 之后才成为概率。

一个 softmax 将这些 logits 转化为模型在可能的下一个 Token 上的概率分布。与之前相同的操作,在模型中的不同位置。

模型通常不会每次都选择概率最高的 Token。解码设置控制输出的确定性或多样性程度。温度改变分布的尖锐程度。Top-k 和 top-p 将选择限制在最可能的下一个 Token 上。这就是为什么同一个模型可以在一种设置下感觉精确,而在另一种设置下感觉更有创造力。

小解释:温度
温度控制采样过程中的随机性。低温度使模型更保守;高温度使其更多样化。

一旦选出一个 Token,它就会被添加到输入中。模型在较长的序列上运行下一步,通常重用 KV 缓存,这样它就不会从头重新计算整个前缀。对新 Token 进行新的注意力。新的前馈。新的最终向量。新的预测。循环继续,直到模型发出序列结束 Token 或达到长度限制。整个段落只是这个循环,一次一个 Token。

这个单一目标,预测下一个 Token,是基础 LLM 的核心训练信号。基础模型并不是直接在事实准确性、对话能力、推理或编码上进行训练的。它被训练来预测海量文本中的下一个 Token。随后的后训练可以针对指令遵循、偏好、安全性和对话行为对模型进行微调。

有一个值得了解的重大效率创新。它叫做推测解码。一个快速的小模型先行提议几个 Token。大模型并行验证它们。如果提议的 Token 在大模型的概率下被接受,就接受它们。如果不是,则退回到大模型。正确完成时,输出分布与单独运行大模型相匹配,但循环可以运行得快得多。

小解释:推测解码
推测解码使用一个小草稿模型提前猜测,然后要求更大的模型一次验证几个猜测的 Token。

下一个 Token 预测循环是架构中最简单的部分,但正是它使整个系统工作。


架构 vs 训练权重

我们已经介绍了核心机制:Token、嵌入、位置编码、注意力、多头注意力、前馈网络、残差流和归一化,以及输出端的下一个 Token 循环。这就是一次传递中的基本架构。

那么,GPT、Claude、Gemini 和 LLaMA 之间实际上有什么不同呢?公开的细节各不相同,专有模型也没有公布每一个架构选择。但在本文所涵盖的层面上,它们大致属于同一个 Transformer 家族设计空间。

大多数现代基于 Transformer 的 LLM 使用相同的广泛结构:分词、嵌入、位置编码、堆叠的 Transformer 层(每个都有多头注意力和前馈网络)、残差流、层归一化和下一个 Token 预测。

模型之间的变化在于:

  1. 训练后的权重本身,从不同规模的不同训练数据中学习得到。
  2. 配置:层数、词汇表大小、头数、参数量、MoE 还是密集。
  3. 后训练:指令微调、从人类反馈中学习、在基础模型之上应用的安全控制。

小解释:权重
权重是模型内部学习到的数字。训练改变这些数字,直到模型能很好地预测文本。

2023-2025 年间的“现代 Transformer”栈在许多重要的前沿模型和开源权重模型上收敛于一组共同的选择,尽管不同的团队是独立得出的。前归一化位置、RMSNorm、RoPE、SwiGLU、分组查询注意力、一些最大模型中的混合专家。这些都不是一次性发明的。它们是在原始 2017 设计之上经过大约五年的改进积累起来的。


未来方向

围绕 Transformer 家族架构的趋同在机器学习历史上是不寻常的。在该领域的大部分历史中,每个问题都有自己的专用网络。图像识别使用一种。语言使用另一种。音频使用第三种。视觉和语言团队几乎不共享方法。

现在 Transformer 风格的模型出现在语言、视觉、音频和多模态系统中。Transformer 吸收了该领域的很大一部分。

这可能会改变。Mamba 和其他状态空间模型是可信的替代方案,特别是对于非常长的序列。混合架构正在探索中。在前沿领域,混合专家已经改变了“架构”的含义,这在五年前会被认为是异国情调的。

但是本文中的核心机制(Token、嵌入、位置编码、注意力、前馈网络、残差流和归一化以及下一个 Token 预测)是持久的部分。即使架构发生变化,这些也是任何序列模型必须以某种形式解决的问题。

如果你已经读到这里,你可以阅读许多现代 Transformer 论文或模型卡,并知道每一部分在谈论哪个组件。这就是目标。

非常欢迎反馈。如果其中任何内容让你感兴趣,请通过 X 联系我。我喜欢结交新朋友。

  • 原文链接: 0xkato.xyz/how-llms-actu...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论