发布平台:CVPR
论文链接:InDistill: Transferring Knowledge From Pruned Intermediate Layers
代码链接:https://github.com/gsarridis/InDistill.git
创新点
介绍了一种模型压缩的方法Indistill,将知识蒸馏和通道剪枝结合在一个统一的框架中,以将关健信息流路径从重量级教师转移到轻量级学生。
考虑到每层的蒸馏难度和创建信息流路径的关健学习周期,采用基于课程学习的学习方案。
知识蒸馏中存在的问题
蒸馏过程中教师和学生之间通常存在宽度差异,造成了一个编码阶段,损害了信息流的保存,这对学生模仿教师的工作至关重要。
以往的方法都考虑特征映射编码来匹配教师和学生的宽度,从而折叠特征对齐。忽略了蒸馏过程中信息流路径的保留,忽略了模型之间的容量差距(即可学习参数数量的差异)。
方法
公式化
输入图像:
教师模型:,
表示层的指数,
表示教师的
层输出。
学生模型:,
表示学生网络可学习的参数,
表示学生网络的层数(倒数第二层),
,
层的输出。
教师和学生模型的类概率分布:,
表示输出类数。
逻辑蒸馏:
强制倒数第二层表示共享最大数量的信息:
辅助模型:,
表示层数(这里为
),
为其输出特征图。其中
和
,辅助模型的类概率分布表示为
。
通道剪枝
滤波器重要性评估标准:基于范数的结构化通道剪枝的方法。
表示输入特征,
表示输出特征,
表示该层的滤波器。
伪代码
信息流保护KD
需要辅助模型时。设计辅助模型与学生模型具有相同的层数和相同的输出特征尺寸(长、宽)。辅助模型的特征映射通道大小取决于学生模型的特征映射通道大小
和剪枝率
,即
。
应用Alg.1后,剪枝数量,教师模型修剪后的特征映射
与学生模型的特征映射大小相等(文中没有明说宽、高如何进行匹配)。
特征图和
之间的损失定义为:
表示
范数。
设和
分别表示教师和学生的对数。教师和学生的概率分布为:
其中,是温度项。最后,KL损失的定义如下:
课程学习
课程学习建议将一个困难的任务划分为子任务。
将每一层的转移作为一个单独的子任务。让学生模型的层数
决定训练的子任务数(层数)。
表示训练epoch的总数量,每个子任务(每层)训练的epoch计算如下:
其中参数表示每一层训练期的阈值,
是增加期数的参数子任务的难度(层数越深,对应训练的epoch越多)。(次数)
对应于每个子任务(每层)的epoch集合是
,其中:
最终损失的计算方法为: