今天介绍一篇我司的文章Distilling Knowledge via Knowledge Review(缩写为KR),提出知识蒸馏的新解法。

之前在知乎回答过一个知识蒸馏的问题,为何感觉“知识蒸馏”这几年没有什么成果?https://www.zhihu.com/question/309808462/answer/1591099835

其实知识蒸馏从15年提出以来,主要出现了按照蒸馏位置不同的两种方法分别为蒸logits和features。蒸logits,kd(指15年那篇)之后,主要是通过同时对teacher和student进行约束来保持两者的分布一致性来做的,如PKT、CC等;蒸features,起源于FitNet,后续主要是通过如何更好的利用teacher的feature来做的,如Overhaul等。另外最近因为self-supervised的火热,也出现了如CRD、SSKD等优秀的自监督相关的kd算法。

我在回答中也提到,之前的知识蒸馏方法中Overhaul效果是最好的,一骑绝尘。之前的方法把知识蒸馏的上限推到了一个新的高度,貌似已经达到饱和了,那么就引出来一个值得思考的问题,之前的蒸馏feature和logits的方式,teacher的信息真的完全被利用了吗?

显然还没有

01

Knowledge Review

如上图,其中(a)图是蒸logits,(b)是蒸单层feture,(c)是蒸多层feature。之前的蒸馏方法(a)(b)(c)三种形式都可以理解为相同层进行蒸馏,引导student学习teacher相同层的feature。但是这种相同层蒸馏方式在训练的过程中显然是不合理的,teacher深层的语义信息更加抽象,在student的训练初期,去学习teacher的抽象深层语义信息,这就好比是让一个婴儿去学习大学知识,这显然是非常困难且难以学习的。

于是就引出了knowledge review的方法,如图(d)所示,student的单层feature通过teacher的多层feature同时引导学习,这种引导学习的方式比起之前的方法更加完全,teacher的浅层可以认为是比较简单的知识,深层是比较抽象的知识,student训练早期会更加关注teacher浅层简单知识的学习,随着训练的进行,会越来越关注teacher深层抽象知识的学习,knowledge review这个词非常形象表达了这个过程——温故知新,浅层是old knowledge,深层是new knowledge。

knowledge review的想法是非常make sense的,但是想要做work,还需要一些针对性的设计。

02

Review Mechanism

下面先通过符号假设推导出review mechanism的函数表达式。

假设一张图片输入是  ,student网络是  ,那么student的logit输出为  。其中  可以分成  不同部分,  是classifier部分,其余是不同stage部分,那么

表示复合函数  ,中间层的feture表示为  ,那么第i层的feature的公式为

teacher的函数表达式跟student相类似。

那么一层知识蒸馏的loss可以表示为

其中  是对feature进行转换的函数。  是用来衡量转换后的teacher和student的距离函数。

那么多层知识蒸馏的loss可以表示为

review mechanism的单层知识蒸馏loss则可以表示为

表示student第i层同时对应teacher的从1到i层的loss之和。

那么review mechanism的多层知识蒸馏loss则可以表示为

在知识蒸馏的训练过程中,review mechanism的loss相当于一个正则项,测试的时候,只在student网络上inference,没有额外的时间损耗。

03

Residual Learning Framework

根据上述review mechanism推导得到的框架如图(a),灰色块是student做了转换后的feature,绿色块是蒸馏的距离函数计算方式。图(b)对图(a)进一步进行设计,直接将每个单层student对应多层teacher,但是直接对student每一个stage进行蒸馏,不同层的特征会产生冲突相互干扰。

将review mechanism的loss函数简写成

忽略掉对feature的转换函数。然后将i和j两个顺序进行交换

可以将上式括号内部分近似成student多层feature融合求距离的公式

其中  是一个融合函数。那么整个知识蒸馏框架就变成了图(c),红色块表示融合模块。

最后图(d)再进一步对图(c)的融合模块进行优化,提高效率。融合  的过程可以看成是  和  融合,于是就可以将  看成一个递归函数,重复进行融合操作,将  看成是  到  的融合,那么loss函数可以表示成

有没有觉得这个式子似曾相识,这就是ResNet的residual learning的递推公式啊,这个residual learning的设计可以帮助knowledge review的训练过程更加稳定,容易优化。

其中红色块和绿色块分别设计了ABF和HCL模块。

ABF模块设计和SKNet非常类似,将student后面一个stage转换得到的feature和当前stage的feature看成是两条分支,然后通过concat、卷积的方式得到两条分支的spatial weight,最后reweight后相加得到融合的feature。

HCL模块设计借鉴了PSPNet的方式,用四种尺度AvgPool分别对student和teacher的feature进行池化,然后计算loss。

通过上述一系列的设计,knowledge review将温故知新的思想发挥到了极致。

表格中的OFD是Overhaul,可以看到knowledge review比之前的Overhaul、CRD等方法都要好上一大截,而且在不同模型架构上都有效。

04

总结

