知识蒸馏

论文地址:https://arxiv.org/abs/1503.02531

问题:我们的一些网络和模型,都是用海量的数据和算力训练出来的,这些模型都很大很臃肿,而最终的部署应用,一般都是部署在终端设备上,手机、电脑、一些边缘设备等。所以我们需要把大模型压缩成一个小模型,把网络轻量化。

所谓的知识蒸馏就是把大的网络或模型作为教师网络,然后训练一个小的学生网络。教师网络把自己靠着海量数据和算力训练学到的知识教给学生,使得学生网络这个轻量级的网络可以达到类似教师网络的性能。

soft targets

我们先介绍两种标签:hard targets 和 soft targets

比如一个手写数字2,我们把它标记为2,也就是说这个数字是2的概率为1,是其他数字的概率为0,我们把这种标签就称作hard targets。

那么soft targets呢,它会标记该数字是2的概率为0.7,是7的概率是0.3,是1的概率为0.1。会给出这个数字的所有类别判断结果,这就是soft targets。

显然,soft targets比hard targets包含了更多的信息,它不光知道这个数字是2,还知道它和哪个相似,相似程度有多大。一般我们标记的数据集都是hard targets,我们把数据输入一个网络,训练得到的结果是soft targets,那么既然soft targets包含更多的信息,我们如果用一个大网络得到了soft targets拿去给一个小网络学习,会不会效果更好呢?

但是呢,在这之前,还要进行一个操作,我们用大的网络(教师网络)训练出来的soft targets还是不够“ soft ”,我们还想把这些差别更明显的映射出来,这就要引入一个蒸馏温度

蒸馏温度T

我们经过网络得到的soft targets ,有的网络结果还是不够soft,所以想让它变的更平滑。

那么做过分类任务的同学都知道softmax函数,它将多个神经元的输出映射到(0,1)区间之内,可以看作预测的概率。softmax函数如下:

我们设置蒸馏温度为T,把公式改成这样:

这个公式里面,如果T=1的话,那就等同于softmax,如果T等于别的数的时候,可以将概率变得更加”soft“

注意,T=100的时候,这个线几乎变水平了。也就是各个类别概率基本接近了。

知识蒸馏过程

这个蒸馏过程如图所示。首先我们有一个训练好的教师网络,还有一个没训练(或者预训练)的学生网络。我们把数据喂给教师网络和学生网络,将他们的结果用一个带蒸馏温度T=t的softmax输出,然后把他们俩的结果做一个损失函数,也就是说我们希望学生网络的结果和教师网络接近。同时,我们还把学生网络的输出再设置一个蒸馏温度T=1,也就是不做处理,让这个结果与标记的hard targets做一个损失函数,这里相当于正常训练,希望学生网络从hard targets里面学到知识,

那么最终的两个loss值,我们分别乘上参数,加到一起。我们的目标就是使得最终的这个loss最小,也就是使得那两个loss都最小。训练过程还是我们常用的反向传播,梯度下降等方法。


实验结果可以看原论文。

总结

知识蒸馏原理并不不复杂,是一个很好的压缩模型的方法,训练出来的学生网络有以下优点:
1)性能与教师网络差不多,规模比教师网络小
2)由于用教师网络训练学生网络,所以可以出现零样本学习,就比如学生网络没见过猫,数据集里面没有猫,但是教师网络认识猫,那么训练出来的学生网络输入猫的时候,而也可以被识别。
3)数据量比较小的时候,我们的训练容易出现过拟合。但是我们使用soft targets训练网络可以很好的解决这种过拟合。

