【原创】对残差网络ResNet的理解

我没有看原文,近期准备好好看一下:Deep Residual Learning for Image Recognition

附上论文详细解读

对ResNet的理解主要来自吴恩达的课件、CNN入门讲解:什么是残差网络Resnet(视频)以及CSDN上相关资料。

深度网络的好处:

1.特征的等级随着网络深度的加深而变高;

2.很深的深度使得网络具有极强大的表达能力。

但深度网络会产生两个问题:

1.梯度消失及梯度爆炸

梯度爆炸的问题基本不用担心,因为ReLu的最大梯度是1,sigmoid的最大梯度是0.25,下图是sigmoid的梯度分布图:


主要担心梯度消失的问题,链式求导w很小,推到最初几层网络的参数变得非常小,梯度参数基本就消失了。


2.网络退化

在深层网络能够收敛的前提下,随着网络深度的增加,正确率开始饱和甚至下降,称之为网络的退化(degradation)问题。


为什么会产生网络退化,有如下解释:

本来随着网络深度增加准确率越来越好的网络出现了诡异的变化。深层网络应该优于浅层网络,可以说是所有人都认同的的事实,但是随着网络的加深,一些层通常是没有必要出现的,如果训练好的参数随着后面的网络扰动,会被类似于白噪音的问题使参数重新偏移变差。

我对这个解释不是很满意。应该明确,深度学习是一门实验性的科学。实验性科学就是先观察到现象,然后根据现象找解释。这可能是唯一一个研究对象是人造的实验性的科学领域。

如何解决这两个问题,又能保持深度网络较好的学习能力?残差网络出现了。



1.缓解网络退化问题

首先,一个2层的网络可以拟合任意一个函数。我们希望输出H(x)应尽量接近x,即F(x)->0,这样这个残差模块基本相当于恒等映射,网络退化的问题就缓解了。因此我们希望这个2层网络能拟合函数f(x)=x。

如何使得F(x)->0呢,还是梯度下降。对于这个残差模块来说,下图中红框的增项a[l]就是short cut带来的。


这个项出现的意义等同于对z[l+2]的正则化,会使得w[l+2]与b[l+2]变小,因此会使得F(x)->0,使得这个残差模块基本相当于恒等映射。

还有一个值得说明的问题:残差期望F(x)要比原始期望映射H(x)更容易优化,解释如下:


据说还有ReLu的影响,请看参考资料。

2.缓解梯度消失的问题


看我画的红圈圈,如果是plain网络,是没有1的,那么梯度是非常小的,很多非常小的梯度链式相乘变得更小,梯度消失。因为有了short cut加上了1,梯度变成比1大一点点,在这个环节上保持了链式梯度的稳定性。

就是说加上short cut的前后,在网络退化问题上,由输入输出较大的线性变化,变成了基本相当的恒等映射。

如果加上short cut之后变成完全恒等的映射,梯度变成1,那么不加任何模块也能达到这个效果。

实际上,虽然F(x)->0,但F(x)并不等于0,用吴恩达的话说:

“当然我们的目标不仅仅是保持网络效率,还要提升它的效率。想象一下,如果这些(残差模块中的)隐层单元学到一些有用信息,那么它可能比学习恒等函数表现得更好。

加上残差模块,能确定网络性能不会受到(较大)影响(F(x)->0),很多时候甚至可以提高效率(F(x)虽然很小,还是学习到了新的特征),或者说至少不会降低网络效率。因此创建类似残差网络可以提升性能。”

我们来比较一下加残差模块、什么也不加、加不带short connection(我觉得还是connection比cut合适)的plain模块的区别:

加残差模块:梯度为1+min_num,基本恒等映射,但就是(基本恒等映射-完全恒等映射)的F(x)可能学习到了有用的信息,使得网络进一步优化。

什么也不加:梯度为1,完全恒等映射,对网络优化没有贡献。

加不带short connection的plain模块:梯度为min_num,加强了梯度消失;映射的线性变化很大,过大,可能把已经优化好的参数又改变了,是网络退化的原因。步子迈得太大,扯着蛋了。

因此残差模块虽然迈着小步,但是在稳步前进。至于这个基本恒等映射-完全恒等映射)的F(x)为什么大多数情况下是学习到了有用的信息,而不是扰乱了已经优化好的参数,我只能说:深度学习是个实验性的科学,这是一个基于统计的结果。在我的知识范围内不能解释。

最后再来看一张图:


看红圈圈,这些模块是没有short connection的。为什么不能把一个深度网络中的层都搞成残差模块,如果都是残差模块了,梯度都变成了1+min_num,链式乘起来会发生梯度爆炸的事件,会导致训练不收敛,因此必须中间有几个min_num,以保证最初几层的梯度参数在一个合理范围之内。





  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值