知识蒸馏是计算机视觉中一个很有趣的问题,之前的方法都是从如何更好的利用好teacher的信息出发,将teacher和student相同层的信息利用起来,而knowledge review进一步引入温故知新的思想,将teacher的信息利用到了极致。但是知识蒸馏仍然存在着超参敏感的问题,后续或许可以结合一些self-supervised的方法像之前的CRD,或者通过一些特殊的设计来增强知识蒸馏的稳定性,这可能是知识蒸馏发挥实用价值当务之急的事情。

Reference

paper链接: https://jiaya.me/papers/kdreview_cvpr21.pdf


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:

【论文解读】Knowledge Review:知识蒸馏新解法相关推荐

  1. 【CVPR 2021】Knowledge Review:知识蒸馏新解法

    [CVPR 2021]Knowledge Review:知识蒸馏新解法 论文地址: 主要问题: 主要思路: 符号假设: 具体实现: 实验结果: 关注我的公众号: 联系作者: 论文地址: https:/ ...

  2. 【论文解读】通过知识蒸馏促进轻量级深度估计

    摘要 采用大型复杂的神经网络实现深度估计的高级性能.虽然性能仍在不断提高,但作者认为深度估计必须是准确和高效的.这是现实应用的初步要求.但是,快速深度估计会在模型容量和精度之间产生折衷,从而降低模型的 ...

  3. Knowledge Distillation | 知识蒸馏经典解读

    作者 | 小小 整理 | NewBeeNLP 写在前面 知识蒸馏是一种模型压缩方法,是一种基于"教师-学生网络思想"的训练方法,由于其简单,有效,在工业界被广泛应用.这一技术的理论 ...

  4. 加速100倍,性能媲美SOTA,浙大知识蒸馏新方法FastDFKD

    来源:机器之心 在无法获取到原始训练数据的情况下,你可以尝试一下这种新型蒸馏算法 FastDFKD,数据合成与现有的生成方法相比,可以实现 10 倍的加速,与非生成方法相比,甚至可以达到 100 倍以 ...

  5. 加速100倍,性能媲美SOTA!浙大提出无数据知识蒸馏新方法FastDFKD

    来源:机器之心 本文共2400字,建议阅读5分钟 本文为你介绍知识蒸馏的新方法. 在无法获取到原始训练数据的情况下,你可以尝试一下这种新型蒸馏算法 FastDFKD,数据合成与现有的生成方法相比,可以 ...

  6. 知识图谱最新权威综述论文解读:时序知识图谱部分

    从最近一两年有关知识图谱的顶会论文中可以发现,越来越多的国内外研究者开始关注动态时序知识图谱,可见时序知识图谱已经成为了一大研究趋势,相信之后会有更多相关研究出来.因此,这期我们对综述论文的时序知识图 ...

  7. 加速100倍,性能媲美SOTA,浙大提出无数据知识蒸馏新方法FastDFKD

    点击上方"迈微AI研习社",选择"星标★"公众号 重磅干货,第一时间送达 选自|机器之心 在无法获取到原始训练数据的情况下,你可以尝试一下这种新型蒸馏算法 Fa ...

  8. 【李宏毅2020 ML/DL】P51 Network Compression - Knowledge Distillation | 知识蒸馏两大流派

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  9. 直播预告 | AAAI 2022论文解读:融入知识图谱的分子对比学习

    「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...

最新文章

  1. 切糕[HNOI2013]
  2. SOA和SaaS的区别
  3. php打印负载函数、Linux awk打印负载
  4. Codeforces 864E - Fire(dp)
  5. 【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写
  6. Redis深入浅出----演讲
  7. 断点运行的参数_利用 AicLaunchAdminProcess 参数污染 bypass UAC
  8. 判断一个字符串(str)是否以指定的字符串(target)结尾。 如果是,返回true;如果不是,返回false。...
  9. ZIP压缩输入/输出流
  10. 手工画图和计算机画图的内在联系,工程制图与计算机绘图教案10-11-1
  11. linux 解决内存不足问题(设置虚拟内存)
  12. JS基础学习--第一周
  13. IntelliJ IDEA自动引入jar包
  14. 【matlab】把大写字母转换成小写,小写转大写,否则不变
  15. 互联网单点登录集成方案
  16. 2018CVPR_Future Frame Prediction for Anomaly Detection – A New Baseline
  17. 浅析网络犯罪如何取证
  18. EXCEL_VBA_抱歉,无法找到…….xlam。是否可能被移动、重命名或删除?
  19. 天合光能将进行股东投票决议退市事宜
  20. 东莞面包车狂奔伤多人 10余警车围堵开枪撞停

热门文章

  1. ASP.NET MVC 实现跨域请求的两种形式
  2. node-webkit File Dialog
  3. 判断101-200之间有多少个素数,并输出所有素数(C)
  4. C++基础知识学习笔记
  5. getElementById 和 getElementByName的区别
  6. elk集群配置配置文件中节点数配多少
  7. php artisan 命令列表
  8. JAVA -Xms -Xmx -XX:PermSize -XX:MaxPermSize 区别
  9. Selenium2Library关键字(1)
  10. 白名单 权限认证方法