第 0 章 项目导览与学习路线 在动任何代码之前,先建立全局心智模型。本章回答三个问题:这是什么?为什么学它?怎么学? 0.1 知识蒸馏解决什么问题 大模型(LLM)能力强大,但代价昂贵:参数动辄数十亿至上千亿,推理时占用大量显存与算力,难以部署到手机、边缘设备等资源受限的环境。 知识蒸馏(Knowledge Distillation) 正是为这个问题而生。它的核心思想可以用一句话概括: 让一个「小而快」的学生模型,去模仿一个「大而强」的教师模型的输出行为,从而在参数量大幅缩减的同时,尽可能保住教师的能力。 用一个生活化的比喻:教师是经验丰富的老教授,学生是年轻助教。学生不必从零摸索(只啃课本/硬标签),而是通过观察老教授如何判断问题、如何给出选项的概率(软标签),更快地积累「直觉」。
在动任何代码之前,先建立全局心智模型。本章回答三个问题:这是什么?为什么学它?怎么学?
大模型(LLM)能力强大,但代价昂贵:参数动辄数十亿至上千亿,推理时占用大量显存与算力,难以部署到手机、边缘设备等资源受限的环境。
知识蒸馏(Knowledge Distillation) 正是为这个问题而生。它的核心思想可以用一句话概括:
让一个「小而快」的学生模型,去模仿一个「大而强」的教师模型的输出行为,从而在参数量大幅缩减的同时,尽可能保住教师的能力。
用一个生活化的比喻:教师是经验丰富的老教授,学生是年轻助教。学生不必从零摸索(只啃课本/硬标签),而是通过观察老教授如何判断问题、如何给出选项的概率(软标签),更快地积累「直觉」。
本教程实现的,正是把一个标准预训练 GPT2(教师)的能力,蒸馏到一个只有其约 1/12 参数量的迷你 GPT2(学生)中。
| 类别 | 选型 | 为什么选它 |
|---|---|---|
| 深度学习框架 | PyTorch ≥ 2.0 | 工业标准,动态图调试友好 |
| 模型实现 | HuggingFace transformers 的 GPT2LMHeadModel |
工业级稳定、规模可配、生态完善 |
| 分词器 | tiktoken(p50k_base) |
OpenAI 出品,Rust 实现,性能强 |
| 数据集 | tiny_shakespeare(Karpathy 经典) | 体量小(约 1MB),单机几分钟可训完 |
| 优化器 | AdamW + 自定义余弦退火 | GPT-2/3 标准配方 |
| 蒸馏方法 | 经典 Logits 蒸馏(Hinton 2015) | 原理清晰、效果稳定、最适合入门 |
理解一个项目,最重要的是抓住「数据流」。本项目的数据流如下:
几个关键点要记住:
requires_grad=False),只在前向时提供「软标签」,不参与梯度更新。读完这套教程并跑通代码,你将掌握:
| 能力 | 对应章节 |
|---|---|
| 理解知识蒸馏的数学原理(温度、KL、暗知识) | 第 1 章 |
| 搭建可复现的蒸馏实验环境 | 第 2 章 |
用 dataclass 管理蒸馏/训练全超参 |
第 3 章 |
| 构造带索引的自回归样本,支持教师缓存 | 第 4 章 |
| 区分并构建「预训练教师」与「从零学生」 | 第 5 章 |
| 手写蒸馏损失:KL + CE + shift 对齐 | 第 6 章 |
| 写一个带损失分解日志的训练循环 | 第 7 章 |
| 用困惑度、Top-1、分布 KL 评估蒸馏质量 | 第 8 章 |
| 实现带温度/top-k 的自回归推理 | 第 9 章 |
| 掌握教师缓存、调参等进阶技巧 | 第 10 章 |
本项目按职责拆分为若干逻辑模块,每个模块负责流水线中的一个环节:
| 逻辑模块 | 职责 | 对应章节 |
|---|---|---|
| 核心配置模块 | 用数据类统管模型/蒸馏/训练三类超参 | 第 3 章 |
| 数据处理模块 | 下载文本、分词编码、切窗、构造样本 | 第 4 章 |
| 模型构建模块 | 加载预训练教师、从零初始化学生 | 第 5 章 |
| 蒸馏损失模块 | 计算软硬标签组合损失 | 第 6 章 |
| 训练主程序 | 整合所有模块,跑训练循环 | 第 7 章 |
| 评估对比模块 | 衡量学生与教师的性能差距 | 第 8 章 |
| 推理生成模块 | 用学生模型做文本生成 | 第 9 章 |
各模块的依赖关系是单向的:数据 → 模型 → 损失 → 训练 → 评估/推理。建议按这个顺序阅读。
根据你的背景,可以选择不同路线:
按章节顺序 00 → 01 → 02 → ... → 10 逐章精读,每章跑通代码再进入下一章。预计耗时 1-2 周。
直接跳到第 1 章(原理)和第 6 章(损失函数),这是本项目的灵魂;再按需查阅第 7、8、10 章。
读第 2 章(环境准备),按命令跑通训练;遇到问题再回查对应章节或附录 C。
为保持入门友好,本项目做了一些简化,同时也为进阶留了接口:
阅读本教程需要以下前置知识:
tensor、autograd、Module、DataLoader。代码示例中的注释默认为中文,与项目源码风格保持一致。
下一站:在《第 1 章 知识蒸馏原理详解》中,我们将深入 Hinton 的奠基论文,彻底搞懂温度软化、暗知识、KL 散度这些核心概念背后的数学。