神经网络(四)-vanishing gradient problem

在前面的章节中,我们已经了解了神经网络的基本模型,以及如何使用梯度下降法来学习优化神经网络的参数。在前面的数字识别的例子中,我们可以设计不同的神经网络结构,当然得到的识别率也是有区别的,比如除了输入层(784个神经元)和输出层(10个神经元),如果我们只添加一个隐含层(30个神经元),运行30个epoch,mini-batch为10, η=0.1 ,正则项 λ=5.0 ,可以得到的识别准确率为96.53%(实验三次取的最高值);如果我们再添加一层隐藏层(两个隐藏层,分别包含30个神经元),可以得到的识别准确率可达97.14%(实验三次取的最高值),对比于只有一个隐藏层的神经网络来说,准确率有所提高,由此很容易让人联想到是否是越多的隐藏层,那么得到的准确率就越高呢。那么,我们设置三个隐藏层后继续进行实验,得到的识别准确率却为96.72%;设置四个隐藏层,得到的最高准确率为96.65%。这看起来网络层越深,并不见得会对提高准确率有帮助。

那这种现象是否是有理论依据的呢?我们来查看在不同神经网络结构中,在网络学习过程中,网络参数的变化情况,我们知道,error项 δlj=Cblj ,它衡量了惩罚方程 C 相对于网络中第 l 层中的第 j 个神经元参数 blj 的变化速率大小。如果值 δlj 越大,可以说明当前神经元的学习速率越快,而如果值越小,那么当前神经元的参数优化对于整体cost量的降低的贡献是越小的(权重参数分析同样道理)。分别统计含有1个、2个、3个、4个隐藏层的神经网络结构的各个网络层的学习速率快慢值(以error向量长度大小作为值衡量):我们发现,无论在哪一种情况下,在同一时刻,越靠后的网络层的学习速率越快,而越靠前的网络层的学习速率反而越慢!我们可以有一个直观的印象,error项在向后传播的过程中,逐渐变小,使得越靠前的网络层的学习速率越来越低,这种现象被称为vanishing gradient problem。

神经网络(四)-vanishing gradient problem_第1张图片

为了对这种现象有更理论性的理解,我们来分析最简单的一种情况:每一层只有一个神经元的网络结构。

这里写图片描述

其中, wi 是weight参数, bi 是bias参数,C是cost 方程。根据链式法则,我们可以得到,

Cb1=Ca4σ(z4)w4σ(z3)w3σ(z2)w2

这个推导公式有个有趣的地方:除了第一项之外,后面的乘积项都是类似于 σ(ai)wi 形式依次包含各个网络层。我们来看表达式 σ(ai)wi ,其中 σ(ai) 具有如下的形状,在0位置处可以达到顶峰 14 ,也就是说 σ(ai)14 ,而如果我们采用均值为0,标准差为1的高斯分布来初始化参数weight的话,那么得到的 wi 的值有很大的概率是小于1的,所以表达式 σ(ai)wi 是一个小于1的值。在这种情况下,如果连续有多个这样的项目相乘,可想而知,结果会使得 Cb1 的值变得很小。换句话说,越是靠前的网络层, Cb1 包含的乘积项越多,使得其值越小,对应网络层的学习速率越低。至此解释了vanishing gradient现象发生的原因。

神经网络(四)-vanishing gradient problem_第2张图片

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