文 | 小伟
编 | 小轶

导师: 小伟,听说你对知识蒸馏比较了解,你来给我说说知识蒸馏有什么用?
我: 知识蒸馏是一种很典型的模型压缩的方法,我们可以用它来有效地从大型教师模型学习小型学生模型,并且学生模型的性能也很不错。
导师: 那它既然叫知识蒸馏,你怎么知道学生模型是不是真的充分学到了教师模型的知识呢?
我: 这不简单嘛,学生模型的效果好不就说明学到充足的知识了。
导师:一看你就不关心最新的学术进展,天天是不是忙着吃鸡了!最近NYU和Google联合发了一篇文章,仔细探索了知识蒸馏中学生模型的精度和蒸馏效果之间的关系,快去读一读!
我: 好嘞~

论文标题:
Does Knowledge Distillation Really Work?

论文地址:
https://arxiv.org/pdf/2106.05945

arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0825】 下载论文PDF~

随着自然语言处理进入了预训练模型的时代,模型的规模也在极速增长,GPT-3甚至有1750亿参数。如何在资源有限的情况下部署使用这些庞大的模型是一个很大的挑战。

目前知识蒸馏在解决这一问题中的方法中占据了重要的地位。我们可以通过知识蒸馏来学习容易使用的小型学生模型,但是它真的可以起到蒸馏教师模型知识的效果吗?在这篇文章中,作者对这一问题进行了详细的探索与解答,下面我们就来一探究竟。

概要

尽管目前有很多知识蒸馏相关的研究,但它们主要集中于如何提高学生模型的泛化性(generalization),往往忽视了学生模型的预测和教师模型的预测的匹配程度(fidelity),我们可以简单称之为学生模型的匹配度。相比泛化性,匹配度更好的反映了学生模型蒸馏到了多少教师模型含有的知识。

本文对这两种概念做了详细的解释与区分,并且指出获得良好的匹配度对学生模型来说往往是很困难的。

基于此现象,作者探索了两种可能导致这种困难的原因:

  • Identifiability: 蒸馏数据不够充足,所以在训练数据上学生-教师预测可以匹配并不意味着在测试数据上也可以匹配。

  • Optimization: 我们不能很好地解决蒸馏优化问题,所以不管是在训练数据还是测试数据上,学生模型的匹配度都比较低。

为什么需要匹配度?

之前的研究已经揭示了知识蒸馏通常会提高学生模型的泛化能力,所以我们为什么还要关心学生模型的匹配度呢?

  • 首先是学生模型的泛化性能和教师模型的泛化性能往往有比较大的差距,提高匹配度是消除学生和教师泛化性能差异最显而易见的方法。

  • 其次良好的学生模型匹配度可以提高知识蒸馏的可解释性可信赖性

  • 最后,将匹配度和泛化性解耦可以帮助更好的理解知识蒸馏是怎么工作的以及如何在各种应用程序中更好的利用它

学生模型的匹配度高吗?

作者使用3个ResNet-56网络的集成来作为教师模型,使用单个的ResNet-56网络来作为学生模型进行知识蒸馏。

如Figure 1(b)显示,学生模型和教师模型的预测之前有着显著的差距(Low Test Agreement),也就是低匹配度

导致低匹配度的原因

学生模型的匹配度比较差,是什么原因导致的呢?

作者给出了两个可能的原因,并进行了相应的探索与验证。

首先可能是蒸馏数据不够充足

作者设计实验探索了在蒸馏过程中使用不同的数据增强策略是否可以提高学生模型的匹配度。

如Figure 3所示,实验结果证明虽然数据增强在缩小学生-教师模型预测差距上是有用的,但它带来的改进很小,所以蒸馏数据不足不是导致低匹配度的主要原因

既然蒸馏数据数量不足不是主要原因,那么会不会是蒸馏数据的分布偏移导致的呢?

作者同样设计了实验来验证这一猜想。Figure 4中的实验结果显示调整蒸馏数据的分布可以带来微小的改进,这也证明了数据的错误选择不是导致低匹配度的主要原因

其次可能是蒸馏过程中的优化有问题

既然数据不够充足或者分布有偏移不是主要原因,那么会不会是因为学生模型本来就没有充分的学习训练集,导致即使是在训练数据上学生-教师预测的差异都很大呢?

为了验证这一猜想,作者使用ResNet-56以及CIFAR-100设计了简单的蒸馏实验。

如Figure 5所示,当使用广泛的数据增强策略时,即使是在训练集上,学生模型的匹配度也会比较低。这印证了我们的猜想,学生模型没有充分的学习训练数据

那么为什么即使是在训练集上,学生-教师模型预测的匹配度都很低呢?原因其实很简单,知识蒸馏的优化会收敛于次优解,从而导致低匹配度。

总结

作者总结了本文的关键发现:

  • 学生模型的泛化性能(generalization)和匹配度(fidelity)的变化趋势并不一致

  • 学生模型的匹配度(fidelity)和蒸馏的校准(calibration)有很大的关联

  • 知识蒸馏过程中的优化是很困难的,这也是导致低匹配度的主要原因

  • 蒸馏优化的复杂度以及蒸馏数据的质量之间存在均衡(trade-off)

