分形网络结构——FractalNet: Ultra-Deep Neural Networks without Residuals论文笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wspba/article/details/73251731

论文地址:FractalNet: Ultra-Deep Neural Networks without Residuals
本文地址:http://blog.csdn.net/wspba/article/details/73251731

前言

自从ResNet提出以来,倍受人们的追捧,在ResNet基础上延伸出来的模型结构越来越多,如:Wide ResNet、ResNet in ResNet、Stochastic Depth ResNet等等,都取得了非常好的效果,而Residual的结构也被认为对于构建极深网络非常重要的结构。而本文,提出了一种新的分形网络结构,它的提出就是为了证明Residual对于极深网络并不是必须的,它通过一种分形的结构,达到了类似于教师-学生机制、深度监督的效果,同样取得了非常好的效果。虽然这种方法在目前来说用的比较少,但是我觉得它的这种思路是非常值得学习的。

Fractal

Fractal,分形,来自于几何学。所谓分形就是从多个层次、多个角度、多个组成成分来共同解决一个问题。而今天要讲的FractalNet就是一个这样的结构,它通过多个不同深度的网络的组合,来共同提到模型的效果。按照作者的话,浅层提供更迅速的回答、深层提供更准确的回答。FractalNet的结构可以看成由多个以下模块组成:
这里写图片描述
我们可以看到每一个Fractal的模块,实际上就是由多个浅层和深层的联合而成,层的深度成2的指数型增长。不同深度的输出进行联合时采用的不是ResNet中使用的加法,而是一个求均值的操作。这样做的目的实际是由于每个联合层的输入的个数可能不同,求均值的话可能起到一个类似于归一化的效果。

其实这么看来,你可能会觉得,和ResNet在本质上也没有多大的区别嘛,作者有必要这么大张旗鼓的声称自己和ResNet无关吗。确实这么一看,就像是Residual Block在宽度和深度上进行了延伸,以前单一的shortcut connection变成了复杂的connection。如果你只看到这里那么你就错了,因为这篇文章中最重要的不是它的模型结构,而是它的训练学习机制:Drop Path。

Drop Path

说道Drop out,可能大家都不陌生,一般用来使得神经元随机失活,来减少模型的过拟合。那么这个Drop Path又是个啥?其实Drop Path和Drop out很类似,只不过它不是让神经元随机失活,而是让路径随机失活。也就是说在多个不同深度的层进行联合时,模型会以一个比例随机的让某些路径的输入关闭,但最少保证有一个输入。那么这么做究竟有什么好处呢。

第一、减少过拟合。
第二、强化每条路径的输出。
第三、是作者重点提出,也是我认为非常值得学习的一点,那就是不同路径的联合,在Drop Path的机制下,起到了一种简单的教师—学生的学习方式。也就是说,如果某一条路径学到了对最终分类起到非常重要的特征时,假如在某一次迭代中,该路径被关闭掉了,那么通过loss 的反向传播中,可能就会指导和该路径进行联合的另一条路径也学到这种重要的特征。那么通过模型内部的这种不断的教师—学生的学习方式,不仅可以提高整个模型的效果,并且当提取出其中的任意一条路径出来单独使用时,也能够达到非常好的效果。作者在后面也证明了,对于plain Network,在深度达到40层以上时会出现退化的问题,但是在FractalNet中完全不会,从整个模型中提出其中最深的路径来单独使用时可以达到和整个FractalNet接近的效果。

作者一共使用了两种Drop Path方式:
Local:在每一个联合层以固定几率舍弃每个输入,但保证至少保留一个输入。
Global:在整个网络中随机只保留一条完整的路径进行学习。
这里写图片描述

效果

  1. FractalNet在Cifar-10和Cifar-100数据集上达到了state of the art的效果,并且提取其中最深的一列出来也能够达到与整个模型接近的性能。
    这里写图片描述

  2. 40层以上的Plain Network出现了退化的问题,但是FractalNet中提取出来的单列网络则并不会出现这种问题,这也证明了作者所提出的Drop Path的作用。
    这里写图片描述

总结

这就是这篇文章大概提到的几点内容,感兴趣的同学可以阅读原文进行学习,作者也在它的GitHub上提供除了Caffe实现的源码(https://github.com/gustavla/fractalnet),不过遗憾的是,作者提供的源码中只有Local Drop Path的实现,而并没有Global的,因此本人在该源码的基础上很难复现出论文中的结果,尤其是在作者的第二个实验中,对于深层的网络,提取出最深的路径也很难达到很好的效果,这很可能就是Global无法实现所造成的。作者在他的GitHub上提到了:There is still no public release of local+global, but we suggest implementing this through tying weights.本人能力有限,很难理解到作者的精髓所在,所以也希望能够集思广益,和大家一起来学习和交流。

猜你喜欢

转载自blog.csdn.net/wspba/article/details/73251731