大语言模型到底怎么工作?从输入到输出拆给你看

分词、嵌入、RoPE、QKV注意力、前馈网络、残差流、预测循环——九大环节拆解 LLM 内部机制,看懂模型论文

大语言模型到底怎么工作?从输入到输出拆给你看 封面图

结论先行:大语言模型不是什么魔法,就是一个个工程部件堆叠起来的——每个部件解决一个具体问题,每个部件都经历了几代迭代。你输入一句话,模型走完分词 → 嵌入 → 位置编码 → 注意力 → 前馈网络 → 残差流与归一化 → 下一词预测循环,一次吐一个 token。理解了这条链路,再看任何模型论文,你都能大致知道它改的是哪个部件、在解决什么问题。

一、分词:文本进来,整数出去

你在对话框敲下"今天天气怎么样",模型看到的不是这七个汉字,而是一串整数。把文字转成整数序列的步骤叫分词(Tokenization)——通过分词器把字符串映射到词表条目,现代大模型词表通常有几万到几十万个条目。

为什么不用整词词表?词表会大到失控,而且遇到新词完全没法处理。反过来用单字符?词表小了,但模型要从零学拼写,效率极低。于是取中间值:子词分词——常见片段成为单个 token,罕见词由更小片段拼出。比如 tokenization 可能被切成 token 和 ization 两半。

这个设计取舍会暴露在奇怪的地方:问模型 strawberry 有几个字母 R,早期模型经常答错。这不是模型不会数数,而是它根本不在字母层面操作——它看到的是 token ID,几个子词单元,不是一个个独立字母。GPT 系列用 BPE 变体,LLaMA 系列常用 SentencePiece;同样一句话 token 越少,计算越少。

二、嵌入:给整数赋予意义

token ID 本质只是行号。赋予它意义的是嵌入矩阵:词表每个条目对应一行长长的数字向量(隐藏维度,70B 级模型通常是 4096)。分词器把整数交给模型后,模型查出对应行向量,之后所有计算都用向量,不再用整数。

嵌入有个神奇性质:语义相近的 token 在空间里也相近——国王靠近女王,巴黎靠近法国,完全是在训练中自发涌现的。最著名的例子:king − man + woman ≈ queen,嵌入空间的几何结构确实承载着真实语义。

但嵌入有个关键缺口:它完全不知道 token 在序列里的位置。狗在位置 1 和位置 5 的嵌入一模一样——可"狗咬人"和"人咬狗"意思天差地别。这个缺口需要位置编码来补。

三、位置编码:从正弦波到 RoPE

2017 年原始 Transformer 论文(Attention Is All You Need)的方案:给每个位置分配一套独有数字模式,直接加到嵌入上。位置 1 一种模式,位置 100 另一种,来自不同频率的正弦余弦波。

模型变大后这方案暴露两个问题:嵌入向量要同时承载语义和位置信息,容量有限;学习式绝对位置嵌入泛化不行——训练最长见过 2048 token,位置 5000 的嵌入从没被正经学过。

现代模型改用旋转位置编码(RoPE)——苏剑林等人 2021 年提出,现在 LLaMA、Mistral、Gemma、Qwen 全都在用。核心直觉:不再往向量里加位置,而是根据位置把 Query 和 Key 向量旋转一个角度——位置 1 转一小下,位置 100 转一大圈。注意力比较时真正起作用的是两个 token 旋转角度的差值,恰好编码了相隔多远。优势:天然编码相对位置、长上下文泛化更好、不增加任何新参数。

顺带一个对写提示词有用的观察:即便有好的位置编码,模型仍有被文献记录的现象——中间迷失(lost in the middle):长提示词开头和结尾的信息被利用的可靠程度远高于中间。所以"重要信息放前面、关键内容放结尾、重复一遍"这些技巧真的有用。

四、注意力:让 token 互相交谈

这是整个架构的核心,也是 Transformer 命名的来源。注意力只做一件事:让每个 token 查看它被允许看到的其他 token,决定哪些对预测接下来内容重要。

