大语言模型实际工作原理
摘要
深入剖析现代大语言模型的工作原理,涵盖从分词到下一个词预测的核心机制,无需复杂数学知识。
<p><a href="https://lobste.rs/s/pumnjn/how_llms_actually_work">评论</a></p>
查看缓存全文
缓存时间: 2026/06/08 03:17
# 大型语言模型究竟如何工作
来源: https://www.0xkato.xyz/how-llms-actually-work
- 首页 (https://www.0xkato.xyz/)
- 博客 (https://www.0xkato.xyz/blog)
- 研究 (https://www.0xkato.xyz/projects)
- 关于 (https://www.0xkato.xyz/about)
- 作品集 (https://github.com/0xkato/Portfolio/tree/main)
2026年6月1日 星期一 · 26分钟
本文是对大型语言模型(LLM)工作原理的详细介绍。现代 LLM 大多通过反复堆叠 Transformer 模块构建而成,因此理解 Transformer 的机制便能掌握其中的核心。
我将介绍现代基于 Transformer 的 LLM 内部核心机制,而不涉及令人头疼的数学细节。别误会,数学自然是应该学习的,但这篇文章可作为入门引导。
大多数现代 LLM 共享相同的 Transformer 家族骨架。差异主要来自训练数据、规模和配置选择,以及后续的微调。读完本文,你将能读懂许多现代 LLM 的论文或模型卡,并理解各章节讨论的是架构的哪一部分。
以下是叙述路线:
1. 词元(Token):文本字符串如何转化为整数序列
2. 嵌入(Embeddings):这些整数如何获得含义
3. 位置编码(Positional Encoding):模型如何知道词元的先后顺序
4. 注意力(Attention):词元之间如何共享信息
5. 多头注意力(Multi-head Attention):模型如何同时追踪多种关系
6. 前馈网络(Feed-Forward Network):模型大部分存储结构所在
7. 残差流与层归一化:深层堆叠为何可训练
8. 预测下一个词元:模型实际输出什么以及生成循环如何工作
9. 架构与训练权重:现代 LLM 的广泛共性及差异
从词元化到下一个词元预测的 Transformer 流程
文中穿插了“小解释”环节,方便不同背景的读者跟上。
---
## 词元化(Tokenization)
模型并不直接阅读文本。它们读取的是整数 ID。将你的提示(prompt)转换为这些整数序列的步骤。
这个转换步骤被称为词元化。词元化器(Tokenizer)接收字符串,输出整数序列,每个整数指向固定词汇表中的一个条目。现代 LLM 的词汇表通常包含数万到数十万个条目。
> **小解释:词元 ID** 词元 ID 是模型用于一个词汇表条目的整数。模型处理的是数字,而不是书面文字本身。
词元通常不是完整的单词。它们通常是子词单元。例如,“tokenization”这个单词可能被拆分成[“token”, “ization”]。“running”可能被拆分成[“run”, “ning”]。原因在于效率。按单词构建的词汇表过于庞大,且难以泛化到新词。按字符构建的词汇表又太小,迫使模型从头学习最简单的模式。子词词元化介于两者之间。最常见的部分成为单个词元,罕见或新词则由更小的部分组合而成。
> **小解释:词汇表** 词汇表是词元化器的固定列表。每个部分都有一个 ID,模型只能直接接收该列表中的 ID。
这种权衡有时会带来意想不到的问题。经典例子:问 LLM“strawberry”里有几个字母 R。以往 LLM 经常答错。这并不是模型计数能力差,而是模型并非直接操作字母,只操作那些恰好拼出人类会按字母拆分的单词的词元 ID。
词元化将文本转为词元 ID
不同模型家族使用不同的词元化器。GPT 模型使用字节对编码(BPE)变体。LLaMA 风格模型常用 SentencePiece。选择何种方案会影响计算量(词元越少,工作越少)以及多语言覆盖等问题,但基本形式相同:输入文本,输出整数。
现在提示已转化为整数序列,下一步就是赋予这些整数含义。
---
## 嵌入(Embeddings)
像`1024`这样的词元 ID 只是一个行索引,本身没有任何意义。赋予其含义的是一个巨大的表格,称为嵌入矩阵(Embedding Matrix)。
每个模型都有一个嵌入矩阵。词汇表中的每个条目占据一行,每行都是一个长数字向量。每行的长度称为模型的隐藏层大小。许多 7B 参数级别的模型中,每个词元对应 4096 个数字。更大的模型通常使用更宽的向量。
> **小解释:向量** 向量就是一列数字。在 Transformer 中,每个词元被转换为向量,以便模型进行数学运算。
当词元化器将整数交给模型时,模型查找该行,并使用该向量代替。这个向量就是该词元的嵌入(Embedding)。它是模型对该词元“含义”的表示,在训练过程中学习得到。
> **小解释:嵌入矩阵** 嵌入矩阵是一个查找表。输入词元 ID,输出学习到的向量。
这些嵌入的有趣之处在于,语义相似的词元最终会得到相似的向量。“king”的向量在空间上靠近“queen”,“Paris”的向量靠近“France”。这些都不是硬编码的,而是在大量文本训练中自然涌现的,模型学习到这些位置关系,是因为这有助于它更好地预测文本。
还可以对嵌入进行算术运算,有时确实有效。著名的例子是`king − man + woman ≈ queen`。嵌入空间的几何结构承载着真实的语义结构,尽管并未有人明确要求模型这样构建。
嵌入空间类比图,展示语义关系
需要明确的是:在这一阶段,每个词元都被替换为其嵌入,但嵌入本身并不说明该词元在序列中的位置。“dog”这个向量,无论“dog”是提示中的第一个词还是第五个词,都是一样的。这就是问题所在。
而这正是位置编码要填补的空白。
---
## 位置编码(Positional Encoding)
普通的自注意力机制(Self-Attention)没有内置的词序表示。如果没有位置信号,它无法直接知道“dog”是在“bites”之前还是之后。
词序改变含义。因此模型需要另一个组件,一种将每个词元的位置信息注入数学运算的方法。
> **小解释:位置编码** 位置编码是模型获取顺序信息的方式。它告诉模型每个词元在序列中的位置。
原始的 Transformer 论文(Vaswani 等人,2017年)通过为每个位置赋予其独特的数值模式,并在任何其他处理之前将其直接加到每个词元的嵌入上。位置 1 有一种模式,位置 5 有不同的模式,位置 100 又有另一种模式。这些模式来自不同频率的正弦和余弦波。这样,位置 1 的“dog”的嵌入就与位置 5 的“dog”的嵌入不同,只是因为加上的位置模式不同。
这种方法有效,正弦编码(Sinusoidal Encoding)被选中的部分原因在于它可以泛化到训练时未见过的更长序列长度。但随着模型规模扩大,加法位置方案仍然存在两个重要问题。
首先,嵌入必须在同一组数字中同时携带含义和位置信息。可承载的信息量是有限的。
其次,特别是学习得到的绝对位置嵌入(Learned Absolute Position Embedding)无法干净地泛化。如果在长度不超过 2048 个词元的提示上训练,模型在训练期间从未见过位置 5000,该位置的嵌入也无法以相同方式学习。
现代模型大多采用不同的方案,称为旋转位置编码(Rotary Position Embeddings,RoPE),由 Su 等人于 2021 年提出,现在广泛应用于 LLaMA、Mistral、Gemma、Qwen 及其他大多数开源权重模型家族。其直觉是:RoPE 并非将位置信息加到每个词元的向量上,而是根据词元的位置旋转 Query 和 Key 向量。位置 1 的词元获得一个小角度旋转,位置 100 的词元获得一个更大的旋转。稍后在注意力计算中比较两个词元时,它们 Query 和 Key 旋转角度的差值编码了它们之间的距离。
> **小解释:RoPE** RoPE 代表旋转位置嵌入。它不添加位置向量,而是旋转 Query 和 Key 向量,使相对距离在注意力计算中显现出来。
旋转位置嵌入按位置旋转向量
实际优势十分明显。RoPE 自然地编码了相对位置(更贴近注意力机制的实际需求)。它能更好地泛化到更长的上下文,并且不引入新的模型参数。
即使有了良好的位置编码,现代 LLM 仍存在一个已记录在案的问题,即“迷失在中间”(Lost in the Middle,Liu 等人,2023年)。模型更可靠地利用长提示的开头和结尾信息,而非中间部分。这就是为什么像“把重要上下文放在前面”或“在结尾重复关键信息”这样的提示工程技巧确实有效。模型并未平等地利用提示的每一部分。
词元的含义和位置都已编码,下一个问题是词元之间如何交换信息?
---
## 注意力(Attention)
这就是赋予该架构名称的机制——注意力。
在每个 Transformer 层中,注意力机制只做一件事:让每个词元查看它允许看到的其他词元,并决定哪些词元对下一步的输出重要。
它通过让每个词元同时扮演三个角色来实现这一点。每个词元被转换为三个新的向量,称为 Query(查询)、Key(键)和 Value(值),即 Q、K、V。
> **小解释:Q、K、V** Query 表示“我在寻找什么”,Key 表示“我能匹配什么”,Value 是在匹配成功时被传递的信息。
- Query 问:“我从其他词元那里寻找什么?”
- Key 说:“这是我向注视我的词元提供的东西。”
- Value 负责:“当匹配发生时,这是被传递的东西。”
同一个词元同时扮演所有三个角色。Q、K、V 的变换是通过学习得到的矩阵,因此模型在训练过程中会弄清楚每个词元应该寻找什么以及应该提供什么。
匹配通过相似度分数(Similarity Score)实现。每个词元的 Query 与其允许看到的每个词元的 Key 进行缩放点积(Scaled Dot Product)比较。直观地说,这衡量了两个向量的对齐程度。缩放操作确保 softmax 之前的数值保持稳定。
> **小解释:点积** 点积是一种简单衡量两个向量对齐程度的方法。对齐程度越高,匹配越强。
然后,匹配分数通过 softmax 函数转化为权重。Softmax 将任意一组数字转化为类似概率的分布,总和为 1。匹配分数越高的词元获得越高的权重,然后这些权重用于对 Value 向量进行加权平均。
> **小解释:softmax** Softmax 将原始分数转化为总和为 1 的权重。分数越大,权重越大;分数越小,权重越小。
举个例子。考虑句子“The cat that I saw yesterday was sleeping.”当模型处理“was”时,需要弄清楚发出“sleeping”动作的主体。“was”的 Query 向量与其允许看到的词元的 Key 向量进行比较。与“cat”的点积很高,因为模型已经学会像“was”这样的动词需要一个主语,而像“cat”这样的主语产生的 Key 向量与之对齐良好。与“yesterday”的点积很低。Softmax 将这些分数转化为权重,“cat”获得高权重,“yesterday”获得低权重。然后模型对相应的 Value 向量进行加权求和,因此“cat”的 Value 主导了结果。“was”的新表示主要由“cat”的 Value 塑造。这就是相隔几个位置的词元如何成为指代对象。
在 GPT 风格的语言模型中有一个特定约束,即它们从左到右生成文本。位置 5 的词元只允许关注位置 1 到 5。它不能关注位置 6、7、8 的词元,因为这些词元尚未生成。这称为因果掩码(Causal Masking)。实现很简单:未来词元获得极低的匹配分数,以至于在 softmax 之后权重实际上为零。
> **小解释:因果掩码** 因果掩码隐藏了未来词元。它防止仅解码器语言模型在预测下一个词元时向前看。
注意力热力图,显示因果掩码及对“cat”的高关注
可解释性研究中最有趣的发现之一是关于称为“归纳头”(Induction Heads)的专门注意力头,由 Anthropic 于 2022 年发现。这些头学会识别提示中“A B ... A”形式的模式,并预测 B 将出现。当模型第二次看到“A”时,归纳头会回顾之前“A”出现的位置,查看其后面是什么,并复制过来。归纳头是上下文学习(In-Context Learning)背后最清晰的已知机制之一,即 LLM 从你的提示中捕捉模式并延续下去的能力。
> **小解释:归纳头** 归纳头是一种关注提示中重复模式并帮助延续该模式的注意力头。
注意力有一个巨大的成本。在全注意力机制中,每个词元与其允许看到的所有词元进行比较,因此提示长度加倍,计算量大约增加四倍。这就是长提示运行昂贵的原因,也是近年来大量研究致力于提升注意力效率(FlashAttention、稀疏注意力、线性注意力)的原因。
但一个注意力头只给模型提供了看待这些关系的一种学习到的视角。
---
## 多头注意力(Multi-head Attention)
单次注意力传递只给模型提供了一种决定哪些词元对哪些其他词元重要的方式。这远远不够。语言中存在多种关系同时发生。主谓一致。代词及其所指的名字。句子之间的长距离指代。词序与局部短语。
多头注意力通过并行运行多次注意力来解决这个问题,每次并行传递在其自己的子空间中操作。每次并行传递称为一个头。
> **小解释:注意力头** 一个注意力头是一次独立的注意力传递,拥有自己学习到的投影。
这里有一个经常被描述错误的点,包括在许多教程中。每个头并非获得原始词元向量的一个固定切片。每个头拥有自己学习到的投影矩阵,将完整的词元向量映射到其自己的更小的 Q、K、V 向量。因此,如果模型每个词元有 4096 个数字,并有 32 个头,每个头通常在 128 维空间中操作,但这 128 个数字是对完整 4096 维的学
习投影,而不是固定切片。同一个词元的不同“视角”,而不是不同的分块。
每个头独立运行其注意力传递。然后所有头的输出被拼接起来,并通过一个最终的线性层混合回一个完整的向量。模型也学习这个最终的混合过程。
多头注意力结合专门的注意力头
有趣之处在于,不同的头往往最终部分专门化。模型从未被告知每个头应该做什么。专门化是在训练过程中自然涌现的。研究人员发现了追踪语法(将动词与其宾语、冠词与其名词联系起来)的头、找出哪个代词指代哪个名字的头、追踪位置模式的头、归纳头,等等。一个 Transformer 层可能有 32 个头。一个现代前沿模型有数十层。因此,一个典型的 LLM 总共有数千个注意力头,每个头都贡献其学习到的视角。
存在一个实际成本问题,推动了近期的架构变化。每个头需要
相似文章
大型语言模型是如何工作的(26分钟阅读)
详细讲解基于Transformer的大型语言模型的工作原理,涵盖分词、嵌入、注意力机制和下一个词元预测,无需复杂数学。
@Potatoloogs: LLM 内部究竟怎么运作:从 token 到 next-token,九个核心机制完整梳理 a)Tokenization:模型读的不是文字,是整数 · 文本先被切成 subword 片段,再映射成整数 ID;现代 LLM 词表通常有数万到数…
本文从 tokenization 到 next-token 预测,系统梳理了现代 LLM 内部的九个核心机制,包括 tokenization、embedding、位置编码、注意力、多头注意力、前馈网络等,并比较了不同模型的架构差异。
@CamilleRoux: 对LLMs内部工作原理的精彩解释:tokens、embeddings、positional encoding、attention、feed-forward…
这条推文分享了一篇关于LLMs内部工作原理的详尽解释,涵盖了tokens、embeddings、positional encoding、attention和feed-forward网络,来源于0xkato的一篇博文。
@techNmak: 这是学习LLM工作原理的最佳方式。交互式3D,逐步讲解。涵盖:→ 嵌入 → 层归一化 → 自注意力…
一个交互式3D逐步指南,通过可视化方式学习LLM工作原理,涵盖嵌入、自注意力、softmax等关键Transformer概念。推荐使用视觉化方法,而非阅读论文。
LLMs 101:实用指南(2026年版)
一份关于LLMs的全面实用指南,涵盖推理机制、令牌、Transformer、KV缓存、本地部署硬件和量化,截至2026年5月。