知识蒸馏
在大模型中,知识蒸馏是一种将大型、高精度教师模型中的关键知识提炼并传递给轻量化学生模型的技术。以下是关于知识蒸馏的详细解释:
- 原理:知识蒸馏的核心在于知识的传递和压缩。教师模型通常是参数众多的大型模型,经过充分训练后能捕捉数据中的丰富特征。学生模型则是轻量级模型,通过学习教师模型的输出实现性能优化。传统模型训练依赖硬标签,仅学习输入与输出的映射,而知识蒸馏引入教师模型的软标签,即教师模型经 softmax 处理的概率分布,包含类别间的相似性和置信度信息,学生模型通过学习软目标,能捕捉教师模型的推理逻辑,提升性能。
- 训练过程:首先需要训练一个性能强大的教师模型,然后准备与教师模型一致的训练或微调数据。在训练时,将输入同时送入教师模型和学生模型,得到对应输出,如 logits、内部层表示等。接着计算蒸馏损失,通常使用 KL 散度衡量学生模型和教师模型输出概率分布之间的差异,再结合监督损失,如交叉熵损失,通过反向传播更新学生模型参数,而教师模型通常是冻结的。
- 常见方法:
- Logits 蒸馏:这是最原始也是最常见的蒸馏方式,只关心模型输出层 logits 的模仿,教师的输出分布,即软标签,为学生模型提供了比真实标签更丰富的信息。
- 特征表示蒸馏:在 Transformer 中,不仅蒸馏最后的 logits,还蒸馏中间层的隐状态或注意力矩阵,让学生在层间细节上更接近教师,适合结构相似的模型。
- 多任务蒸馏:当教师模型是一个多任务或大规模预训练模型时,可以在多个任务数据或多语言数据上进行联合蒸馏,让学生继承教师在不同任务或语言上的知识。
- Progressive Distillation/ Layer - wise Distillation:若学生层数远少于教师层数,则可采用分层逐步蒸馏的策略,让学生更加稳定地学到教师的表征。
- Prompt 蒸馏:在大模型的指令微调或对话场景中,把教师的回答作为一个 “软目标”,让学生学习如何在相同指令下进行回答,使学生具备类似的对话能力,但规模更小。
- 作用:知识蒸馏可以显著降低模型的复杂度和计算量,提高模型的运行效率,加速推理,降低运行成本。同时,模型蒸馏还有可能帮助学生模型学习到教师模型中蕴含的泛化模式,提高其在未见过的数据上的表现,并且轻量化后的模型通常更加简洁明了,有利于理解和分析模型的决策过程,也更容易进行部署和应用。