美文网首页
蒸馏学习

蒸馏学习

作者: Jessiedududu | 来源:发表于2022-05-06 15:17 被阅读0次

知识蒸馏解决的问题

  1. 提升模型精度
  2. 降低模型时延,压缩网络参数
  3. 标签之间的域迁移

基本框架

知识蒸馏采取Teacher-Student模式:将复杂且大的模型作为Teacher,Student模型结构较为简单,用Teacher来辅助Student模型的训练,Student模型去学习Teacher模型的泛化能力。

Teacher模型不上线,真正部署上线进行预测任务的是Student小模型。

知识蒸馏根据迁移的方法不同分为基于目标蒸馏(也称为Soft-target蒸馏或Logits方法蒸馏)和基于特征蒸馏的算法两个大的方向。

目标蒸馏 Logits方法

训练的目标

限定在分类问题下,传统的神经网络训练方法是定义一个损失函数,目标是使预测值尽可能接近于真实值(Hard- target),在知识蒸馏中,是使用大模型softmax层输出的类别概率作为Soft-target的训练过程。

  • Hard-target:原始数据集标注的 one-shot 标签,除了正标签为 1,其他负标签都是 0。
  • Soft-target:Teacher模型softmax层输出的类别概率,每个类别都分配了概率,正标签的概率最高。

Teacher模型的作用

知识蒸馏用Teacher模型预测的 Soft-target 来辅助 Hard-target 训练Student模型的方式为什么有效呢?

softmax层的输出,除了正例之外,负标签也带有Teacher模型归纳推理的大量信息,比如某些负标签对应的概率远远大于其他负标签,则代表 Teacher模型在推理时认为该样本与该负标签有一定的相似性。而在传统的训练过程(Hard-target)中,所有负标签都被统一对待。也就是说,知识蒸馏的训练方式使得每个样本给Student模型带来的信息量大于传统的训练方式。

具体方法

几个概念:

  • logits:经过DNN网络各种非线性变换,在网络最后Softmax层之前,会得到这张图片属于各个类别的大小数值zi。
  • softmax函数:exp(zi)/sum(exp(z)),指数会增大logits之间的差异,对输出结果进行归一化表示。
  • 带温度系数的softmax函数:exp(zi/T)/sum(exp(z/T)),当T越大,z/T越小,输出的分布越平滑,负标签所携带的信息相当于被放大。

步骤:

  1. 训练好Teacher模型;
  2. 使用高温度系数产生soft-target;
  3. 使用soft-target和hard-target(ground-truth)同时训练Student模型;
  4. Student线上做推理,设置温度系数T=1。

第3步中,损失函数是两个交叉熵的加权和L=aLsoft+bLhard
,之所以要加上hard-target的部分,是因为Teacher模型有错误的概率,需要ground-truth进行纠正。

Lhard权重取较小值时,效果比较好,由于Lsoft贡献的梯度大约为Lhard的1/T2,因此在同时使用Soft-target和Hard-target的时候,需要在Lsoft的权重上乘T2的系数,这样才能保证Soft-target和Hard-target贡献的梯度量基本一致。

温度T参数调整

温度T特点:
原始的softmax函数是T=0时的特例;T越小时,概率分布比原始更“陡峭”,也就是说,当T接近于0时,Softmax 的输出值会接近于 Hard-target;随着T的增加,Softmax 的输出分布越来越平缓,信息熵会越来越大。温度越高,softmax上各个值的分布就越平均,思考极端情况,当T=无穷大时,softmax的值是平均分布的。

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

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

在整个知识蒸馏过程中,我们先让温度T升高,然后在测试阶段恢复“低温“,从而将原模型中的知识提取出来,因此将其称为是蒸馏。

特征蒸馏

特征蒸馏.png

作用:将深且宽的网络蒸馏成更深但窄的网络
步骤:
第一阶段:首先选择待蒸馏的中间层(即Teacher的Hint layer和Student的Guided layer),由于两者的输出尺寸可能不同,在Guided layer后另外接一层卷积层,使得输出尺寸与Teacher的Hint layer匹配。接着通过知识蒸馏的方式训练Student网络的Guided layer,使得Student网络的中间层学习到Teacher的Hint layer的输出。
第二阶段: 在训练好Guided layer之后,将当前的参数作为网络的初始参数,利用知识蒸馏的方式训练Student网络的所有层参数,使Student学习Teacher的输出。

相关论文

目标蒸馏
Distilling the Knowledge in a Neural Network 》,NIPS,2014。
《Deep Mutual Learning》,CVPR,2018。
《Born Again Neural Networks》,CVPR,2018。
《Distilling Task-Specific Knowledge from BERT into Simple Neural Networks》,2019。

特征蒸馏
《FitNets: Hints for Thin Deep Nets》,ICLR,2015。
《Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer》, ICLR,2017。
《A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning》,CVPR,2017。
《Learning Efficient Object Detection Models》,NIPS,2017。

参考 https://zhuanlan.zhihu.com/p/353472061

相关文章

  • 蒸馏学习

    知识蒸馏解决的问题 提升模型精度 降低模型时延,压缩网络参数 标签之间的域迁移 基本框架 知识蒸馏采取Teache...

  • 机器学习算法-蒸馏学习

    姓名:陈婷 学号:19021210968 转载:https://baijiahao.baidu.com/s?id=...

  • 深度学习-知识蒸馏

    出于计算资源的限制或效率的要求,深度学习模型在部署推断时往往需要进行压缩,模型蒸馏是其中一种常见方法。将原始数据集...

  • 8.17学习总结

    姓名:赵童 培训内容: 上午我们学习了蒸馏的概念,蒸馏的分类,两组分溶液的气液平衡,蒸馏塔的操作过程以及两组分连续...

  • 《蒸馏》

    如果你那边也在下雨, 不要埋怨坏天气, 因为这一定是温存, 散落的凭据…… 附:下雨和温存互为凭据,散落和蒸馏互为...

  • 蒸馏

    pass

  • 蒸馏

    蒸馏是一种热力学的分离工艺,它利用混合液体或液-固体系中各组分沸点不同,使低沸点组分蒸发,再冷凝以分离整个组分的单...

  • 【技术博客】通过量化知识来解释知识蒸馏

    【技术博客】****通过量化知识来解释知识蒸馏 知识蒸馏介绍 知识蒸馏(Knowledge Distillatio...

  • Distilling the Knowledge in a Ne

    贡献 提出 知识蒸馏 (Knowledge Distillation) 方法,从大模型中学习到的知识中学习有用信息...

  • 有趣的小实验(一)蒸馏水

    蒸馏水介绍: 大家好,今天我要讲的是一个关于蒸馏水的实验。大家知道蒸馏水是什么吗?蒸馏水呀,其实是指经过蒸馏...

网友评论

      本文标题:蒸馏学习

      本文链接:https://www.haomeiwen.com/subject/vxonyrtx.html