近日,CMU 的研究人员在 arXiv 上放出了一份技术报告,介绍他们如何通过蒸馏(distillation)训练一个强大的小模型。所提出方法使用相同模型结构和输入图片大小的前提下,在 ImageNet 上的性能远超之前 state-of-the-art 的 FixRes 2.5% 以上,甚至超过了魔改结构的 ResNeSt 的结果。这也是第一个能在不改变 ResNet-50 网络结构和不使用外部训练数据的前提下,将 ImageNet Top-1 精度提升到 80% 以上的工作,同时对训练要求也不是很高,一台 8 卡 TITAN Xp 就可以训练了。论文标题:
MEAL V2: Boosting Vanilla ResNet-50 to 80%+ Top-1 Accuracy on ImageNet without Tricks
论文链接:
https://arxiv.org/abs/2009.08453
代码链接:
https://github.com/szq0214/MEAL-V2
在介绍这个工作之前,首先要简单回顾一下它的最初版本 MEAL,其基本的也是核心的思想是将多个 teacher 网络的知识通过蒸馏的方式压缩进一个 student 里面,同时它提出使用辨别器(discriminators)作为正则模块(regularization)防止 student 的输出跟 teacher 过于相像,从而防止 student 过拟合到训练集上。MEAL 当时在 ImageNet 上就取得了 78.21% 的结果,超过原版 ResNet-50 1.7% 个点。MEAL V2 跟 MEAL 最大的区别在于监督信号的产生方式,如下图:具体而言,MEAL 在每次训练迭代的时候会通过一个 teacher 选择模块随机选择一个teacher产生监督信号,而在 V2 中,这个模块被替换成所有 teacher 的集成,因此每次迭代 student 接收到的监督信号将会更加强大。同时,V2 简化了 V1 里面的中间层 loss,只保留最后一个 KL-loss 和辨别器,使得整个框架变得更加简单,直观和易用。通常我们在训练网络的时候会用到很多技巧(tricks),但是在 MEAL V2 中,这些都是不需要的,作者罗列了他们使用到的和未使用到的一些训练手段,如下表格所示:从上面表格可以看出来一些常用的数据增强和学习率调节他们都没用到,说明这个框架非常鲁棒和强大,同时也说明了这个框架其实还有很大的提升空间,比如作者进一步加入 CutMix 数据增强的方法来训练,性能得到了进一步的提升。作者在论文中展示了如何提升不同网络结构的性能,包括 MobileNet V3,EfficientNet-B0 等等,从表格 3 我们可以看到基本在这些网络上都能有 2 个点以上的提升,所以 MEAL V2 整个框架其实可以看成是一个后增强的过程,即我们可以先设计和训练一个自己的模型,然后放入 MEAL V2 的框架中进一步提升它的性能。文章最后作者给出了一些相关的讨论,包括为什么在做蒸馏的时候不需要使用 hard label,辨别器如何帮助优化过程等等,有兴趣的同学可以去看他们的论文原文,这里就不一一赘述了。最后我们不得不感叹一下,一个四五年前提出的 ResNet-50 网络居然还能有如此巨大的潜力,性能可以被提升到超越最近很多新设计的网络结构,作者还发现他们最强的 student 模型的性能其实跟使用的 teacher 已经非常接近了,这是一个非常神奇的地方,因为 student 的网络规模要比 teacher 小很多,但是它居然可以容纳全部 teacher 的知识(knowledge),这也是一个值得继续讨论和研究的地方。同时我们也不得不反思一下,是否一些新设计的网络结构真的有那么大的进步和贡献,毕竟从 MEAL V2 的实验结果来看,到目前为止原生的 ResNet-50 的性能都还没有完全饱和,这也促使我们更理性、客观的去评价其他一些看上去性能很好的模型结构。最后,Twitter 大佬 Dmytro Mishkin 也转发了这篇文章,同时还有一些有意思的讨论,关注他的人包括深度学习第四巨头 Andrew Ng,英伟达 AI 和机器学习负责人,同时也是加州理工大学教授的 Anima Anandkumar,还有 timm 库的作者 Ross Wightman 等等。同时上面还有一些比较有意思的评论,比如有个 Twitter 网友就说 “I wish I had an ensemble of giant pre-trained teachers like this model in high school.” 真是太有爱了。