关于模型蒸馏和 KL散度的问答

什么是模型的知识蒸馏?它有哪些应用?

知识蒸馏是一种模型压缩技术,旨在将一个大型、复杂的教师模型的知识转移到一个小型、轻量级的学生模型中。教师模型通常具有更高的性能,但计算成本较高,而学生模型则更适合部署在资源受限的环境中。知识蒸馏的核心思想是让学生模型不仅学习如何预测正确标签(硬目标),还学习教师模型在输出层产生的概率分布(软目标)。通过模仿教师模型的软目标,学生模型可以学习到教师模型的泛化能力和对数据的丰富理解,即使学生模型结构更小。除了模仿最终的输出概率,知识蒸馏还可以扩展到模仿教师模型的中间层表示,例如隐藏层的激活或注意力机制的输出。这种方法有助于学生模型学习教师模型内部的处理流程和特征表示。

Kullback–Leibler (KL) 散度是什么?它在知识蒸馏中扮演什么角色?

Kullback–Leibler (KL) 散度(也称为相对熵或判别信息)是衡量两个概率分布之间差异的一种非对称度量。KL 散度总是非负的,当且仅当 P 和 Q 作为度量相同时为零。在知识蒸馏中,KL 散度常用于衡量学生模型的输出概率分布与教师模型的输出概率分布之间的差异。通过最小化教师模型和学生模型输出概率分布之间的 KL 散度(目标函数),学生模型可以学习模仿教师模型的预测行为和置信度,从而吸收教师模型的“知识”。这是软目标蒸馏的核心组成部分。

在知识蒸馏中,如何计算最终输出层的蒸馏损失?

在典型的知识蒸馏设置中,最终输出层的蒸馏损失通常通过计算学生模型和教师模型输出概率分布之间的交叉熵或 KL 散度来获得。更具体地说,教师模型的输出 logits 首先通过一个温度(T)缩放的 Softmax 函数转换为“软”概率分布。同样的温度缩放也应用于学生模型的输出 logits,然后通过 LogSoftmax 函数转换为对数概率。软目标损失通常使用 KL 散度来计算,衡量学生模型的对数软概率与教师模型的软概率之间的差异。这个损失项会返回梯度并用于更新学生模型的权重。通常,最终的训练损失是软目标损失和标准的硬目标(真实标签)交叉熵损失的加权和。

知识蒸馏中使用的“温度”参数有什么作用?

在知识蒸馏中,引入一个“温度”(T)参数来软化教师模型的输出概率分布。Softmax 函数通常用于将模型的输出 logits 转换为概率分布。当温度 T 大于 1 时,Softmax 函数会产生更平滑的概率分布,即各个类别之间的概率差异会减小。这使得教师模型在提供正确类别信息的同时,也能泄露关于错误类别之间相对概率的信息,这些信息可以帮助学生模型更好地理解不同类别之间的关系。当温度 T 趋近于 1 时, Softmax 行为接近标准 Softmax;当温度 T 趋近于 0 时,Softmax 会产生一个接近 one-hot 编码的硬概率分布。通过调整温度参数,可以控制教师模型概率分布的平滑程度以及传递给学生模型的额外信息量。较低的温度会使得教师模型的输出更像硬标签,而较高的温度则会使输出更像一个信息更丰富的概率分布。

除了最终输出层的蒸馏,还可以从教师模型中蒸馏哪些信息?

除了最终输出层的预测概率(logits),知识蒸馏还可以从教师模型的中间层提取信息。这被称为基于特征或基于中间层的知识蒸馏。例如,可以蒸馏教师模型隐藏层的激活值或注意力机制的输出。为了计算中间层之间的损失,可能需要引入一个线性映射层(或其他转换函数 Φ)来对教师模型的中间层输出进行维度转换,使其与学生模型的相应中间层输出具有相同的形状。然后可以使用损失函数(如均方误差 MSE 或余弦相似性)来最小化转换后的教师中间层输出与学生中间层输出之间的差异。这种方法有助于学生模型学习教师模型更深层的特征表示和内部处理机制。

如何衡量两个概率分布之间的差异?KL 散度有哪些性质?

衡量两个概率分布 P 和 Q 之间差异的方法有很多,KL 散度是其中一种重要的度量。KL 散度有一些关键性质:

    1. 非负性: KL 散度总是非负的,DKL(P || Q) ≥ 0。这是 Gibbs 不等式的结果。
    2. 当且仅当分布相同时为零: DKL(P || Q) 等于零当且仅当 P 和 Q 作为度量是相同的。
    3. 非对称性: KL 散度是非对称的,DKL(P || Q) 通常不等于 DKL(Q || P)。因此,它不是一个真正的距离度量,因为它不满足三角不等式。
    4. 与交叉熵的关系: KL 散度可以表示为交叉熵 H(P, Q) 和 P 的熵 H(P) 之差:DKL(P || Q) = H(P, Q) - H(P)。

在知识蒸馏中,如何选择用于中间层蒸馏的层和转换函数?

在基于中间层的知识蒸馏中,选择要蒸馏的中间层以及将教师模型中间层输出转换为与学生模型维度一致的转换函数是关键。

    1. 中间层映射规则: 由于教师模型和学生模型可能层数不同,需要建立一个映射关系来确定哪些教师层对应于哪些学生层进行蒸馏。一种策略是基于层数的最大公约数来确定参与映射的总块数,并在这些块内选择特定的层(例如最后一个层)进行映射。这种方法旨在找到一个结构化的方式来对齐不同层数的模型。
    2. 维度转换模块: 一旦确定了层映射,教师模型的中间层输出可能与学生模型的相应中间层输出维度不同。为了计算它们之间的损失,需要一个维度转换函数 Φ。可以使用一个线性的映射层来将教师模型的中间层结果转换为与学生模型维度一致的张量。这个线性层与学生模型一起参与训练,以学习最优的维度转换。

如何结合不同的知识蒸馏损失来优化学生模型?

在知识蒸馏中,可以结合不同类型的损失来训练学生模型,从而从教师模型中获取知识。一个常见的做法是将标准的硬目标损失(例如交叉熵损失,用于确保学生模型能够正确预测真实标签)与软目标蒸馏损失(例如用于最终输出层 logits 的交叉熵损失 LCE 或 KL 散度)结合起来。如果进行中间层蒸馏,还可以加入中间层蒸馏损失 Lmid。总的优化目标通常是这些损失项的加权和。这些权重可以通过实验或超参数搜索方法(如网格搜索)来确定,以找到能够使学生模型达到最佳性能的组合。通过这种多任务学习的方式,学生模型可以同时学习如何准确预测,如何模仿教师模型的预测分布,以及如何模仿教师模型的中间层表示。

 

 

发布者

立委

立委博士,多模态大模型应用高级咨询。出门问问大模型团队前工程副总裁,聚焦大模型及其AIGC应用。Netbase前首席科学家10年,期间指挥研发了18种语言的理解和应用系统,鲁棒、线速,scale up to 社会媒体大数据,语义落地到舆情挖掘产品,成为美国NLP工业落地的领跑者。Cymfony前研发副总八年,曾荣获第一届问答系统第一名(TREC-8 QA Track),并赢得17个小企业创新研究的信息抽取项目(PI for 17 SBIRs)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理