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

论文简介

该论文探讨了一种与模型蒸馏(model distillation)相关却不同的模型---即相互学习(mutual learning)。 蒸馏从一个强大的大型预训练教师网络开始,并向未经训练的小型学生网络进行单向知识转移。 相反,在相互学习中,我们从一群未经训练的学生网络开始,他们同时学习一起解决任务。 具体来说,每个学生网络都有两个的损失函数:一种传统的监督性损失函数,以及一种模仿性的损失函数(mimicry loss),使每个学生的后验概率分布与其他学生的类别概率保持一致。

通过这种方式进行训练,结果表明,在这种基于同伴教学(peer-teaching)的情景中,每个学生的学习都比在传统的监督学习方案中单独学习要好得多。 此外,以这种方式训练的学生网络比来自更大的预训练教师的传统蒸馏训练的学生网络获得更好的结果。论文实验表明,各种网络架构可以从相互学习中受益,并在CIFAR-100识别和Market-1501 ReID 数据集上获得令人信服的结果。

模型设计

损失函数

损失函数 函数设计
传统监督损失函数 softmax + 交叉熵损失函数
模仿性的损失函数 softmax + KL散度函数

[两个网络]

[多个网络]

实验结果

实验网络

Cifar-100 实验

[实验设置]

paras values
optimizer SGD with Nesterov
base lr 0.1
momentum 0.9
batch size 64
epoch 200
note The learning rate dropped by 0.1 every 60 epochs

[实验结果]

[实验结论]

  1. 与独立学习相比, ResNet-32,MobileNet 和 WRN-28-10各种不同网络都在DML提高了性能。
  2. 容量较小的网络(ResNet-32和MobileNet)通常可以从DML获取更大的提升。
  3. 虽然WRN-28-10是一个比MobileNet或ResNet-32大得多的网络,但它仍然受益于与较小的网络一起训练。
  4. 与独立学习相比,使用DML训练一组大型网络(WRN-28-10)仍然是有益的。 因此,与模式蒸馏的传统智慧相反,我们看到一个大型的预训练的教师网络不是必不可少的.

Market-1501 实验结果

[实验设置]

每个MobileNet相互学习DML都以双网络方式中进行训练,并报告两个网络的平均性能

paras values
optimizer Adam
β1/β2 0.5/0.999
base lr 0.0002
momentum 0.9
batch size 16
iterations 100,000

[实验结果]

[实验结论]

可以看到,与独立学习相比, 无论是否在ImageNet上进行预训练,DML极大地提高了MobileNet的性能。还可以看出,用两个MobileNets训练的所提出的DML方法的性能显着优于先前的最先进的深度学习方法。

与模型蒸馏比较

[实验结果]

[实验结论]
Table4 将DML与模型蒸馏进行了比较,其中教师网络(Net1)经过预先训练,并为学生网络(Net2)提供固定的后验概率目标。

  1. 正如预期的那样,与独立学习相比,来自强大的预训练教师网络的常规蒸馏方法确实提高了学生网络的表现(Net1蒸馏Net2)
  2. 与蒸馏相比,DML将两个网络一起训练, 两个网络都得到了改进。这意味着在相互学习的过程中,通过与先验未经训练的学生的互动,教师角色的网络实际上变得比预先训练的教师更好。

相互学习的网络与性能联系

[实验设置]

之前实验研究以2名学生队列为例。在这个实验中,论文研究了DML如何与队列中的更多学生进行互动。图2(a)显示了Market-1501上的结果,其中DML训练增加了MobileNets的群组大小。图中显示了平均mAP以及标准偏差。

[实验结果]

[实验结论]

从图2(a)可以看出,平均单一网络的mAP性能随着DML队列中的网络数量的增加而增加。这表明,与越来越多的同龄人一起学习时,学生的泛化能力得到提高。从标准偏差中我们也可以看到,随着DML网络数量的增加,结果越来越稳定。

