版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongbin_xu/article/details/83690169
ResNet v2
1、四个问题
- 要解决什么问题?
- 进一步提高ResNet的性能。
- 解释为何Identity mapping(恒等映射)的效果会比较好。
- 用了什么方法解决?
- 提出了一个新的残差单元结构。
- 从理论和实验上分析了identity mapping的有效性。
- 效果如何?
- 使用1001层的ResNet,在CIFAR-10数据集上错误率为4.62%,在CIFAR-100数据集上错误率为22.71%。都是目前最好的结果。
- ImageNet 2012数据集上,top-1错误率为20.1%,top-5错误率为4.8%,超过Inception v3,也是最优结果。
- 还存在什么问题?
- ResNet模型可以有极深的深度,更强大的学习能力,同时也会带来更多的参数,更大的计算量,如何对其进行压缩,降低计算成本也是个需要考虑的问题。
2、论文概述
2.1、简介
- 上式是原始残差单元,公式参数说明:
- 和 分别是第 层网络的输入和输出。
- 表示残差函数。
- 表示恒等映射(identity mapping)。
- 表示ReLU函数。
- 后面默认认为 , 。
- 原始残差单元结构如a图所示,改进的残差单元结构如b图所示。
- 为了理解跳跃连接(skip connection)的作用,作者实验了各种不同的 (identity mapping),即图中的灰色线部分。最终的实验结果表明,保持一个clean information path有助于提升效果。
- 提出了预激活(pre-activation)和后激活(post-activation)。
- 预激活:bn -> relu -> conv
- 后激活:conv -> bn -> relu
- 在新的残差结构中改进如下:
- 将激活函数放到旁路,从shortcut中移除,保证clean information path。
- 旁路中的结构从 conv-bn-relu(后激活) 转换为 bn-relu-conv(预激活)。
2.2、关于深度残差网络结构的分析
- 原始残差单元的数学表示,符号意义不做赘述。
- 假设 (恒等映射), (激活函数也是一个恒等映射)。
- 循环套用 ,可以得到下式:
- 按照链式法则求导:
- 公式说明:
- 是loss函数值。
- 根据链式求导法则,可以求出梯度,如上式所示。
- 梯度 可以拆分成两部分:对于第 层的梯度, ;以及每一层卷积层所拟合的残差函数对应的梯度, 。
- 对于普通的没有shortcut连接的网络来说,只存在 这一项,而对于ResNet来说,则额外引入了 。 的存在确保了较深层网络的梯度可以传递到较浅层网络去。
- 其实另外还有一点,引入了shortcut还减少了梯度消散的可能性。因为除非 总是等于-1,梯度才会为0,然而残差函数不太可能全部为-1。
- 作者还给出了一个反例,说明为何要选择恒等映射。这里就直接贴图了,细节请参考论文。
- 大致意思是:如果这个 ,随着梯度传播会以指数级数增长;如果 ,随着梯度传播会以指数级数衰减。只有在 ,即恒等映射(identity mapping)的情况下,梯度才可以较好的保持,避免梯度消失和梯度爆炸。
2.3、实验
2.3.1、验证恒等映射的有效性
- 作者使用下面的这些结构分别进行了实验,最后发现恒等映射的结果最好,实验结果见table1。
2.3.2、验证预激活的有效性
- 预激活结构和后激活对比实验,从实验结果可以看出预激活的效果是最好的。
2.3.3、在一些benchmark数据集上的效果
- CIFAR-10和CIFAR-100
- imagenet 2012