前言
在当今学术界的论文里,几个baseline网络LeNet、AlexNet、VGGNet、GoogLeNet、ResNet都是大家用的多的CNN网络。其中LeNet、AlexNet、VGGNet这三个都是很古老的CNN线性网络,属于新手喜欢用的VGG like 网络,这些网络结构简单,从输入到输出一条路走到黑,所以工业界对这些网络都有很有效的加速优化,但是在学术界却因为泛化能力有限近年逐渐被淘汰。而支路化的GoogleNet曾经流行过一时,但是很快被性能更加优越的ResNet取代,并且ResNet及其增强版ResNext自诞生以来已经霸占学术圈两年。但是ResNet因为结构复杂的原因所以资源消耗的特别多,但是学术界更加关注性能而不是速度,所以ResNet在学术界依然无可取代。在昨天结束的CVPR2017中清华大学的DenseNet获得best paper,也希望作者能够尽快release源码和模型,让DenseNet成为一个新的baseline选择。
当然ResNet在工业界并不像学术界那样地位不可撼动,Face++的ShuffleNet,Google的mobileNet都是性能不差的小模型,甚至有些产品中宁愿使用VGG like的网络也不愿意使用ResNet,因为对于产品而言速度是一个非常重要的指标。
因为有幸和ResNet的通讯作者孙剑老师一起工作,所以也问了他当时怎么想出ResNet这个如此有创造力的idea,不过孙剑老师很谦虚地说其实还是尝试出来的,至于这个idea为什么work的原因也是论文出来了之后补充了一个非官方不敢写到论文里的解释,这个我之后介绍到相应点的时候再说明。
残差块(Residual Block)
Resnet整个网络的成功点就是在于应用了残差块,其实现也非常简单。原始输入 x 经过一个conv-relu-conv组合层,输出一个