本文面向刚开始了解大模型的读者,以本机运行的 Qwen2.5 0.5B 为例,解释 Token、参数、Transformer、训练、蒸馏和量化之间的关系。
先用一句话概括大模型:
大模型使用训练得到的参数,根据已有 Token,反复预测下一个 Token。
1. 一个模型里有什么
模型不只是一个权重文件。完整运行通常需要三部分:
- 结构配置:规定模型有多少层、每层多宽。
- Tokenizer 和词表:负责文字与 Token ID 之间的转换。
- 参数:训练得到的大量数字,包括权重矩阵、偏置和归一化参数。

本机 Ollama 中的 Qwen2.5 0.5B 显示:
| 项目 | 数值 |
|---|---|
| 参数数量 | 494,032,768 |
| Transformer 层数 | 24 |
| 每个 Token 的主向量宽度 | 896 |
| Attention 查询头数 | 14 |
| KV 头数 | 2 |
| FFN 中间宽度 | 4,864 |
| Token 词表大小 | 151,936 |
| 最大上下文长度 | 32,768 Token |
| Ollama 模型文件 | 397 MB,Q4_K_M 量化 |
这些数字描述的是已经下载到本机的具体模型版本,不代表所有大模型都使用相同结构。
2. Token 是什么
模型不能直接处理文字。Tokenizer 会先把文字切成 Token,再将它们转换成整数 ID。
例如在这个 Qwen 的词表中:
text
我喜欢吃
↓
[109366, 99405]
↓
109366 = "我喜欢"
99405 = "吃"
因此,一个 Token 不一定对应一个汉字,也可能是:
- 一个字;
- 一个词;
- 多个字;
- 标点;
- 英文片段;
- 特殊控制标记。
词表只规定 Token ID ↔ 文字片段 的关系。它不是文章数据库,也没有保存所有可能的句子。
3. 一个新 Token 是怎么生成的
输入变成 Token ID 后,模型先查询 Embedding 权重,把每个 ID 转换成一个 896 维向量。向量经过 24 个 Transformer 层后,再由输出层为整个词表打分。

这里的"打分"不是再调用另一个模型,而是当前模型中的一次矩阵计算:
text
最终的896维向量
×
输出权重矩阵
↓
151936个原始分数,也叫Logits
每个 Token 得到一个分数。分数经过转换后成为概率,再根据生成参数选择一个 Token。
text
苹果:45%
辣: 35%
饭: 15%
其他: 5%
如果使用确定性选择,通常取分数最高的 Token;如果使用随机采样,也可能选择概率稍低的 Token。
模型先生成 Token ID,再把 Token 解码成文字显示给用户。新 Token 同时会追加到上下文,参与下一次预测。
4. 24 个 Transformer 层在做什么
模型的层数和宽度由工程师在训练前确定。这个 Qwen 有 24 个结构相同、参数不同的 Transformer 层:
text
Token向量
↓
第0层 → 第1层 → ...... → 第23层
↓
LM Head
每一层主要包含两部分:
- Attention:从上下文中的其他 Token 获取信息。
- FFN:筛选、组合并加工当前 Token 的信息。
4.1 Attention:决定当前要参考谁
整个上下文都可以进入模型,但当前计算不会同等关注所有 Token。Attention 会为历史 Token 临时计算不同的权重。
例如,在处理"苹果"时,某个 Attention 头可能产生:
text
我: 5%
喜欢: 15%
吃: 30%
苹果: 50%
这些 Attention 权重只服务于当前输入、当前层和当前 Attention 头。它们不是训练后固定保存的模型参数。
因此需要区分:
- 模型参数权重:训练得到,推理时通常保持固定。
- Attention 权重:每次运行时根据上下文动态计算。
4.2 FFN:加工当前 Token
这个 Qwen 的 FFN 会把每个 Token 从 896 维临时扩展到 4,864 维,完成筛选和组合后再压回 896 维。

