前言
由于神经网络具有很强的拟合能力,我们期望训练一个很深的前馈神经网路,来完成任务。直观上看,更深的神经网络,在非线性激活函数的加持下,拥有更大的假设空间,因此当然“更有可能”包含了一个最优解。但是在实际使用时,训练又成了一个难题。除了过拟合问题以外,更深的神经网络会遇到如下两个难题,
存在问题
1.1 梯度消失爆炸问题
以下图的反向传播为例,假设每一层只有一个神经元且对于每一层
传播链为
可以推导出
而sigmoid的导数如下图
由此可见导数的最大值为1/4,所以当w的初始化大或者小的时候,会使得连成结果很大或者很小,就会出现梯度爆炸、消失的情况。
1.2 网络退化
在前面的讨论中,梯度弥散/爆炸问题导致模型训练难以收敛,但是这个问题很大程度上已经被标准初始化和中间层正规化方法有效控制了,这些方法使得深度神经网络可以收敛。深度神经网络面临的另问题是网络退化问题:
在神经网络可以收敛的前提下,随着网络深度增加,网络的表现先是逐渐增加至饱和,然后迅速下降。需要注意,网络退化问题不是过拟合导致的,即便在模型训练过程中,同样的训练轮次下,退化的网络也比稍浅层的网络的训练错误更高,如下图所示。
按道理来说,假如说K层获得最优结果,那么K+n层的情况下,结果也不会很差,因为后面几层只需要做恒等映射就可以了。总而言之,与浅层网络相比,更深的网络的表现不应该更差。因此,一个合理的猜测就是,对神经网络来说,恒等映射并不容易拟合。
残差网络
2.1 介绍
可以看到X是这一层残差块的输入,也称作F(x)为残差,x为输入值,F(X)是经过第一层线性变化并激活后的输出,该图表示在残差网络中,第二层进行线性变化之后激活之前,F(x)加入了这一层输入值X,然后再进行激活后输出。
2.2 好用原因
(1)解决1.1
ResNet最终更新某一个节点的参数时,由于h(x)=F(x)+x,由于链式求导后的结果如图所示,不管括号内右边部分的求导参数有多小,因为左边的1的存在,并且将原来的链式求导中的连乘变成了连加状态(正是 ),都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。
(2)集成思想
将残差网络展开,以一个三层的ResNet为例,将得到下面的树形结构:
使用图来表示就是
这样,残差网络就可以被看作是一系列路径集合组装而成的一个集成模型。