说实话,这个问题我反复问了自己好几遍。
2024 年打开任何一个技术公众号,满屏都是"XX 模型刷新 XX 基准""XX Agent 已能自主完成 XX 任务""XX 框架 5 分钟部署多智能体协作"。Agent 已经成了新的"大词",就像 2017 年的"Transformer"、2023 年的"多模态"一样,每隔几个月就有一个新的名词把上一轮的热度盖过去。你还没来得及弄明白 GQA 和 MHA 到底差在哪,MLA 就来了;还没来得及搞懂 RLHF,DPO 又上来了;等 DPO 的论文读完了,在线 RL 又出来了。模型一周发三个,框架一周一版,评测榜单每三天刷一次新纪录。
信息不是不够,信息是太多了。多到一种奇怪的效果:你知道很多名字,但说不清任何一个东西"为什么存在"。你知道 MoE 比 Dense 省算力,但说不清它到底在"省什么"。你知道 Flash Attention 快 7 倍,但说不清那 7 倍到底是从哪里"省"出来的。你知道 RLHF 是对齐,但说不清它和 SFT 在数学上到底差在哪一步。
这些"说不清",不是因为哪个概念有多难。是因为它们被淹没了。被发布会的 PPT 淹没了,被基准测试的分数淹没了,被"颠覆性""范式转移""AGI 前夜"这些词淹没了。你每天接收的是结论,是"它比上一代快 30%",是"参数 671B,激活 37B",是"在 XX 榜单上 SOTA"。但很少有人停下来问一句:在所有的"比上一代快 30%"底下,那个"它"到底是什么?
我想写这篇文章,就是为了回到那个"它"。
不是为了教你怎么调参,不是为了帮你对比 Mixtral 和 DeepSeek-V3 该选哪个,不是为了给你一份 MoE 路由机制的速查手册。那些东西,每家公司的技术报告里写得比我详细,而且半年就过时了。我想讲的是那些不过时的东西。是"注意力层到底在做什么"这种问题。是"训练到底是在压缩还是在记忆"这种问题。是"从用户输入一句话到模型吐出第一个 token,中间到底经历了什么"这种问题。
这些东西,从 2017 年那篇《Attention Is All You Need》到今天,没有变过。MoE 没有改变它。MLA 没有改变它。RLHF 没有改变它。Agent 也没有改变它。它们都是在同一个骨架上长的肉。你理解了骨架,所有的肉你都能自己长出来。你只记住了肉,那肉一换你就得重新学一遍。
所以这篇文章不赶热点。它不讨论任何一家具体的公司,不列任何一张 benchmark 表格,不给你任何"你应该用 XX 框架"的建议。它只做一件事:把大模型从数据到产品这条链上的每一个环节,用尽可能少的词、尽可能直白的话,讲到一个"你合上文章能自己复述给别人听"的程度。
如果你已经在这个行业里了,这篇文章可能会让你觉得"这些我都知道"。但"知道"和"能讲清楚"是两件事。你试着用三句话跟一个非技术的朋友解释"注意力机制到底在干什么",如果你卡住了,那这篇文章就是为你写的。
如果你不在这个行业里,你大概已经看了很多关于 AI 的文章,觉得"大概懂了"但又说不清哪里没懂。这篇文章也是为你写的。
好,我们开始。
要理解大模型,最关键的一步是想清楚两件事:模型里的参数是什么,以及模型每一层在做什么。
先说参数。一个几百亿参数的大模型,本质上就是几百亿个实数,排列在一组矩阵里。这些矩阵不是人为填写的,而是训练过程中从海量文本中"长"出来的。你可以把它们理解为一本极其庞大的字典——只不过这本字典不是"词→释义",而是"某种上下文模式→某种变换规则"。模型从没见过"春天"这个概念,它只见过某个数字 ID 经常和另外几个数字 ID 一起出现。语义不是谁告诉它的,是从统计规律中自己涌现出来的。
再说每一层在做什么。现代大模型的每一层都由两个核心模块组成:注意力层和 FFN(前馈神经网络)。它们分工非常明确。
注意力层做的是"动态寻址"。当处理一个词的时候,它会去"看"序列中所有其他词,并根据内容判断:谁和我关系大?帮多少?然后按这个权重把所有信息融合起来。打个比方,你在图书馆里找资料,注意力层就是那个"根据你当前的问题,判断该翻哪几本书、每本翻多少页"的过程。它是动态的——同一个词在不同的上下文里,会被赋予完全不同的注意力权重。"苹果"在"我吃了个苹果"和"我买了台苹果电脑"里,激活的是完全不同的参数通路。
FFN 做的是"静态变换"。它接收注意力层送来的、已经"整理好"的上下文表示,然后在自己那套固定的参数矩阵里做一次非线性变换。这一步没有"看别处"的动作,纯粹是对当前信息做一次内部加工。类比来说,如果注意力是"翻到相关书页",FFN 就是"把读到的内容消化理解"。它是静态的——同样的输入永远得到同样的输出,不依赖于序列中其他位置。
一层的完整流程就是:先动态地按需提取信息(注意力),再静态地加工这些提取出来的信息(FFN),最后把结果加回到原始输入上(残差连接),传给下一层。这个过程重复三十到八十次,信息就被反复地"提取—加工—融合",最终形成一个足够丰富的表示,能够映射回词表上的概率分布,告诉你"下一个词最可能是哪个"。
这就是全部了。没有魔法,没有"理解",只有矩阵乘法和加法的反复堆叠,以及从几万亿个文本样本中压缩出来的那几百亿个数。
理解了模型"是什么"之后,来看它"怎么来的"以及"怎么用的"。整条链分四段。
第一段是数据。 模型的输入不是文字,是数字。互联网上的文本——网页、书籍、论文、代码——被切分成一个个小单元(称为 token,可以粗略理解为"子词"或"词片"),每个 token 被映射成一个整数 ID。一百万字的网页可能变成两三个万数字的序列。这些数字序列就是模型唯一能"看见"的东西。所谓"预训练",就是让模型在这几万亿个数字序列上反复练习"猜下一个数字"。
第二段是训练,也是整个过程中最核心的一步。 每次训练,模型看到一段文本的前 n 个 token,然后输出一个概率分布,预测第 n+1 个 token 最可能是什么。这个预测和真实值之间有一个误差。误差沿着整个计算图反向传播,变成每一个参数的梯度,然后沿着梯度方向把参数微调一点点。一次调了 10 亿个参数,下一次再调,再下一次再调……重复几万亿次之后,那些最初随机的数字就逐渐变成了有意义的"知识"。
这里有一个很深的直觉值得停下来想一想:输入是 10 的 15 次方个 token,输出是 10 的 11 到 12 次方个参数。这不是"背",是"压缩"。模型不可能记住它看过的所有文本,它记住的是生成这些文本的底层规律——语法结构、世界常识、推理模式、语用习惯。就像你不可能记住字典里每个字的定义,但你学会了"如何读"。训练的本质,就是学会"如何生成符合人类语言和世界规律的文字"。
第三段是从"会说话"到"会做事"。 预训练出来的模型有一个特点:它非常擅长"续写",但不太擅长"对话"。你问它"1+1 等于几",它可能回答"1+1 等于 2。2 是一个自然数……"——它是在续写,不是在回答。要让它变成一个能用的产品,还需要两个步骤:监督微调(SFT),用大量"问题→好回答"的示例教它对话的格式;以及对齐(Alignment),通常通过强化学习(RLHF)让模型学会人类的偏好——哪些回答是有帮助的、哪些是不恰当的。这两个步骤不改变模型的结构,只是在同一个模型上换一个"评分标准"再做一轮微调。参数在变,骨架没变。
第四段是部署和推理。 用户输入一句话,模型不是一次性输出整个回答的。它是一个 token 一个 token 地"吐"出来的:根据 prompt 生成第一个 token,把第一个 token 拼到 prompt 后面再生成第二个,依此类推,直到生成句号或达到长度上限。每一步都要完整地跑一遍注意力层和 FFN 层(三十到八十层全部跑完),这就是为什么大模型推理慢的根本原因。所有推理加速手段——KV Cache、量化、投机解码——都是在加速这个逐 token 的循环,但核心计算没有变,还是那套注意力加 FFN。
到了这里,你可以回头看那些让行业吵了一整年的争论:MoE 到底好不好?GQA 比 MHA 省了多少显存?Flash Attention 为什么快?SwiGLU 为什么比 GELU 好?
答案统一而朴素:
MoE 做的事情,是把 FFN 从一个变成"选 K 个"。每个专家仍然是 FFN,仍然是"静态变换"。只是从"每次用同一套参数变换"变成了"根据内容选不同的参数子集来变换"。本质没变,还是 FFN。
GQA 做的事情,是注意力计算中"看"的方式变省了。还是注意力,还是"根据内容加权融合",只是共享了一部分查询头来减少计算量。本质没变,还是 Attention。
Flash Attention 做的事情,是把注意力计算中"物化 S×S 矩阵"这一步用分块计算替代了,省了显存、快了速度。算出来的结果和标准注意力一模一样。本质没变,还是那个 softmax(QKᵀ/√d)·V。
换激活函数、换位置编码、换归一化方式、换优化器——全都是在"怎么算"这个层面做工程优化。"算什么"这件事,从 2017 年那篇《Attention Is All You Need》到今天,没有本质变化。
所以如果你只能记住一句话来理解今天所有的大语言模型,那句话就是:
一堆参数、注意力、前馈网络、预测下一个词、梯度下降。
所有的 MoE、MLA、MTP、RLHF、LoRA,都是这五个词在不同约束条件下的工程变体。理解了这个骨架,再去看任何一家公司的技术报告,你就不会迷失在那些缩写和架构图里了。
| 术语 | 全称 | 含义 |
|---|---|---|
| Attention | Attention(注意力) | 模型中"根据当前内容动态决定从上下文中提取哪些信息"的机制,通过查询(Query)、键(Key)、值(Value)三组向量做加权融合 |
| FFN | Feed-Forward Network(前馈神经网络) | 对每个 token 独立做非线性变换的模块,参数中存储了"知识",不依赖序列中其他位置 |
| Token | — | 文本的最小处理单元,可理解为"子词"或"词片",如 "transformer" 可能被切为 "trans" + "former" 两个 token |
| MoE | Mixture of Experts(混合专家) | 将 FFN 拆分为多个"专家"子网络,每个 token 只路由到其中 K 个,以用较少激活参数获得较大模型容量 |
| MHA | Multi-Head Attention(多头注意力) | 将注意力拆分为多个"头"并行计算后拼接,增强对不同子空间的建模能力 |
| GQA | Grouped-Query Attention(分组查询注意力) | 多个查询头共享同一组键值头,在保持效果的同时大幅减少推理时的键值缓存显存 |
| MLA | Multi-head Latent Attention(多头隐空间注意力) | 将键值压缩到低维隐空间再还原,进一步降低键值缓存开销 |
| MTP | Multi-Token Prediction(多 token 预测) | 在预测下一个 token 之外,额外预测后续若干 token,提高训练效率 |
| RLHF | Reinforcement Learning from Human Feedback(基于人类反馈的强化学习) | 用人类对回答的偏好排序训练一个奖励模型,再用该奖励模型指导策略优化,使模型输出更符合人类期望 |
| SFT | Supervised Fine-Tuning(监督微调) | 用"问题→理想回答"的配对数据对预训练模型做有监督的微调 |
| LoRA | Low-Rank Adaptation(低秩适配) | 不更新全部参数,而是在参数旁挂一组低秩小矩阵做微调,大幅降低适配成本 |
| KV Cache | Key-Value Cache(键值缓存) | 推理时缓存已生成 token 的键和值向量,避免每步重复计算,是推理加速的基础手段 |
| SwiGLU | Swish-Gated Linear Unit | 一种带门控的激活函数,用两个并行投影加逐元素乘法替代传统 GELU/ReLU,在相同参数量下效果更好 |
| RoPE | Rotary Position Embedding(旋转位置编码) | 通过对查询和键向量施加位置相关的旋转变换来编码位置信息,比可学习位置向量泛化性更好 |
| RMSNorm | Root Mean Square Layer Normalization(均方根层归一化) | 简化版层归一化,只除以均方根而不减均值,计算更快且效果不损 |
| 投机解码 | Speculative Decoding | 用一个小模型快速生成若干候选 token,再让大模型并行验证,接受正确的、拒绝错误的,从而在不改变输出分布的前提下加速生成 |
| 量化 | Quantization | 将模型参数从 16 位浮点压缩为 8 位甚至 4 位整数,减少显存占用和带宽需求 |
| Flash Attention | — | 一种注意力计算的内存高效算法,通过分块计算和在线 Softmax 避免物化 S×S 矩阵,将显存从 O(S²) 降到 O(S),速度提升数倍 |
| 涌现 | Emergence | 模型能力随规模增长出现质变的现象,如小模型不具备的推理、翻译能力在达到一定参数量后突然出现 |
京公网安备11010502056287号