对神经网络的优化过程,采用的是反向传播算法(Back Propagation Algorithm),其本质又是链式求导法则。
我们举一个简单的例子:下面是每层只有一个神经元的多层网络
在前向传播中,任意一个神经元 j j 的输入是,其对应的输出是 aj=σ(aj−1wj+bj) a j = σ ( a j − 1 w j + b j ) , 其中 zj=aj−1wj+bj z j = a j − 1 w j + b j
通过BP算法,求解 ∂C∂b1=∂C∂a4⋅σ′(z4)⋅w4⋅σ′(z3)⋅w3⋅σ′(z2)⋅w2⋅σ′(z1) ∂ C ∂ b 1 = ∂ C ∂ a 4 ⋅ σ ′ ( z 4 ) ⋅ w 4 ⋅ σ ′ ( z 3 ) ⋅ w 3 ⋅ σ ′ ( z 2 ) ⋅ w 2 ⋅ σ ′ ( z 1 )
可以看到,链式法则会有一系列的乘积,因此会导致梯度消失或梯度爆炸。发生梯度消失时,网络的前几层参数几乎不进行更新,只有后几层参数进行更新,这样和浅层网络没什么区别,深度这个含义不再具有。
无论是梯度消失还是梯度爆炸,都会导致网络内部参数更新不稳定。发生梯度消失时,后几层参数更新 大于 前几层参数更新; 发生梯度爆炸时, 前几层参数更新 大于 后几层参数更新。这都是BP算法本身不足造成的。