训练多个网络时的一种常用技术是将它们组合为一个整体并进行组合预测。在图2(b)中,我们使用与图2(a)相同的模型,但基于整体进行预测, 在整体上(基于所有成员的连锁特征进行匹配)而不是报告每个人的平均预测。从结果我们可以看出,集合预测优于预期的各个网络预测(图2 (b)vs(a).

Deep Mutual Learning的更多相关文章

  1. 【论文阅读】Deep Mutual Learning

    文章:Deep Mutual Learning 出自CVPR2017(18年最佳学生论文) 文章链接:https://arxiv.org/abs/1706.00384 代码链接:https://git ...

  2. Paper | Deep Mutual Learning

    目录 1. 动机详述和方法简介 2. 相关工作 3. 方法 3.1 Formulation 3.2 实现 3.3 弱监督学习 4. 实验 4.1 基本实验 4.2 深入实验 [算法和公式很simple ...

  3. 论文笔记: Mutual Learning to Adapt for Joint Human Parsing and Pose Estimation

    Mutual Learning to Adapt for Joint Human Parsing and Pose Estimation 2018-11-03 09:58:58 Paper: http ...

  4. Deep Residual Learning

    最近在做一个分类的任务,输入为3通道车型图片,输出要求将这些图片对车型进行分类,最后分类类别总共是30个. 开始是试用了实验室师姐的方法采用了VGGNet的模型对车型进行分类,据之前得实验结果是训练后 ...

  5. (转) Playing FPS games with deep reinforcement learning

    Playing FPS games with deep reinforcement learning 博文转自:https://blog.acolyer.org/2016/11/23/playing- ...

  6. (zhuan) Deep Reinforcement Learning Papers

    Deep Reinforcement Learning Papers A list of recent papers regarding deep reinforcement learning. Th ...

  7. Learning Roadmap of Deep Reinforcement Learning

    1. 知乎上关于DQN入门的系列文章 1.1 DQN 从入门到放弃 DQN 从入门到放弃1 DQN与增强学习 DQN 从入门到放弃2 增强学习与MDP DQN 从入门到放弃3 价值函数与Bellman ...

  8. Open source packages on Deep Reinforcement Learning

    智能车 self driving car + 强化学习 reinforcement learning + 神经网络 模拟 https://github.com/MorvanZhou/my_resear ...

  9. (转) Deep Reinforcement Learning: Playing a Racing Game

    Byte Tank Posts Archive Deep Reinforcement Learning: Playing a Racing Game OCT 6TH, 2016 Agent playi ...

随机推荐

  1. 小小知识点(十一)——MATLAB中fftshift的作用

  2. python新手菜鸟之基础篇

    s=0 for i in range(1,101): s += i else: print(s) def main(n): '''打印菱形图形''' for i in range(n): print( ...

  3. yarn 在Vue框架中的常用命令

    初始化项目 yarn add init 安装vue yarn add vue 安装webpack,webpack-dev-server(是一个小型的Node.js Express服务器) yarn a ...

  4. canvas学习笔记,实用知识点总结(上)

    本博客是本人日常学习笔记,作为重要知识点的总结记录,随笔风格可能更倾向于个人的学习习惯和方式,若对您有帮助十分荣幸,若存在问题欢迎互相学习探讨,前端小白一枚在此恭候. 一.基本使用规则 1.创建画布 ...

  5. 浅拷贝(Shallow Copy) VS 深拷贝(Deep Copy)

    首先,深拷贝和浅拷贝针对的是对象类型(对象,数组,函数) 浅拷贝指的是只是拷贝了对象的引用地址,彼此之间高耦合,一个改变,另一个可能也随之改变: 深拷贝是指只是完整的将变量的值拷贝过来,是一个新的对象 ...

  6. OrCAD原理图中怎么导出FPGA的引脚分配

    流程 (1)选择tool下的export FPGA: (2)选择厂商,选择器件型号.选择生成文件类型. 以上.

  7. 特殊计数序列——第二类斯特林(stirling)数

    计算式 \[ S(n,m)=S(n-1,m-1)+mS(n,m) \] \(S(0,0)=1,S(i,0)=0(i>0)\) 组合意义 将\(n\)个不可分辨的小球放入\(m\)个不可分辨的盒子 ...

  8. 如何规避“Flash中国特供版”

    如何规避“Flash中国特供版” 来源  http://blog.sina.com.cn/s/blog_4e1bc3e90102xn0k.html 浏览国内网站,尤其是一些很重要或者很常用,但是很落后 ...

  9. Python的开发之路

    一.python入门 二.基本数据类型 三.输入与输出 四.基本运算符 五 .流程控制之if判断 六.流程控制之while循环 七.流程控制之for循环 八.数据类型与内置方法 九.文件的处理 十.字 ...

  10. Linux路径与Win路径的转换

    cygpath $ cygpath -p "$WinPath" -u LinuxPath $ cygpath -p "$LinuxPath" -w WinPat ...