实现方式是每个 token 扮演三个角色,被变换成三个向量:Q(Query)——我在找什么;K(Key)——我能提供什么;V(Value)——匹配成功时真正传递的信息。Q、K、V 变换矩阵都是训练学出来的。

用例句"The cat that I saw yesterday was sleeping":模型处理到 was 时,需要搞清什么在睡觉。was 的 Query 和 cat 的 Key 点积很高(模型学到动词需要主语),和 yesterday 的点积很低。softmax 之后 cat 拿到高权重,加权求和时 cat 的 Value 主导结果——隔着好几个位置的 token 就这样成了指代对象。

GPT 这类自回归模型有个约束:位置 5 只能注意位置 1-5,绝不能看 6、7、8(还没生成出来)——这就是因果掩码,实现就是未来 token 的分数压到极低。

Anthropic 2022 年还发现一类特化注意力头叫归纳头:学会识别"A……B……A"模式,第二次看到 A 时回看上次后面跟了什么然后照抄——这是目前已知上下文学习(从提示词现学模式)最清晰的机制之一。

注意力的代价:每个 token 要和所有可见 token 比较,提示词长度翻倍计算量约翻 4 倍——这就是长提示词贵的原因,也是 FlashAttention、稀疏注意力、线性注意力研究的动机。

五、多头注意力:纠正一个连教程都讲错的细节

单次注意力只能给模型一种"哪些 token 对哪些重要"的判断,但语言里主谓一致、代词指代、长程引用、局部短语结构同时在发生。解决办法是并行跑很多次注意力,每个通道叫一个头。

这里要专门纠正一个很多教程都讲错的点:每个头拿到的不是原始向量的字面切片——不是 4096 维切成 32 块每头 128 维。每个头有自己的投影矩阵,把完整 token 向量映射到属于自己的更小的 Q、K、V 空间。那 128 个数字是对完整 4096 维的学习式投影,不是固定切块——是同一 token 的不同视角,不是不同碎块。

不同头会自然发展出特化:有的追踪语法关系,有的分辨代词指代,有的追踪位置模式,有的就是归纳头。一层几十个头,前沿模型几十层,总共几千个注意力头各自贡献一种视角。

多头还催生了重要的效率创新——GQA(分组查询注意力):不是每个查询头都有独立 K/V,而是多组查询头共享同一套键值头。LLaMA-2 70B 有 64 个查询头但只有 8 个 KV 头,Mistral 7B 是 32 比 8——精度几乎不损失,内存压力和推理成本大幅下降。这背后是 KV 缓存(为已生成 token 保留 K/V 向量)——长上下文推理最大的内存开销来源。

六、前馈网络:模型大部分事实存在这里

注意力是 token 之间交谈,前馈网络(FFN)是每个 token 关起门来独自深加工——不做任何跨 token 混合。按顺序做三件事:把向量扩张到更大尺寸(原始 4 倍,SwiGLU 各有不同)→ 施加非线性函数 → 压缩回原尺寸。

为什么要非线性?没有它,两个线性层叠加数学上等价于一个线性层,一百个叠上去也还是等价于一个——纯线性堆叠会坍缩。非线性(ReLU→GELU→SwiGLU 几代演进)阻止了坍缩,这是 FFN 能做丰富计算的根本原因。

很多人不知道的事实:稠密 Transformer 的大部分参数住在前馈网络里,不在注意力里。模型存储的事实和语义结构有相当一部分就在这里——有的神经元对埃菲尔铁塔相关文本强烈激活,有的对编程语言,有的对过去式动词。"巴黎是法国首都"就表示在特定层 FFN 的权重和激活模式里。

这带来一个有趣的推论:可以不用重新训练,直接编辑事实。有一种叫 ROME(秩一模型编辑)的方法,对特定 FFN 权重矩阵做一次低秩修改,把"埃菲尔铁塔在巴黎"改成"在罗马",改完模型生成的文本就真的倾向于保持一致——我们对模型内部知识存储的理解已经到了可以动手编辑的程度。

七、MoE:让参数规模变大而不让成本同比例膨胀

