机器学习基础(五)——Residual Network

残差网络

1、动机

a、基本问题描述

在一定范围内随着神经网络随着层数增加可以更明确的学习出不同的特征从而提升网络性能。但是由于具体实现时其他问题的干扰导致普通的神经网络在增加层数到一定数量后再进行这样的操作反而会导致性能下降,如下图所示(摘自“Deep Residual Learning for Image Recognition”):

机器学习基础(五)——Residual Network_第1张图片

b、梯度消失与爆炸

导致上述问题其中一个主要的原因就是“梯度消失与爆炸”,那么何为梯度消失于爆炸呢?

梯度消失

当前向传播的梯度绝对值小于1时,经过多层传播那么其指数性接近于零,导致网络靠前的网络层无法获取传播信息。导致此问题的原因主要有两个:一个是不恰当的选择“激活函数”(如sigmoid等,其在大部分区域梯度接近于0,选择类似“relu”函数等可以有效解决此问题),另一个就是网络过深,在梯度绝对值小于1时,经过多层传播那么其指数性接近于零。

梯度爆炸

同样由于网络过深当网络较深层梯度绝对值大于1那么在经过多层传播后可能出现指数增长从而超过计算机的表达范围出现训练问题导致系统性能的下降。此问题不是此处残差网络要解决的问题,解决此问题的是如“BatchNorlization”等等类似的方法。

其实通过以上的描述我们可以了解到只有因为网络过深的“梯度消失”问题还无法有效解决,而“残差网络”的动机就是解决这个问题从而提升网络深度获得更好的性能。

2、残差网络

机器学习基础(五)——Residual Network_第2张图片

以上为残差网络的简单模型(摘自“Deep Residual Learning for Image Recognition”),这里我们将其看作一个两层网络, X X 是输入,

普通网络

z[1]=W[1]X z [ 1 ] = W [ 1 ] X

a[1]=relu(z[1]) a [ 1 ] = r e l u ( z [ 1 ] )

z[2]=W[2]a[1] z [ 2 ] = W [ 2 ] a [ 1 ]

a[2]=relu(z[2]) a [ 2 ] = r e l u ( z [ 2 ] )

残差网络

z[1]=W[1]X z [ 1 ] = W [ 1 ] X

a[1]=relu(z[1]) a [ 1 ] = r e l u ( z [ 1 ] )

z[2]=W[2]a[1]+X z [ 2 ] = W [ 2 ] a [ 1 ] + X

a[2]=relu(z[2]) a [ 2 ] = r e l u ( z [ 2 ] )

如果对比 da[2]dX d a [ 2 ] d X 则可见“残差网络”结果比普通网络多出一项常数项”1”,通过此方法保证梯度向前传播更多层。

具体实现“残差网络”时需要保证相加项维度相同,并且还有很多其他变种,但基本思想一致。


1、以上为卷积神经网络的基本概念,更具体描述待补充
2、具体实现见:https://github.com/Alnlll/ML/tree/master/several_apps/001-GestureRecogantionWithResNet

你可能感兴趣的:(机器学习基础)