用途
知识蒸馏技能用于压缩大型语言模型:通过让较小的学生模型学习较大教师模型的输出分布,在保留大部分性能的同时降低部署与推理成本。资料给出的典型用途包括:将模型从 70B 压缩到 7B 并保留 90% 以上性能;把专有模型(如 GPT-4)的能力迁移到开源模型(LLaMA、Mistral);通过部署更小的学生模型降低推理成本;通过蒸馏领域知识创建专用模型;以及利用大教师模型生成的合成数据改进小模型。
主要能力
该技能涵盖以下关键技术:温度缩放(Temperature scaling)、软目标(soft targets)、反向 KLD(MiniLLM)、logit 蒸馏、响应蒸馏。
核心概念包括:
- 温度缩放:通过提高温度软化概率分布,暴露教师模型的不确定性。资料建议蒸馏时使用 T=2-5,2 为常见默认值。
- 损失函数组成:总损失 = alpha × 软损失 + (1 - alpha) × 硬损失。软损失为 KL(student || teacher),硬损失为交叉熵。典型 alpha 取值为 0.5(均衡)、0.7(更强调教师)、0.3(更强调标签)。
- 前向 KLD 与反向 KLD:前向 KL 使学生匹配教师的平均行为,偏向 mode-seeking,适合分类;反向 KL 使学生覆盖教师的全部行为,偏向 mode-covering,适合生成任务(MiniLLM)。
训练策略包括:
- Logit 蒸馏:直接让学生匹配教师的 logits,可用 MSE 或 KLD。
- 两阶段蒸馏:第一阶段从教师蒸馏,第二阶段在任务特定数据上微调,资料称其任务表现优于单阶段。
- 多教师蒸馏:从多个专家教师的 logits 平均值中学习。
使用方式
安装命令(保留原文):
# Standard transformers
pip install transformers datasets accelerate
# For training
pip install torch deepspeed wandb
# Optional: MiniLLM implementation
git clone https://github.com/microsoft/LMOps
cd LMOps/minillm
pip install -e .
基本流程为:加载教师(大)与学生(小)模型,定义蒸馏损失(结合硬损失交叉熵与软损失 KL 散度),在训练循环中教师前向不计算梯度、学生前向计算 logits,再计算组合损失并反向传播。资料提供了完整的 distillation_loss 函数、MiniLLM 的 reverse_kl_loss 函数、响应蒸馏示例(用教师生成合成响应后对学生做标准微调)、以及基于 transformers Trainer 的完整生产训练脚本 train_distilled_model。
适用场景
- 需要将大模型压缩为小模型以降低部署成本。
- 需要把闭源/专有模型能力迁移到开源模型。
- 需要构建领域专用的小模型。
- 需要用大教师模型的合成数据提升小模型表现。
最佳实践与限制
资料给出的最佳实践包括:
- 超参数:温度 T=1.0(尖锐,知识迁移较少)、T=2.0(标准,平衡)、T=5.0(软化,知识迁移更多);alpha=0.5(均衡)、0.7(强调教师)、0.9(强蒸馏)。规则为更高的 T 加更高的 alpha 等于更强的蒸馏。
- 模型大小比例:70B/7B=10×(优秀)、13B/1B=13×(良好)、7B/1B=7×(可接受);应避免 70B/1B=70× 这类差距过大的组合,资料称其效果不佳。
- 数据质量:最佳为教师生成数据加真实数据,示例比例为教师生成 70%、真实数据 30%;应避免仅使用真实数据,因为无法充分利用教师。
评估方面,资料示例使用 transformers 的 pipeline 分别对教师与学生进行文本生成,并比较输出与相似度。
参考资料(保留原文链接):Hinton et al. 2015(基础)https://arxiv.org/abs/1503.02531;MiniLLM(反向 KLD)https://arxiv.org/abs/2306.08543;KD Survey for LLMs (2024) https://arxiv.org/abs/2402.13116;MiniLLM GitHub https://github.com/microsoft/LMOps/tree/main/minillm。
限制方面:资料未提供具体的性能基准数值、硬件要求、训练时长或成本数据,这些事实暂未提供。