Wide Residual Networks
Wide Residual Networks (WRNs)是2016年被提出的基于扩展通道数学习机制的卷积神经网络。对深度卷积神经网络有了解的应该知道随着网络越深性能越好,但是训练深度卷积神经网络存在着这样子那样子的问题,如梯度消失/弥散(gradient vanishing/exploding)。当然除此之外,实验结果也表明越深的网络结构/模型带来的性能提升并不是很明显,反而会需要大量的计算资源来做支撑(具体可看ResNet系列结果)。
那WRNs究竟干了什么呢?在这之前,作者的观点是过往大家对于残差网络(Residual Networks)的研究基本都停留在了如何加深残差网络的深度和编排残差模块的内部结构,所以作者就提出能否通过增大网络结构的width来改善网络的性能的假设。也就是说希望通过使用更浅层的网络来获得跟跟深度网络媲美的准确度。
简单点说ResNet存在的问题有如下:
- He Kaiming大神设计的ResNet卷积神经网络是通过不断增加层数的传统叠加式的卷积神经网络,即使在这值终引入了bottleneck block来减少参数;
- 在训练的过程中,模型中可能只有部分模块具备很好的表征能力,这就相当于减弱了特征复用的情况;
ResNet的典型Residual Block是由两个conv 3×3构成的或者conv 1×1 -> conv 3×3 -> conv 1×1 (参看上图左边两个小图)。而WRNs则通过增加作用于同一个输入的通道数(channels)来构建模型,除此之外有一个很重要的点需要注意:WRNs的作者重新定义了如何使用Dropout来正则化继而防止模型过拟合。增加通道数获取更多的特征图跟增加层数一样都会增加网络模型种的参数量,所以需要借助一定的正则化方法(BatchNorm或者Dropout)来防止过拟合。以往的卷积神经网络Dropout都是放在一层网络的所有卷积操作之后,但是在这个实验中作者将Dropout放到了两个conv 3×3的卷积中间,并经过测试验证如此的结构设计所带来的效果要比以前的设计模式所带来的效果更好(作者之所以没使用BN(BatchNorm)是因为觉得它需要有数据增强的辅助,文中提到的另外一点说BN也并不是大多数时候都需要的,这点估计指的是可能受限于Batch大小的选择原因,这点倒是可以说得通,当然作者并不是完全没有使用BN,而是Dropout和BN都用了,BN主要放在Residual Block之间(BN-ReLU-Conv,注意这里跟以往的结构也是不一样,以往的结构都是Conv-BN-ReLU)。
图 2 WRNs网络结构
从上述的网络结构中看三个超参数:l (小写的L)、k、N。网络深度l、通道系数k、一组中有N个Residual Block。为什么要看这几个超参数呢?因为它主要影响了模型中的参数总量。假设保持某卷积层的通道数(也就是所谓的width of the network)不变,增加N层操作将会增加参数的量为:N * (kernel_size * kernel_size) * #channels。那么如果此时增加通道数,也就是k的值,那么参数的量就会呈平方增加:N * (kernel_size * kernel_size) * # channels * 2 (k=2)。咋一看就会觉得这哪里有减少计算量,反而计算量成倍的增长啊。但是作者强调GPU计算适合并行计算,所以总体来说还是computational efficiency。
结果比对:从图3的CIFAR-10实验结果可以看出一些ResNet-1202有10.2M个参数,error为7.93,反观WRN-40-4的结果要好很多,参数量也稍微少点。当然从Paper中另外一幅图也可以看出WRN的训练速度要比更深的网络ResNet-1004要快得多(快8倍的速度)
图 4 基于CIFAR-10和CIFAR-100的结果比对
图 5 训练速度比对
论文的主要几个贡献点:
- 重新定义了如何使用Dropout;
- 确实不一定要更深的网络(thin and deeper)来训练模型,WRN也可以达到相同的效果;
- BN-ReLU-CONV训练的速度要比CONV-BN-ReLU的快,且准确度更好