【GiantPandCV引言】简单总结一篇综述《Knowledge Distillation A Survey》中的内容,提取关键部分以及感兴趣部分进行汇总。这篇是知识蒸馏综述的第一篇,主要内容为知识蒸馏中知识的分类,包括基于响应的知识、基于特征的知识和基于关系的知识。
知识蒸馏简介
定义:知识蒸馏代表将知识从大模型向小模型传输的过程。
作用:可以用于模型压缩和训练加速 手段。
综述梳理思路:
-
知识蒸馏的种类
-
训练机制
-
教师-学生 架构
-
蒸馏算法
-
性能比较
-
实际应用
典型的知识蒸馏KD是Hinton于15年发表的paper,明确了知识蒸馏的想法是让学生模型通过模仿教师模型来取得具有竞争性的性能,甚至可以取得超越教师网络的性能。
知识蒸馏的核心研究:如何将知识从大模型传递给小模型。
知识蒸馏系统的三个核心组件:
-
知识 knowledge
-
蒸馏算法 distillation algorithm
-
教师学生架构 teacher-student architecture
知识蒸馏相关的扩展方向:
-
teacher - student learning
-
mutual learning
-
assistant teaching
-
life long learning
-
self learning
在知识蒸馏中,我们主要关心:知识种类、蒸馏策略、教师学生架构
最原始的蒸馏方法是使用大模型的logits层作为教师网络的知识进行蒸馏,但知识的形式还可以是:激活、神经元、中间层特征、教师网络参数等。可以将其归类为下图中三种类型。
基于响应的知识(Response-Based Knowledge)
基于响应的知识一般指的是神经元的响应,即教师模型的最后一层逻辑输出。
响应知识的loss:
L R e s D ( z t , z s ) = L R ( z t , z s ) L_{R e s D}\left(z_{t}, z_{s}\right)=\mathcal{L}_{R}\left(z_{t}, z_{s}\right) LResD(zt,zs)=LR(zt,zs)
其核心想法是让学生模型模仿教师网络的输出,这是最经典、最简单、也最有效的处理方法
Hinton提出的KD是将teacher的logits层作为soft label.
p ( z i , T ) = exp ( z i / T ) ∑ j exp ( z j / T ) p\left(z_{i}, T\right)=\frac{\exp \left(z_{i} / T\right)}{\sum_{j} \exp \left(z_{j} / T\right)} p(zi,T)=∑jexp(zj/T)exp(zi/T)
T是用于控制soft target重要程度的超参数。
那么整体蒸馏loss可以写作:
L Res D ( p ( z t , T ) , p ( z s , T