混合专家(MoE)把稠密 FFN 换成多个并行 FFN(每个叫一个专家),由一个小路由网络决定每个 token 交给哪几个专家。Mixtral 8x7B 每层 8 个专家、每个 token 只激活 2 个:总参数量 467 亿,但每个 token 实际只用到约 129 亿参数。代价是新的工程挑战(专家路由、训练稳定性),但它确实改变了前沿模型的设计思路。

八、残差流与归一化:没它们,深层模型训不动

这两个部件最不酷炫,但没有它们就没有今天几十上百层深的大模型。

残差连接:让模型做加法而不是替换——子块的输出加到原向量上,每层贡献累加而非覆盖。这个贯穿全程的累加和叫残差流,最初输入始终有一条直达深层的加法通路。它来自 2015 年何恺明等人的 ResNet(图像识别),动机就是深层网络训不动——加一条捷径让信号从输出层直接流回输入层,几百层突然就能训了。

层归一化:没有它残差流会不稳定——数字流过几十次加法后要么爆炸要么塌缩到零。它在子块之间把向量拉回受控范围。两个演进:位置从 post-norm(子块后)改成 pre-norm(子块前,GPT-2 起,LLaMA/Mistral 都在用);函数从 LayerNorm 简化为 RMSNorm(砍掉移零只留缩放,经验上缩放承担大部分收益还更便宜)。

九、下一词预测循环:整个回答就是这么吐出来的

所有层处理完,预测下一个词只取最后一个 token 的最终向量,转换成词表每个候选 token 一个分数(logits),再用 softmax 变成概率分布。模型通常不每次都选概率最高的——解码参数控制确定性:temperature 调分布尖锐程度(越高越有创造性),top-k/top-p 限制候选范围。

选出一个 token 后追加到输入末尾,在更长序列上跑下一步(复用 KV 缓存,不必重算前缀),循环直到吐出终止符或撞到上下文上限。你看到的一整段回答,就是一次一个 token 跑出来的。

这里有个很多人忽略的事实:预测下一个 token 这个单一目标,就是基础大模型(base LLM)的全部训练信号。它没有被直接针对事实准确性、对话能力、逻辑推理训练;你感受到的对话能力、指令遵循、偏好对齐、安全行为,全是后训练阶段在基础模型之上微调出来的。

效率创新值得一提:投机解码——用一个小而快的草稿模型先猜若干 token,大模型并行验证,猜中的直接采纳,猜错回退重算。最终概率分布和单独跑大模型完全一致,但生成速度快很多——很多推理服务背后用的就是它。

十、GPT、Claude、Gemini 到底差在哪?

层级差异来源说明
骨架共通分词、嵌入、Transformer 层、残差流、归一化、下一词预测——大框架都一样
权重最核心不同数据、不同规模配置下学出来的具体数字
配置工程选择层数、词表大小、注意力头数、总参数、稠密还是 MoE
后训练体验影响极大指令微调、人类反馈对齐、安全控制程度

值得注意的是:2023-2025 年现代 Transformer 技术栈在众多模型间收敛到了一组共同选择——pre-norm、RMSNorm、RoPE、SwiGLU、GQA,最大的模型再加 MoE。这些不是某家公司一次性发明的,而是不同团队各自独立走到了几乎相同的方案,在 2017 年原始设计之上打磨了约五年。

总结:大语言模型不是魔法,就是工程部件的堆叠——分词解决"文本怎么进来",嵌入解决"数字什么意思",位置编码解决"顺序怎么办",注意力解决"token 怎么交流",前馈网络解决"信息怎么深加工",残差和归一化解决"深模型怎么训",预测循环解决"答案怎么生成"。这种技术收敛在机器学习史上很反常——过去图像、语言、音频各有专门结构,现在 Transformer 横跨一切,Mamba 这类状态空间模型虽有超长序列优势,但这些核心机制——信息交换、深度处理、残差与归一化、逐步预测——是任何序列模型都必须以某种形式解决的问题。对技术保持祛魅的态度很重要:它厉害是真厉害,但不是不可理解的黑箱。理解它怎么工作,才能更好地用它,也才能更清醒地判断它的边界在哪。

← 返回文章列表