"FFN 宽度 4,864"并不是增加了 Token 数量,而是给每个 Token 提供更大的临时加工空间。
例如有 3 个 Token 时:
text
[3, 896]
↓ FFN扩展
[3, 4864]
↓ FFN压缩
[3, 896]
每经过一层,Token 数量通常不变,变化的是每个 Token 内部的向量。各层关注的模式可能不同,但模型文件不会标记"这一层负责语法"或"那一层负责推理"。这些分工是在训练中自然形成的,而且通常相互重叠。
5. 上下文为什么会越来越大
每生成一个 Token,它都会追加到上下文末尾:
text
[我喜欢] [吃]
↓ 生成
[我喜欢] [吃] [辣]
↓ 继续生成
[我喜欢] [吃] [辣] [的]
因此需要满足:
text
系统提示词 + 历史对话 + 当前输入 + 已生成内容
≤ 模型上下文上限
这个 Qwen 支持的最大上下文是 32,768 Token。达到上限后,应用需要截断旧内容、压缩历史、切分任务、换用更长上下文模型,或者停止生成。
推理时还会使用 KV Cache 保存历史 Token 在 Attention 中的部分计算结果。这样生成新 Token 时不必重新计算全部历史,但上下文越长,KV Cache 通常也越大。
6. 训练和调用模型有什么区别
模型结构由人设计,参数值由训练学习。
训练开始前,权重通常按照初始化规则填入随机数。模型预测下一个 Token 后,训练程序把预测与目标比较,再通过反向传播调整参数。
text
训练数据
↓
模型预测
↓
计算误差
↓
反向传播
↓
修改参数
调用模型,也就是推理时,过程不同:
text
输入Token
↓
使用固定参数计算
↓
生成新Token
推理时发生变化的是:
- 当前上下文;
- 每次计算出的 Attention 权重;
- 中间向量;
- KV Cache;
- 输出 Token 分数。
模型的固定参数不会因为一次聊天自动改变。模型看起来"记住了刚才的要求",通常只是因为相关内容仍在上下文里。
7. 基座模型和蒸馏模型
基座模型先通过大规模预训练获得语言和知识能力。蒸馏通常不会让小模型从随机参数开始,而是让一个已有的小型基座模型继续学习大模型的输出。
蒸馏也是训练,只是多了一个教师模型。


普通训练主要学习真实数据中的目标;蒸馏训练则让学生模仿教师的答案、概率分布或中间特征。
蒸馏过程中:
- 教师模型负责提供参考,权重保持固定。
- 学生模型负责学习,权重持续调整。
- 学生的层数和宽度由工程师提前设计,不是自动从教师模型中缩小出来的。
蒸馏完成后只需运行学生模型,因此部署成本通常更低。但蒸馏过程仍需要运行教师并训练学生,并不是零成本。
8. 量化为什么能缩小模型
参数数量不等于文件大小。文件大小还取决于每个参数使用多少位保存。
text
模型文件大小
≈ 参数数量 × 每个参数的位数 ÷ 8
+ 量化信息、词表和配置
常见表示方式:
| 类型 | 每个参数的典型位数 | 特点 |
|---|---|---|
| FP32 | 32 位 | 精度高,占用大 |
| FP16 | 16 位 | 大约节省一半空间 |
| BF16 | 16 位 | 大模型训练常用 |
| Q8 | 约 8 位 | 推理占用更低 |
| Q4 | 约 4 位 | 更适合个人电脑运行 |
量化会把高精度参数映射为较少的数值等级,并额外保存缩放信息。它不会改变层数和参数数量,但会降低参数的存储精度。
例如,同样是约 4.94 亿参数:
text
FP32:理论约1.98GB
FP16:理论约0.99GB
Q4: 理论主体约247MB
本机 Ollama 下载的 Q4_K_M 文件实际约 397 MB,因为它采用混合精度量化,还需要保存缩放信息、词表和模型元数据。
量化可能让接近的 Token 分数发生轻微变化:
text
量化前:苹果 8.001,香蕉 7.999
量化后:苹果 7.98, 香蕉 8.01
因此,量化通常能换来更低的内存占用和更方便的部署,但过度量化也可能损失回答质量。参数数量、训练数据和训练质量仍然是决定模型能力的主要因素。
9. 把整个过程串起来
text
训练阶段:
语料 → Token → 模型预测 → 计算误差 → 调整参数
推理阶段:
文字 → Token → 24层计算 → LM Head打分 → 新Token → 追加到上下文
蒸馏阶段:
大模型给出参考 → 小模型模仿 → 调整小模型参数
量化阶段:
参数数量不变 → 降低存储精度 → 模型文件变小
最后只需要记住四句话:
- 词表决定模型能够选择哪些 Token。
- 参数决定在当前上下文中应该选择哪个 Token。
- 训练修改参数,调用模型只使用参数。
- 蒸馏训练小模型,量化压缩参数的存储精度。