【知识蒸馏】Distilling the Knowledge in a Neural Network相关推荐

  1. Paper:《Distilling the Knowledge in a Neural Network神经网络中的知识蒸馏》翻译与解读

    Paper:<Distilling the Knowledge in a Neural Network神经网络中的知识蒸馏>翻译与解读 目录 <Distilling the Know ...

  2. Distilling the Knowledge in a Neural Network 论文笔记蒸馏

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/bryant_meng/article/ ...

  3. 【Distilling】《Distilling the Knowledge in a Neural Network》

    arXiv-2015 In NIPS Deep Learning Workshop, 2014 文章目录 1 Background and Motivation 2 Conceptual block ...

  4. 《Distilling the Knowledge in a Neural Network》 论文阅读笔记

    原文链接:https://arxiv.org/abs/1503.02531   第一次接触这篇文章是在做网络结构的时候,对于神经网络加速,知识蒸馏也算是一种方法,当时连同剪纸等都是网络压缩的内容,觉得 ...

  5. Distilling the Knowledge in a Neural Network阅读笔记

    文章目录 Abstract Introduction Distillation Preliminary experiments on MNIST Experiments on speech recog ...

  6. 一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理

    知识蒸馏算法原理精讲 文章目录 知识蒸馏算法原理精讲 1. 什么是知识蒸馏? 2. 轻量化网络的方式有哪些? 3. 为什么要进行知识蒸馏? 3.1 提升模型精度 3.2 降低模型时延,压缩网络参数 3 ...

  7. 【论文翻译_知识蒸馏】Distilling Holistic Knowledge with Graph Neural Networks

    (以下的"提取"都可以替换为"蒸馏"),收录于ICCV2021 摘要 知识提炼(KD)旨在将知识从一个更大的优化教师网络转移到一个更小的可学习学生网络.现有的知 ...

  8. 温故而知新的知识蒸馏 Distilling Knowledge

    文章目录 温故而知新的知识蒸馏 温故而知新的知识蒸馏 博客链接:Knowledge Review:超越知识蒸馏,Student上分新玩法! 上图中的(d)是提出的新方法,他融合了Teacher的不同层 ...

  9. 【论文笔记_知识蒸馏_2022】Knowledge Distillation with the Reused Teacher Classifier

    (下文中的知识提炼即知识蒸馏) 摘要 知识提炼的目的是将一个强大而繁琐的教师模型压缩到一个轻量级的学生模型中,而不至于牺牲很多性能.为此,在过去的几年里,人们提出了各种方法,一般都有精心设计的知识表示 ...

  10. [目标检测知识蒸馏3] [AAAI22] Knowledge Distillation for Object Detection via Rank Mimicking and Prediction

    [AAAI22] Knowledge Distillation for Object Detection via Rank Mimicking and Prediction-guided Featur ...

最新文章

  1. 在ListCtrl控件中插入图标
  2. Adding a horizontal separator to a Flex PopUpButton control’s pop up menu (redux)
  3. Redis和Memcache的区别总结
  4. easyui---修改删除查询
  5. C#窗体内控件大小随窗体等比例变化
  6. Matlab中用到的bsxfun函数
  7. 什么是 devops_DevOps对您意味着什么?
  8. 2017.9.25 社交网络 思考记录
  9. C语言终极宝典微盘,C语言终极面试宝典.pdf
  10. docker-compose部署Minio
  11. 计算机的关机键,怎么让电脑按关机键后不关机?让电脑主机上关机键失效的方法...
  12. CMMI3过程改进项目计划
  13. YYH的营救计划(NOIP模拟赛Round 6)
  14. Bitmap、CBitmap、HBITMAP以及BITMAP的相互转换
  15. 经典机器学习模型:朴素贝叶斯分类
  16. HCIE面试备考方法之表达困难症患者请戳
  17. chrome插件,常用插件,必备插件,黑科技
  18. eclipse 解决 java.lang.NoClassDefFoundError: ilog/concert/IloException
  19. JS 删除字符串中所有的数字
  20. 在计算机桌面怎样写提示语,桌面标语-标语桌面请保持-保持桌面干净标语

热门文章

  1. 免费下载pro puppet 2高清pdf,需要的抓紧
  2. j$(function() j$(document).ready 区别
  3. 使用spring的事务的三种方法
  4. 分享一个查看JSON的程序
  5. 2 网段 Vlan+NAT 配置
  6. Asp.Net基于forms的验证机制,记录一下...
  7. 优雅的对 list 遍历进行 add 或者 remove 操作
  8. PCB设计常见的有那些问题
  9. Android基础控件TextClock和Chronometer的使用
  10. [LeetCode] Increasing Triplet Subsequence 递增的三元子序列