Press "Enter" to skip to content

利用Group Conv在单个CNN中实现集成学习

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

 

 

论文:Group Ensemble: Learning an Ensemble of ConvNets in a single ConvNet

 

地址:https://arxiv.org/pdf/2007.00649.pdf

 

0. 动机

 

集成学习通过融合多个模型得到更准确的结果,在深度神经网络模型上应用集成学习可以提高网络性能。

 

通常来讲,在深度神经网络中使用的集成策略可以分为2类:

 

其一为显式的集成策略(explicit ensembling strategy),训练多个模型,通过专家委员会(a committee of experts)或其他方法得到最终结果。由于需要使用多个神经网络模型,这种方法计算量比较大。

 

其二为隐式的集成策略(implicit ensembling strategy),这种方法又能分为2类:

 

在单个模型中引入随机操作模仿集成,比如DropOut、DropConnect、DropBlock、StochDepth、Shake-Shake;

 

在单个模型中使用多条路径模仿集成,比如ResNet、ResNeXt、DenseNet、Inception系列。

 

作者提出了Group Ensemble方法, 在单个模型中融合显式和隐式的集成方法,能够在几乎不提升原模型计算需求的基础上提高模型性能。

 

1. Group Ensemble

 

一些研究表明,对同一架构的网络使用不同方法(比如改变权重初始值、改变数据集的划分策略)训练多次,得到的多个网络中浅层的表达很类似;甚至不同的网络结构,比如VGG和ResNet系列网络,基于同一任务训练,得到的网络浅层表达也很类似。基于上述发现,作者认为,可以通过 共享浅层网络、独立多个深层网络来达到显式集成的效果 ,以减少计算量。

 

作者提出了名为GENet(Group Ensemble Network)的网络结构,用于在单个神经网络中进行显示集成学习,如下图所示:

 

 

从上图中可以看出,作者使用Group卷积的形式达到“独立多个深层网络”的效果,每个分类器的输出结果融合得到最终结果。

 

多个 独立的 深层网络提供了用于集成学习的多个分类器,并且引入了多个分类器的差异性;共享浅层网络,相比于传统的使用多个模型集成的方法,有效地减少了计算量。多个独立的深层网络使用同一个浅层网络,因此共享的浅层网络也可以理解为对共享参数的一种正则化手段。

 

假设深层的Group卷积中共有n个组,整个模型的损失函数为:

 

上式中的表示第m个Group卷积的损失函数。

 

推理时,这些独立的深层网络分别输出各自的结果,通过取平均值得到整个网络的最终结果。

 

2. Aggregation Strategies

 

作者介绍了3种训练时给样本分配权重的方法,它们分别为Group Averaging、Group Wagging、Group Boosting,可以使用这些方法提高深层网络的多样性,达到更好的集成效果。

 

第m组的损失函数可以表示为:

 

上式中,i表示样本的索引,b 表示 batch size,表示第i个样本的损失,表示第i个样本对应的权重。下图说明了该公式的含义:

 

 

Group Averaging、Group Wagging、Group Boosting这3种方法决定了上式中的取值策略。

 

Group Averaging:所有的取值为1,不同组的多样性由它们的权重初始值、各自的损失和各自的反向传播决定。

 

Group Wagging:是服从均匀分布或者高斯分布的随机值,若服从高斯分布,表示为。随机选取能在样本层面增加不同组的多样性。

 

Group Boosting 当前组的取决于上一组对该样本的识别效果,当上一组对该样本识别错误时,在当前组中取较大值,即让当前组重点关注上一组识别错误的样本。为了在训练时就能得到某个组对样本的识别效果,作者使用了online boosting方法,定义在第m组中某个样本的权重为:

 

上式中的为第m-1组对该样本的识别概率,为参数。

 

这三种方法的示意图如下所示:

 

 

作者探讨了多个组之间保持独立性对于最终分类结果的影响:

 

假设一个简单的2分类任务,多个模型的输出服从于同样的正态分布,即

 

上式中表示对于某个样本第i个模型输出的正确类别的预测得分,n表示模型数量,和分别表示均值和标准差。

 

如下图所示:

 

 

左上图为单个模型的输出分布,右上图为2个独立模型的输出分布,左下图为4个独立模型的输出分布,从这3个图可以看出,融合多个模型的输出结果会更准确,且模型个数越多越好。

 

右下图为2个相关系数的模型的输出分布,对比右上图和右下图可以看出,模型越独立,融合后输出结果越准确。因此可知保持多个模型独立的重要性。

 

3. 实验

 

3.1 分类任务

 

作者在CIFAR和ImageNet数据集上测试GENet。使用Group Averaging策略分配样本权重,使用Pytorch实现。

 

对于CIFAR数据集,使用ResNet-29和ResNeXt-29作为Backbone,网络最后一层为用于分类的FC层,使用center-crop的方法在验证集上测试。在CIFAR-10和CIFAR-100数据集上的Top1错误率如下图所示:

 

 

上图中的Ensemble表示使用传统的多个模型集成方法,“2x”和“3x”分别表示使用2个和3个模型。从上图中可以看出GENet保持和baseline基本一致的计算量,性能与传统的模型集成方法接近。

 

对于ImageNet数据集,使用ResNet-50、ResNeXt-50、ResNeXt-101作为Backbone,在验证集上使用224×224尺寸的center-crop进行测试,错误率如下图所示:

 

 

从上图中可以看出,GENet和传统的模型集成方法性能接近,但是有更少的参数量和计算需求。

 

3.2 目标检测任务

 

在COCO2017数据集上使用Faster R-CNN测试,Backbone为ResNet50并且使用了FPN。保持Faster R-CNN中的RPN不变,只将R-CNN head部分改为group ensemble形式,测试结果如下图所示:

 

 

从上图中可以看出,使用group ensemble能够在保持参数量不变的前提下达到多个模型集成的性能,验证了GENet对baseline性能的提升,以及在不同领域的有效性。

 

4. 总结

 

提出了GENet,通过共用浅层网络、独立深层网络的形式在单个CNN中实现显式模型集成;

 

说明了保持多组网络独立性的意义,以及通过aggregation strategy提高多组网络独立性和多样性的方法;

 

通过实验证明了GENet在几乎不改变baseline计算需求的前提下提升性能。

 

仅用于学习交流!

 

END

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注