论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》

核心思想

  本文提出一种基于集成学习的小样本学习算法(Robust-dist),集成学习顾名思义就是将多个模型集成在一起,根据多个模型输出的结果,通过投票法或者平均法计算出最终的结果。集成学习能够消除模型之间的分歧,假设10个模型有7个都预测这幅图片是只猫,那么这幅图片是猫的概率就很高了。实验表明,即使每个模型的性能都一般,但多个模型集成后其性能也会有明显提升,正所谓三个臭皮匠顶个诸葛亮。集成学习最重要的地方在于如何在训练时处理多个模型之间的关系,一方面我们希望他们之间要有足够的多样性,否则10个一样的模型集成在一起和一个模型的效果是一样的,就失去了集成学习的意义了。另一方面,我们还希望他们在预测正确结果方面尽可能地一致,否则十个模型给出十个不同的结果,那我们应该相信谁呢?模型间的关系可以由下图来表示
论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》
  第一个图表示二者之间是合作(Cooperation)的关系,预测的结果无论是属于正确结果的概率(绿色)还是属于错误结果的概率(红色)都是比较一致的;第二幅图表示二者之间是独立(Independent)的关系,两个模型预测的结果之间不存在明显的关系;第三个图表示二者之间是多样性(Diversity)的关系,就是除了正确结果,预测为其他结果的概率差异明显。
  对于每一个基础模型,本文选择了基于度量学习的小样本分类器,类似于PN,每个模型的初始化参数和随机种子都不同,且每个模型都是同时地并行地独立地进行训练,每个模型地损失函数如下
论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》
mm表示数据集中的样本数量。但为了控制模型之间的关系,因此在训练时必须通过损失函数对其进行引导,改进后集成模型的损失函数如下
论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》
KK表示基础模型的数目,通过设计额外的损失函数ψ\psi就能引导各个模型往多样性方向发展,还是往合作方向发展。本文对这两个方向都做了探索,首先是多样性方向,令额外的损失函数如下
论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》
p^i,p^j\hat{p}_i,\hat{p}_j分别表示模型iijj输出的属于各个类别的概率向量,这个惩罚项的目的就是怎加两个模型预测结果之间的差异性,结果越相似,则余弦相似性越大,则损失越高。实验结果表明,这个方法在模型数目较多的情况下表现较好,即使他会导致单独每个模型的性能下降,但能提高整个集成模型的效果。然后,本文又探索了合作的方向,令额外的损失函数如下
论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》
通过控制预测结果之间的对称KL散度,来引导每个模型输出的结果尽可能一致。实验结果表明这个方法在模型数目较少的情况下表现更好,而且能够提高每个模型的性能,甚至会超过集成模型的性能。但随着模型数目增多,集成效果开始下降,因为模型之间太过于相似了。看起来无论是差异性方向还是合作方向都不能完美的解决集成学习的问题,而且二者之间似乎是此消彼长的,因此要找到二者之间的一个最佳的妥协方案,本文提出一种Robustness and cooperation方案,损失函数与合作方案保持一致,但尽可能的增加模型训练时的差异性,主要通过以下几个途径:

  1. 在每次迭代时,随机地从集成模型中剔除掉几个基础模型,使网络通过不同的数据流进行学习,并降低信息传递的速度
  2. 在每个模型中都引入Dropout技术,来增加随机性
  3. 给每个模型输入同一幅图像的不同变形(颜色,尺寸),使得整个模型对图像的变形更具鲁棒性

实验结果也表明该策略取得了最佳的效果。但集成模型还存在一个问题,就是因为每次推断时都要同时计算多个模型的结果,这就导致计算量与处理时间都超过其他的算法,因此作者采用知识蒸馏(knowledge distillation)的方式训练一个新网络。关于知识蒸馏我在另一篇博客中做过介绍(点击此处查看),通俗点来说就是用我们训练好的这个复杂网络作为教师,来训练一个更简单的学生网络,使其具备与复杂网络相近的性能。蒸馏学习的损失函数如下
论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》
fwf_w表示学生网络,eye_y表示标签为yy的独热向量,l^\hat{l}表示交叉熵损失函数,TT为超参数。经过知识蒸馏后,学生网络fwf_w就能以较少的计算量,达到与集成模型fθkf_{\theta_k}接近的性能。

实现过程

网络结构

  每个基础模型采用ResNet-18结构,共20个模型进行集成。

损失函数

  见上文

创新点

  • 采用集成学习的方法降低分类器之间的分歧,提高小样本学习的效果
  • 通过设计损失函数和训练方法,在模型之间差异性和合作关系之间取得了较好的平衡
  • 通过采用知识蒸馏技术在没有明显损失模型性能的条件下,有效的降低了模型的复杂度

算法评价

  本文应该是我看到过的唯一一篇采用集成学习的方法解决小样本学习问题的文章,其中对于模型之间关系的探索还是比较有意义的,因为通常集成学习都是倾向于增加模型之间的差异性,而本文却更多的关注模型之间的合作关系。此外通过知识蒸馏来解决集成模型计算复杂的问题,也的确非常的巧妙。

如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。论文阅读笔记《Diversity with Cooperation: Ensemble Methods for Few-Shot Classification》