虽然前文,提到的卷积神经网络,可以通过权值共享等手段对抗一定程度的梯度消失。但是实际发现一旦网络超过20层,效果会逐渐变差。梯度消失的现象仍然存在。何凯宁等人发明的深度残差网络可以解决更深网络的训练问题。深度残差网络的深度可以很轻松到底几百层,最新的数据表明。微软已经训练了一万多层的残差网络,这对解决一些特定的问题很有用。深度残差网络的基本组成如下。
左边是一个正常的深度神经网络,右边是一个残差网络的基本组成。
F(X)是求和前网络映射,H(X)是从输入到求和后的网络映射。比如现在我们要把5映射到5.1,左边神经网络做法就是寻找 H(5)=5.1的映射函数。 右边残差网络的做法是,寻找 5.1=5+F(X)。也就是寻找 F(X)=0.1的函数,拟合残差要比直接寻找
H(5)=5.1 这个函数容易。另外一个方面,
引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F'的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化。
需要注意的是:如果恒定映射的时候维度不一样 H(X)=F(x)+x 通常的做法
就是在外层补0。
这样就可以把底层信息,通过恒等映射,直接传给下层,有下面两个作用。
1 梯度不会消失,可以使得更深。
2 把底层特征加入最后运算(这有时候很重要)。