Wide Residual Networks (WRNs)是2016年被提出的基于扩展通道数学习机制的卷积神经网络。对深度卷积神经网络有了解的应该知道随着网络越深性能越好,但是训练深度卷积神经网络存在着这样子那样子的问题,如梯度消失/弥散(gradient vanishing/exploding)。当然除此之外,实验结果也表明越深的网络结构/模型带来的性能提升并不是很明显,反而会需要大量的计算资源来做支撑(具体可看ResNet系列结果)。

那WRNs究竟干了什么呢?在这之前,作者的观点是过往大家对于残差网络(Residual Networks)的研究基本都停留在了如何加深残差网络的深度和编排残差模块的内部结构,所以作者就提出能否通过增大网络结构的width来改善网络的性能的假设。也就是说希望通过使用更浅层的网络来获得跟跟深度网络媲美的准确度。

简单点说ResNet存在的问题有如下:

  • He Kaiming大神设计的ResNet卷积神经网络是通过不断增加层数的传统叠加式的卷积神经网络,即使在这值终引入了bottleneck block来减少参数;
  • 在训练的过程中,模型中可能只有部分模块具备很好的表征能力,这就相当于减弱了特征复用的情况;

图 1 不同的Residual Blocks

ResNet的典型Residual Block是由两个conv 3x3构成的或者conv 1x1 -> conv 3x3 -> conv 1x1 (参看上图左边两个小图)。而WRNs则通过增加作用于同一个输入的通道数(channels)来构建模型,除此之外有一个很重要的点需要注意:WRNs的作者重新定义了如何使用Dropout来正则化继而防止模型过拟合。增加通道数获取更多的特征图跟增加层数一样都会增加网络模型种的参数量,所以需要借助一定的正则化方法(BatchNorm或者Dropout)来防止过拟合。以往的卷积神经网络Dropout都是放在一层网络的所有卷积操作之后,但是在这个实验中作者将Dropout放到了两个conv 3x3的卷积中间,并经过测试验证如此的结构设计所带来的效果要比以前的设计模式所带来的效果更好(作者之所以没使用BN(BatchNorm)是因为觉得它需要有数据增强的辅助,这点我查找了些资料并没有看到出自哪里,有朋友了解的话劳烦留言告知一下。文中提到的另外一点说BN也并不是大多数时候都需要的,这点估计指的是可能受限于Batch大小的选择原因,这点倒是可以说得通,这可以看我关于BN的分析的博客,但是放在这里说不用可能会有点牵强。),当然作者并不是完全没有使用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 k对网络结构的影响(图片来源:Understanding Wide Residual Networks

结果比对:从图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的快,且准确度更好(其实BN放在哪里一直有争议,所以持怀疑态度!);

这里谈谈几点个人观点(纯粹讨论,有能解决我疑惑的朋友欢迎指出)

  • Wide ResNet的贡献点并不是很能说服人,我个人更认为它是简化版的GoogLeNet(参考Inception Module);
  • 上述的贡献的最后一点,我也说了BN放在哪里一直比较有争议,我当初做课题研究的时候也有过这个疑惑,个人认为BN的位置并不是决定训练速度的重要观点;
  • WRN的实验设置个人觉得比较有问题,其实对于ResNet普通版本(这里指非1000层以上的)来说性能比WRN没差多少,但是参数量和速度比WRN要好(这里指K>4),所以并没有太大的一个优势存在,这里从作者本身的论文可以看出。当然作者的重点是为了强调“深层网络(几百到1000)”这样子的网络其实是没必要的,通过增加通道数(number of feature maps)也可以达到相应的效果;
  • 个人对于Dropout的新的使用方法比较认可;

原文链接地址:Sergey Zagoruyko and Nikos Komodakis, Wide Residual Networks, arXiv:1605.07146v4

解析Wide Residual Networks的更多相关文章

  1. Residual Networks <2015 ICCV, ImageNet 图像分类Top1>

    本文介绍一下2015 ImageNet中分类任务的冠军——MSRA何凯明团队的Residual Networks.实际上,MSRA是今年Imagenet的大赢家,不单在分类任务,MSRA还用resid ...

  2. 深度残差网(deep residual networks)的训练过程

    这里介绍一种深度残差网(deep residual networks)的训练过程: 1.通过下面的地址下载基于python的训练代码: https://github.com/dnlcrl/deep-r ...

  3. 残差网络(Residual Networks, ResNets)

    1. 什么是残差(residual)? “残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.”“如果回归模型正确的话, 我们可以将残差看作误差的观测值.” 更准确地,假设我们想要找一个 $x$ ...

  4. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) ——3.Programming assignments : Residual Networks

    Residual Networks Welcome to the second assignment of this week! You will learn how to build very de ...

  5. Residual Networks

    Andrew Ng deeplearning courese-4:Convolutional Neural Network Convolutional Neural Networks: Step by ...

  6. 深度学习论文笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of Planetary Gearboxes

    这篇文章将深度学习算法应用于机械故障诊断,采用了“小波包分解+深度残差网络(ResNet)”的思路,将机械振动信号按照故障类型进行分类. 文章的核心创新点:复杂旋转机械系统的振动信号包含着很多不同频率 ...

  7. Re-thinking Deep Residual Networks

    本文是对ImageNet 2015的冠军ResNet(Deep Residual Networks)以及目前围绕ResNet这个工作研究者后续所发论文的总结,主要涉及到下面5篇论文. 1. Link: ...

  8. Residual Networks &lt;2015 ICCV, ImageNet 图像分类Top1&gt;

    本文介绍一下2015 ImageNet中分类任务的冠军--MSRA何凯明团队的Residual Networks.实际上.MSRA是今年Imagenet的大赢家.不单在分类任务,MSRA还用resid ...

  9. Convolutional Neural Network-week2编程题2(Residual Networks)

    1. Residual Networks(残差网络) 残差网络 就是为了解决深网络的难以训练的问题的. In this assignment, you will: Implement the basi ...

随机推荐

  1. hihocoder 1631

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There are many homeless cats in PKU campus. They are all happy ...

  2. java8按照lamda表达式去重一个list,根据list中的一个元素

    /** * 按照指定字段给list去重 * @param list * @return */ public static List<DataModel> niqueList(List< ...

  3. 图片转tfrecords

    import numpy as np import tensorflow as tf import time import os import cv2 from sklearn.utils impor ...

  4. 买车交税 All In One

    中国买车交税 All In One 消费税 增值税 车辆购置税 车船税 关税 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 原 ...

  5. how to create a style element in js (many ways)

    how to create a style element in js (many ways) create style in js Constructed StyleSheets CSSStyleS ...

  6. CSS 设置多行文本省略号 ...

    CSS 设置多行文本省略号 ... .box{ display: -webkit-box; overflow: hidden; text-overflow: ellipsis; word-wrap: ...

  7. React & CSS Modules & CSS in JS

    React & CSS Modules & CSS in JS https://codesandbox.io/s/css-modules-name-mangling-ck1eo CSS ...

  8. Zookeeper从入门到删库跑路

    导语 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项 ...

  9. cobra-强大的CLI应用程序库

    cobra介绍 Cobra是一个用于创建强大的现代CLI应用程序的库,也是一个用于生成应用程序和命令文件的程序. Cobra用于许多Go项目,如Kubernetes.Hugo和Github CLI等. ...

  10. Lambda 表达式简介

    0.预备知识 函数式接口:只包含一个抽象方法的接口. 内部类:静态.成员内部类 局部内部类 匿名内部类 1.代码 1 /** 2 * 函数式编程: 3 * lambda表达式前提: 4 * 必须是函数 ...