从 Token 到蒸馏:一步步理解大模型如何工作

本文面向刚开始了解大模型的读者,以本机运行的 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 → 追加到上下文

蒸馏阶段:
大模型给出参考 → 小模型模仿 → 调整小模型参数

量化阶段:
参数数量不变 → 降低存储精度 → 模型文件变小

最后只需要记住四句话:

  1. 词表决定模型能够选择哪些 Token。
  2. 参数决定在当前上下文中应该选择哪个 Token。
  3. 训练修改参数,调用模型只使用参数。
  4. 蒸馏训练小模型,量化压缩参数的存储精度。
相关推荐
小磊哥er3 小时前
深入解构Claude Code - 第 12 篇 · 整体串起来
javascript·ai编程
小磊哥er3 小时前
深入解构Claude Code - 第 11 篇 · 工程上的讲究
javascript·ai编程
Mintimate5 小时前
Codex 多账号切换不再折腾:OAuth 配对与 Auth 迁移实践
agent·ai编程
AIGC大时代6 小时前
知网 AIGC 检测在罚什么:均匀句长、低指代、零口癖,并不等于「用过 ChatGPT」
人工智能·chatgpt·nlp·aigc·论文·知网·学术规范
promiseThen8 小时前
我用 7 条铁律管住 Cursor:让 AI 写代码不再「自由发挥」
前端·ai编程
可以想象8 小时前
Agent 层比模型层更重要?从本周 AI 两件大事说起
aigc·ai编程
ClouGence8 小时前
AI 定时任务火了?写日报、看新闻、做计划、盯价格,它都能自动跑
chatgpt·aigc·claude
Dawson Zhu8 小时前
从虚拟内存到 Agent 记忆:把大模型的“脑补“变成“查表“
人工智能·语言模型·架构·aigc·agi
ServBay8 小时前
Claude Fable 5.1正式上线:Claude 最强,还降价?
aigc·ai编程·claude