您的位置:首页 > 教育 > 培训 > 知识蒸馏(Knowledge Distillation)

知识蒸馏(Knowledge Distillation)

2024/10/5 23:18:44 来源:https://blog.csdn.net/qq_1532145264/article/details/141926747  浏览:    关键词:知识蒸馏(Knowledge Distillation)

Distilling the Knowledge in a Neural Network

知识蒸馏原理

1、Summarize

知识蒸馏技术 通过从大型的教师模型向小型的学生模型转移知识来实现模型压缩和优化。

知识蒸馏的核心思想是 利用教师模型在大量数据上积累的丰富知识,通过特定的蒸馏算法,使学生模型能够学习并吸收这些知识,从而达到与教师模型相似的性能。

这个过程能够显著减少模型的复杂度和计算开销,同时尽可能保留较大模型的性能。

知识蒸馏通常应用于那些结构复杂的神经网络模型上,这些模型具有众多层次和大量参数,被当作教师模型来使用。如下图所示,在知识蒸馏过程中,一个小的“学生”模型通过模仿大的“教师”模型,学习和吸收教师模型中的知识,从而获得与教师模型相似甚至更高的准确度。

在这里插入图片描述

知识蒸馏系统通常由三部分组成,分别是 知识(Knowledge)蒸馏算法(Distillation algorithm)师生架构(Teacher-student architecture)

  • 知识部分指的是从教师模型中提取的有价值的信息,可以是输出的 logits(未归一化概率)、中间层的特征表示或者模型参数等。
  • 蒸馏算法是用于将教师模型的知识传递给学生模型的具体方法和技术,确保学生模型能够有效学习和吸收这些知识。
  • 师生架构则是指教师模型和学生模型的设计和配置方式,包括它们之间的交互模式和训练过程。通过这三部分的协同工作,知识蒸馏系统能够实现从大模型向小模型的高效知识传递。

2、Type of knowledge

大型神经网络中的知识来源非常丰富,不仅仅局限于模型在训练过程中学习到的权重(weights)和偏置(biases),还包括其他多种形式的信息。

知识的类型可以分为四类,主要有 Response-based、Feature-based、Relation-based 三种,另外还有一种较少提及的类型,即 Architecture-based 的知识。

在这里插入图片描述

(1)response-based knowledge

基于响应的知识通常是指教师模型的输出,例如分类任务中通过 softmax 函数处理后输出的类型概率分布(软标签)。这种方法利用教师模型对输入数据的预测结果来帮助学生模型学习,从而提高其性能。

当知识蒸馏对这部分知识进行转移时,学生模型直接学习教师模型的最终输出,以使学生模型获得与教师模型一样的预测性能。

在这里插入图片描述

通俗的说法就是老师充分学习知识后,直接将结论告诉学生。

这种方法简单而高效,适用于各种学习任务,包括普通的监督学习、涉及不同领域和模态的学习任务,以及一些特殊情况下的学习场景,如多模型学习、自监督学习。另外,基于响应的知识蒸馏与其他知识蒸馏方法的组合十分灵活,并且无需额外的设计,进一步提高了其适用性和实用性。

(2)feature-based knowledge

上面一种方法学习目标非常直接,学生模型直接学习教师模型的最后预测结果,然而输出层提供的信息是有限的。在神经网络中,数据通过多个层次的神经元进行传递和处理,每一层都可以看作是对数据的一种特征提取和变换。

随着网络的深度增加,每一层提取的特征都越来越抽象和高级,可以捕捉到数据中更加复杂和抽象的模式和结构。考虑到神经网络擅长学习不同抽象级别的多层特征表示,因此模型中间层的输出,即特征图,也可以作为指导学生模型学习的知识。

在这里插入图片描述

虽然基于特征的知识转移为学生模型的学习提供了更多信息,但由于学生模型和教师模型的结构不一定相同,如何从教师模型中选择哪一层网络(提示层),从学生模型中选择哪一层(引导层)模仿教师模型的特征,是一个需要探究的问题。

另外,当提示层和引导层大小存在差异时,如何正确匹配教师与学生的特征表示也需要进一步探究。

(3)relation-based knowledge

上述两种方法都使用了教师模型中特定网络层中特征的输出,而基于关系的知识进一步探索了各网络层输出之间的关系或样本之间的关系。基于关系的知识蒸馏认为,知识的不仅仅是特征输出结果,而且还是网络层与层之间以及样本数据之间的关系。

