ResNet
参考:
- (知乎:我是小将): https://zhuanlan.zhihu.com/p/31852747
- https://blog.csdn.net/wspba/article/details/56019373
- TF官方的ResNet代码详解: https://zhuanlan.zhihu.com/p/32194105
- https://zhuanlan.zhihu.com/p/27082562
- ResNet——总结、实现: https://zhuanlan.zhihu.com/p/35446379
设计思想
为什么模型越深越好?
网络越深,越能提取到更抽象更深的特征,而这些特征往往具有丰富的语义信息,且网络越深提取到的特征对输入图像变化(噪声)的敏感度越小,鲁棒性越高;
网络越深,梯度回传的时候易产生梯度消失的问题。
设计思想
引入残差网络:差分放大器
- 增加了梯度之间的相关性;
- 训练速度变快了;
- 网络可以更深了;
核心模块 Residual Block
- skip connection、short cut
- identity mappings,恒等映射
- 没有引入额外参数和计算复杂度
- 将差分变得更大,即梯度就放大了,有利于解决梯度消失的问题;
从H(x) = F(x)转变为H(x) = F(x) = x
short cut
如果short cut的两个feature map大小不一样(即short cut之间的卷积层的stride > 1),那么需要对要加到另一个卷积层的feature map进行pooling的下采样(MaxPooling,avgpooling),以使得相加的两个feature map大小相同。
对于短路连接,当输入和输出维度一致时,可以直接将输入加到输出上。但是当维度不一致时(对应的是维度增加一倍),这就不能直接相加。有两种策略:(1)采用zero-padding增加维度,此时一般要先做一个downsamp,可以采用strde=2的pooling,这样不会增加参数;(2)采用新的映射(projection shortcut),一般采用1x1的卷积,这样会增加参数,也会增加计算量。短路连接除了直接使用恒等映射,当然都可以采用projection shortcut。
residual block的相关推导
详情见resnet v2的文章
v2的改进
采用pre-activation,BN和ReLU都提前了。而且作者推荐短路连接采用恒等变换,这样保证短路连接不会有阻碍。
Stochastic_Depth
设计思想
ECCV2016文章,和DenseNet同一个作者
在训练策略上的创新;