文章目录
- ResNet残差网络
- 1. 传统卷积神经网络的问题
- 1.1 梯度消失和梯度爆炸
- 1.2 退化问题
- 2. 解决问题
- 2.1 梯度消失与爆炸
- 2.2 退化问题
- 3. 残差结构
- 结构归纳
- 4. BN(Batch Normalization)
- 总结
ResNet残差网络
ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。
ResNet残差网络有两个核心特征:1. 残差结构;2. BN(Batch Normalization)。
1. 传统卷积神经网络的问题
神经网络都是通过卷积层和池化层的叠加组成的。在实际的试验中发现,随着卷积层和池化层的叠加,学习效果不会逐渐变好,反而出现2个问题:
1.1 梯度消失和梯度爆炸
梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0。
梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大。
1.2 退化问题
由下图发现,训练的层数20层的错误率竟然比56层的错误率还要低。训练层数越多准确率反而下降了,这就是所谓的退化问题。
2. 解决问题
那么,我们该如何解决上述出现的问题呢?
2.1 梯度消失与爆炸
我们知道,对于解决梯度消失与爆炸问题,我们可以通过更换激活函数,比如ReLU函数。但是我们更改完激活函数之后,还是发生了梯度消失与爆炸问题,,该怎么解决呢?
为了解决梯度消失或梯度爆炸问题,论文提出通过数据的预处理以及在网络中使用 **BN(Batch Normalization)**层来解决。
2.2 退化问题
为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为残差网络 (ResNets)。
使用后结果如下图所示,随着卷积层和池化层的叠加,学习效果逐渐变好:
3. 残差结构
残差网络的结构有5种,分别为:
我们以18层结构为例,来介绍残差网络中的残差结构:
在整个18层结构中,我们发现了残差网络由很多的小残差结构组成:
对于残差结构的运作:当有图片传进卷积层后,将图片复制成两份,一份直接通过“捷径”抵达卷积后出口,另一份要经过卷积层计算,最后两者进行“整合”。
所谓“整合”,即两个图片对应矩阵位置相加。那这样,图片的值不会变的很大嘛?不会发生梯度爆炸的问题吗?
由于调整权重参数时是反向传播的,使得参数在调整时,会将两个图片整合调整在一个很好的位置,不是盲目相加,能够保留下有效信息,无效信息给剔除掉。当然,相加后值肯定会变大一点点,我们就是要让他增大一点点,防止退化呀!
结构归纳
残差结构:residual结构使用了一种shortcut的连接方式,也可理解为捷径。让特征矩阵隔层相加,注意F(X)和X形状要相同,所谓相加是特征矩阵相同位置上的数字进行相加。
4. BN(Batch Normalization)
Batch Normalization(批量归一化)目的:使所有的feature map满足均值为0,方差为1的分布规律。
我们一般在构建传统卷积神经网络模型中,在传入数据图片时,都对数据进行了归一化处理:
transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]
在整个卷积神经网络中,每次卷积都会得到一批特征图,既然归一化能够使所有的特征都分布在相同大小的区域内,那为什么不对特征图也归一化呢?
所以,Batch Normalization(批量归一化)就是将每批次得到的特征图都进行归一化,减少大量对模型参数微调的时间。
总结
本篇介绍了:
- ResNet残差网络的好处:解决梯度消失和梯度爆炸以及退化问题。
- ResNet残差网络有两个核心特征:1. 残差结构;2. BN(Batch Normalization)。
- 残差结构:防止退化。
- BN:减少梯度消失和梯度爆炸问题。