其重点在于提供一个一致的关系映射,使得学生模型能够更好地学习教师模型中的关系知识。例如将教师模型中某两层特征图的 Gram 矩阵(网络层输出之间的关系)作为知识,或者将数据样本之间的关系表示为数据样本在教师模型中的特征表征的概率分布,将这种概率分布(数据样本间的关系)作为知识供学生模型学习。

在这里插入图片描述

基于网络层的关系蒸馏只关注每个样本在不同网络层之间的关系知识,而忽略了同样存在于教师模型的空间结构中不同样本之间的关系信息。基于样本间关系的特征知识蒸馏正是利用了这种知识,将教师模型中捕捉到的样本间关系信息传递到学生模型中。

3、Distillation method

类似于人类教师和学生之间的学习模式,神经网络的知识蒸馏在学习方式上也有多种模式,一般分为三种:离线蒸馏(offline distillation),在线蒸馏(online distillation)以及自蒸馏(self-distillation)。

在这里插入图片描述

(1)offline distillation

在离线蒸馏中, 教师模型在学生模型训练之前已经完成训练 ,并且其参数在整个蒸馏过程中保持不变。这种方法是大部分知识蒸馏算法采用的方法,主要包含三个过程:

  1. 蒸馏前教师模型预训练:首先,教师模型在大规模数据集上进行训练,达到理想的性能水平。这个过程通常耗时较长且需要大量计算资源;
  2. 知识提取:将教师模型的知识提取出来,通常以教师模型对训练数据的输出(如概率分布或特征表示)的形式表示;
  3. 学生模型的训练:在学生模型的训练过程中,使用教师模型的输出作为指导。学生模型通过一个额外的蒸馏损失函数,学习如何模拟教师模型的输出。常见的蒸馏损失函数包括交叉熵损失和均方误差损失。

该方法主要侧重于知识迁移部分,教师模型通常参数量大,一些庞大复杂模型会通过这种方式得到较小模型,比如 BERT 通过蒸馏学习得到 tinyBERT。

它的主要优点在于能灵活选择预训练好的大型模型作教师,在蒸馏过程中教师模型不需要参数更新,而只需要关注学生模型的学习,这使得训练过程的部署简单可控,大大减少了知识蒸馏的资源消耗和成本,但这种方法的缺点是学生模型非常依赖教师模型。

(2)online distillation

在线知识蒸馏中, 教师模型和学生模型在同一训练过程中共同学习。教师模型不再是预先训练好的,而是与学生模型同步更新,教师模型和学生模型相互影响,共同提升性能,相互学习和调整。这种协同学习使得教师模型和学生模型可以动态适应数据变化和任务需求。

在线知识蒸馏能够在没有预训练模型的情况下,针对不同任务实现知识学习和蒸馏,有助于多个模型在学习过程中互相调整和更新学到的知识,实现优势互补。特别是对于多任务学习等特殊场景,具有很大优势。相比于模型压缩,在线学习更适合于知识融合以及多模态、跨领域等场景。然而训练过程中,增加的模型数量可能会导致计算资源的消耗增加。

(3)self-distillation

自蒸馏是一种比较特殊的知识蒸馏模式,可以看作是的一种特例,即教师模型和学生模型采用相同的网络模型的在线蒸馏。自蒸馏过程中, 学生模型从自身的输出中进行学习,这意味着学生模型将深层的信息传递给浅层,以指导自身的训练过程,而无需依赖外部的教师模型 。用学习过程比喻,离线蒸馏是知识渊博的老师向学生传授知识;在线蒸馏是老师和学生一起学习、共同进步;自蒸馏是学生自学成才。

自蒸馏的提出主要是为了解决传统两阶段蒸馏方法的一些问题。传统方法需要预先训练大型教师模型,这会消耗大量的时间和计算资源。而且,教师模型和学生模型之间可能存在能力不匹配的问题,导致学生无法有效地学习教师模型的表征。

自蒸馏方法克服了这些问题,它不需要依赖教师模型进行指导,而是通过学生模型自身的输出来提升性能。这种方法使得学生模型能够在没有外部指导的情况下自我提升,并且可以更加高效地进行模型训练。

4、Hard-target & Soft-target

传统的神经网络训练方法是定义一个损失函数,目标是使预测值尽可能接近于真实值(Hard- target),损失函数就是使神经网络的损失值和尽可能小。这种训练过程是对ground truth求极大似然。在知识蒸馏中,是使用大模型的类别概率作为Soft-target的训练过程。

在这里插入图片描述

