深度神经网络
前面的章节介绍了反向传播算法和一些常见的改进神经网络的训练效果的方法。前面还只是停留在只有一个隐藏层的神经网络。
如上图所示,这样的一个神经网络就只有输入、输出层和一个隐藏层。在手写字体识别例子中,这样一个简单的神经网络能够达到98%的正确率!可以预料到,如果增加隐藏层的层数,那么神经网络的学习能力将更加强,可以学习到更加抽象的概念。
如上所示为一包含三个隐藏层的神经网络,假如第一层能够学习到边的特征,那么第二层就能学习到更复杂一点的形状,比如三角形,矩形。第三层就能学习到更复杂的形状了,依次类推。
那么该如何训练这样的深度神经网络呢?
先看看用之前的反向传播算法的随机梯度下降法来训练神经网络会怎样。按照前面讨论的,神经网络层数越多,学习能力越强。但是,实际上在上面的例子中,增加隐藏层的层数,手写字体的识别正确率反而变小了。为什么会这样呢?
梯度消亡问题-The vanishing gradient problem
假如上面的神经网络中添加的隐藏层从理论上是可以增强学习能力的,但是神经网络没有学习到正确的权重。那么就要弄清楚神经网络的学习算法到底出什么问题了,怎样采样学习到正确的权重。
为了弄清楚问题出在哪里,先来把神经网络的学习过程可视化一下。假设有一个 [784,30,30,10] 的神经网络,也就是有两个隐藏层,每一个隐藏层有30个神经元。对每一个神经元,有梯度 ∂C/∂b ,也就是代价函数对神经元的偏置的梯度,如前面第二章中所述,这个梯度的大小不仅代表了在学习过程中偏置变化的速度,也代表了权重系数的变化速度。让梯度表示为 δlj=∂C/∂blj ,也就是第 l 层的第