赞
踩
神经网络通过非线性隐藏层的堆叠可以拟合复杂的函数,但是随着层数的增加,神经网络会出现学习缓慢甚至无法学习的情况,这样的问题被称为梯度消失问题(vanishing gradient problem)。
MNIST数据集是来自美国标准与技术研究所的手写体数据集,包括从0到9总共10个数字的手写体图像,常被用做教程或作为benchwork用于对比模型优劣。
我们用MNIST数据集训练神经网络,共28*28=784个像素点,即输入层有784个神经元,每一个隐藏层都包含30个神经元,输出层神经元为10个,对应于MNIST数据集的10个分类。我们通过增加隐藏层来比较模型表现:
隐藏层数 | 准确率 |
---|---|
1 | 96.48 |
2 | 96.90 |
3 | 96.57 |
4 | 96.53 |
为了更直观的表示深层神经网络中存在的问题,共训练了500轮,同时对数据做平滑处理,将训练过程中的学习率画了出来:
探究存在梯度消失的问题,我们以一个三层隐藏层的神经网络为例:
第一个隐藏层偏差变化率:
在由链式法则求出来的梯度公式中,越靠前层的梯度受到后面层的梯度影响越小,加上sigmoid函数的梯度始终小于1,所以靠前的神经网络层容易出现梯度变得极小的情况,没有学习效果,这样的现象被称为梯度消失。
对应于梯度消失的情况,同样还存在梯度爆炸的情况,虽然相对比较少见。比如通过链式法则权重相乘,是的前面层的变化率变得非常大。这样的现象被称为梯度爆炸。
前面提到的深度神经网络中存在的梯度问题一部分是由于sigmoid函数而导致的,通过选择其他的激活函数可以很好的减少这种问题的发生。于是我们引入矫正线性单元(ReLU,rectified linear units):
A(x) = max(0,x)
ReLU求导结果:
在x大于0的时候,ReLU的导数始终为1.在将ReLU作为神经网络每层的激活函数时,即使经过层层网络的传播也可以保证前面层的变化率可以相对保持稳定,这也就是为什么ReLU可以使得深层神经网络更加容易训练的原因:
ReLU函数还有其他好处:
除了深度网络存在的梯度不稳定的情况之外,还有许多其他的问题影响着网络的训练。比如参数初始化使得网络处于不同的起点,往往带来截然不同的训练结果,如下图的蓝色箭头的起点比黄色箭头指向的起点更容易陷入局部最优。选择合适的初始化方法可以减少这种情况。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。