如在MNIST数据集中做手写体数字识别任务,假设某个输入的“2”更加形似"3",softmax的输出值中"3"对应的概率会比其他负标签类别高;而另一个"2"更加形似"7",则这个样本分配给"7"对应的概率会比其他负标签类别高。这两个"2"对应的Hard-target的值是相同的,但是它们的Soft-target却是不同的,由此我们可见Soft-target蕴含着比Hard-target更多的信息。

在这里插入图片描述

使用软标签就是修改了softmax函数,增加温度系数T;

q i = e x p ( z i / T ) ∑ j e x p ( z j / T ) q_i = {\frac {exp(z_i/T)} { {\textstyle \sum_{j}^{}} exp(z_j/T)}} qi=jexp(zj/T)exp(zi/T)

其中 $q_i $ 是每个类别输出的概率, z i z_i zi 是每个类别输出的 logits,T 就是温度。当温度 T=1 时,这就是标准的 Softmax 公式。 T越高,softmax 的output probability distribution越趋于平滑,其分布的熵越大,负标签携带的信息会被相对地放大,模型训练将更加关注负标签。

关于温度T的影响:

在这里插入图片描述

温度的高低改变的是Student模型训练过程中对负标签的关注程度。当温度较低时,对负标签的关注,尤其是那些显著低于平均值的负标签的关注较少;而温度较高时,负标签相关的值会相对增大,Student模型会相对更多地关注到负标签。

实际上,负标签中包含一定的信息,尤其是那些负标签概率值显著高于平均值的负标签。但由于Teacher模型的训练过程决定了负标签部分概率值都比较小,并且负标签的值越低,其信息就越不可靠。因此温度的选取需要进行实际实验的比较,本质上就是在下面两种情况之中取舍:

  • 当想从负标签中学到一些信息量的时候,温度T应调高一些;
  • 当想减少负标签的干扰的时候,温度T应调低一些;

总的来说,T的选择和Student模型的大小有关,Student模型参数量比较小的时候,相对比较低的温度就可以了。因为参数量小的模型不能学到所有Teacher模型的知识,所以可以适当忽略掉一些负标签的信息。

5、Conclusion

除了知识蒸馏技术外,还有一些类似的技术可以用于实现模型的压缩和加速,例如:

  • 权重剪枝:通过删除神经网络中冗余的权重来减少模型的复杂度和计算量。具体来说,可以通过设定一个阈值来判断权重的重要性,然后将不重要的权重设置为零或删除。
  • 模型量化:将神经网络中的权重和激活值从浮点数转换为低精度的整数表示,从而减少模型的存储空间和计算量。
  • 知识蒸馏(Knowledge Distillation):这是一种特殊的模型蒸馏技术,其中教师模型和学生模型具有相同的架构,但参数不同。通过让学生模型学习教师模型的输出,可以实现模型的压缩和加速。
  • 知识提炼(Knowledge Carving):选择性地从教师模型中抽取部分子结构用于构建学生模型。
  • 网络剪枝(Network Pruning):通过删除神经网络中冗余的神经元或连接来减少模型的复杂度和计算量。具体来说,可以通过设定一个阈值来判断神经元或连接的重要性,然后将不重要的神经元或连接删除。
  • 低秩分解(Low-Rank Factorization):将神经网络中的权重矩阵分解为两个低秩矩阵的乘积,从而减少模型的存储空间和计算量。这种方法可以应用于卷积层和全连接层等不同类型的神经网络层。
  • 结构搜索(Neural Architecture Search):通过自动搜索最优的神经网络结构来实现模型的压缩和加速。这种方法可以根据特定任务的需求来定制适合的神经网络结构

[REFERENCE]
小白学深度学习:知识蒸馏研究综述
深度学习方法(十五):知识蒸馏(Distilling the Knowledge in a Neural Network),在线蒸馏
一分钟带你认识深度学习中的知识蒸馏
深度学习中的知识蒸馏(Knowledge Distillation)
深度学习知识蒸馏的研究综述
深度学习中的模型蒸馏技术:实现流程、作用及实践案例
深度学习中知识蒸馏研究综
全网最细图解知识蒸馏(涉及知识点:知识蒸馏实现代码,知识蒸馏训练过程,推理过程,蒸馏温度,蒸馏损失函数)
深度学习知识蒸馏的研究综述
【精读AI论文】知识蒸馏
知识蒸馏原理介绍!知识从哪里来怎么蒸馏?【推理引擎】模型压缩系列第06篇(上)
DeiT:注意力也能蒸馏

[COPY]
模型压缩(上)—— 知识蒸馏(Distilling Knowledge)
知识蒸馏原理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com