1.ResNet详解
ResNet 网络是在 2015年 由微软实验室提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。
ResNet网络中的两点:
提出 Residual 结构(残差结构),并搭建超深的网络结构(可突破1000层)
使用 Batch Normalization 加速训练(丢弃dropout)
1.1 Why residual?
在ResNet网络提出之前,传统的卷积神经网络都是通过将一系列卷积层与池化层进行堆叠得到的。
一般我们会觉得网络越深,特征信息越丰富,模型效果应该越好。但是实验证明,当网络堆叠到一定深度时,会出现两个问题:
梯度消失或梯度爆炸
假设每一层的误差梯度小于1,每向前传播一层,都要乘以一个小于1的误差梯度,网络越深时,梯度越趋近于0 ——梯度消失
反之,若每一层的误差梯度大于1,反向传播时,网路越深,梯度越来越大 ——梯度爆炸
解决梯度消失和梯度爆炸的一般方案:1、对于数据进行标准化处理 2、权重初始化 3、ResNet论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。
退化问题(degradation problem):在解决了梯度消失、爆炸问题后,仍然存在深层网络的效果可能比浅层网络差的现象
总结就是,当网络堆叠到一定深度时,反而会出现深层网络比浅层网络效果差的情况。
如下图所示,20层网络 反而比 56层网络 的误差更小:
![](https://img-blog.csdnimg.cn/img_convert/77786a0d6b422578cc154338c08ecef7.png)
对于退化问题,ResNet论文提出了 residual结构(残差结构)来减轻退化问题,下图是使用residual结构的卷积网络,可见随着网络层数的不断加深,效果并没有变差,而是变的更好。(虚线是训练集错误率,实线是验证集错误率)
![](https://img-blog.csdnimg.cn/img_convert/d4cb5b130aa36e56b9ee9f50bdedb98b.png)
1.2 residual结构
1.什么是residual
为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。
残差网络由许多隔层相连的神经元子模块组成,我们称之为 残差块 Residual block。单个残差块的结构如下图所示:
![](https://img-blog.csdnimg.cn/img_convert/ae912ca4dd4a09bc05b761370a482ae4.png)
上图中红色部分称为 short cut 或者 skip connection(也称 捷径分支),直接建立
a[l] 与 a[l+2] 之间的隔层联系。其前向传播的计算步骤为:
![](https://img-blog.csdnimg.cn/img_convert/d0b5ab1da2a95cc327c6a9acdb6f3b40.png)
a[l] 直接隔层与下一层的线性输出相连,与 z[l+2] 共同通过激活函数(ReLU)输出 a[l+2]。
由多个 残差块 组成的神经网络就是 残差网络 。其结构如下图所示:
![](https://img-blog.csdnimg.cn/img_convert/8483b47162c5fe4e243461ad5c68c064.png)
实验表明,这种模型结构对于训练非常深的神经网络,效果很好。
为了便于区分