这是知识蒸馏的第二篇文章,文章认为 Hinton 提出的 knowledge distillation 方法 (KD) 简单的拟合 Teacher 模型的输出并不能使 Student 达到和 Teacher 一样的泛化性能。对此,作者提出了 hint(隐藏层的输出)的概念。此外,作者认为在 thin 的条件下使得网络更 deep 可以在降低参数量的同时提升 Student 网络的性能。
Student 的损失函数
因为 Student 是更为轻量的网络,所以中间层的特征图大小与 Teacher 并不完全一致,因此需要 $W_r$ 矩阵来调整为同样的大小。为了减少参数量以及内存的消耗,作者将这一天调整的全连接改为卷积的形式。最终 Student 损失函数的完整形式如下:
$$
L_{HT}(W_{Guided},W_r)=\frac{1}{2}|u_h(x;W_{Hint})-r(v_g(x;W_{Guided});W_r)|^2
$$
这里 $u_h$ 表示 teacher 从输入到第 h 层的映射函数,$v_g$ 表示 student 从输入到第 g 层的映射函数,r 表示卷积层调整器,$W_r$ 为 r 对应的参数。
训练流程
阶段一:
- 选择 Teacher 中提取第 N 层输出作为 hint,提取 Student 中第 M 层输出作为 guided
- 使用卷积层调整器对 guided 的维度进行调整
- 优化 Student 最小化前文所述的 $L_{HT}$ 损失函数
阶段二:
- 使用第一阶段 Student 的参数作为初始参数
- 用 Hinton 提出的 KD 算法对 student 模型进行蒸馏