Final Question

现在回到我们最开始的问题,知识蒸馏真的有用吗?

毫无疑问,它是有用的,因为它通常可以提高学生模型的泛化性能;同时它也是没用的,因为它总是将很有限的知识从教师传递到学生,这与它的名字知识蒸馏相去甚远。所以我们是不是可以改称它为knowledge enhancement?

小伙伴,你们怎么看呢?

最后的最后,

导师: 小伙子不错啊,论文读得又快又精准,这周的Reading Group就交给你了。
我: 呜呜呜,又是我,滚去读论文了~

寻求报道、约稿、文案投放:

添加微信xixiaoyao-1,备注“商务合作”

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

NYU Google: 知识蒸馏无处不在,但它真的有用吗?相关推荐

  1. 集成、知识蒸馏和自蒸馏有区别?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨梦佳 来源丨智源社区 编辑丨极市平台 集成(Ensemble, ...

  2. 深度学习三大谜团:集成、知识蒸馏和自蒸馏

    编译:梦佳 校对:周寅张皓 集成(Ensemble,又称模型平均)是一种「古老」而强大的方法.只需要对同一个训练数据集上,几个独立训练的神经网络的输出,简单地求平均,便可以获得比原有模型更高的性能.甚 ...

  3. 【论文解读】Knowledge Review:知识蒸馏新解法

    今天介绍一篇我司的文章Distilling Knowledge via Knowledge Review(缩写为KR),提出知识蒸馏的新解法. 之前在知乎回答过一个知识蒸馏的问题,为何感觉" ...

  4. 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...

    导读:本文将介绍在广告行业中自然语言处理和推荐系统实践.本文主要分享从理论到实战知识蒸馏,对知识蒸馏感兴趣的小伙伴可以一起沟通交流. 摘要:本篇主要分享从理论到实战知识蒸馏.首先讲了下为什么要学习知识 ...

  5. Knowledge Review:超越知识蒸馏,Student上分新玩法!

    文 | 陀飞轮@知乎 今天介绍一篇我司的文章Distilling Knowledge via Knowledge Review(缩写为KR),提出知识蒸馏的新解法. 之前在知乎回答过一个知识蒸馏的问题 ...

  6. 联邦知识蒸馏概述与思考(续)

    关注公众号,发现CV技术之美 前文([科普]联邦知识蒸馏概述与思考)提到知识蒸馏是一种模型压缩方法,通过利用复杂模型(Teacher Model)强大的表征学习能力帮助简单模型(Student Mod ...

  7. 论文解读 Search to Distill: Pearls are Everywhere but not the Eyes,神经网络架构搜索+知识蒸馏

    目录 Search to Distill: Pearls are Everywhere but not the Eyes Motivation Method Experiments 结论 Search ...

  8. 使用PyTorch进行知识蒸馏的代码示例

    随着机器学习模型的复杂性和能力不断增加.提高大型复杂模型在小数据集性能的一种有效技术是知识蒸馏,它包括训练一个更小.更有效的模型来模仿一个更大的"教师"模型的行为. 在本文中,我们 ...

  9. 知乎搜索文本相关性与知识蒸馏

    分享嘉宾:申站 知乎 算法工程师 编辑整理:许宴铭 出品平台:DataFunTalk 导读:大家好,我是申站,知乎搜索团队的算法工程师.今天给大家分享下知乎搜索中文本相关性和知识蒸馏的工作实践,主要内 ...

最新文章

  1. 关于 TStringList.Assign - 回复 u9cm 的问题
  2. java get不支持_java – HTTP Get:只下载头文件? (HEAD不支持)
  3. c语言visit函数指针,C++中的函数指针总结
  4. 老公和老婆的15个关于......
  5. 【论文解读】PFLD:高精度实时人脸关键点检测算法
  6. 向量召回 MIND多兴趣双塔模型
  7. 企业级项目实战讲解!javamap排序规则
  8. Arduino笔记-使用RFID-RC522读取IC卡卡号
  9. 数据结构、算法及应用 课内模板整理
  10. NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
  11. java 多线程 举例,Java多线程简单举例
  12. win10 自带工具生成 MD5 哈希码
  13. matlab封装的模块,matlab模块封装
  14. Oracle数据库怎么调大字体,CFree怎么调大字体 设置字体大小的方法
  15. 【网络基础】第01章 黑客攻防常用命令
  16. vue3 + TypeScript + vant +pinia 实现网易云音乐播放器
  17. 一篇文章读懂什么是大数据
  18. informatica使用问题汇总
  19. 数据结构上机——希尔排序(含监视哨版本)
  20. 字符串copy函数技术推演

热门文章

  1. Spring3系列12-Spring AOP AspectJ
  2. '[linux下tomcat 配置
  3. Mysql数据库存储原理
  4. Linux kernel之SMP初始化
  5. 第4章 原子操作 第二节
  6. RK3288/RK3399 CPU定频方法
  7. 每日一题(32)—— 联合体大小
  8. linux下mysql主从同步是主从i/o线程显示为no_mysql主从同步IO线程NO
  9. php 反射 视频教程,php 实现反射
  10. react父子组件通信案例