1. 梯度分析
观察不同隐藏层数在不同层bias的梯度对比:
可以看出,第一个隐藏层梯度比第四个几乎慢1000倍.
这种现象普遍存在于神经网络中,称为:vanishing gradient problem
另一种情况与之相反,称为:exploding gradient problem
2. 梯度消失
此处就是简单的反向传播算法!
标准正态分布图
3. 梯度爆炸
4. 不稳定梯度问题
5. 解决办法之激活函数
ReLU(修正线性单元)
人们起初并不觉得它的效果会好过 sigmoid 和 tanh。但是,实战中它确实做到了。事实上,cs231n 课程甚至指出,应该默认使用 Relu 函数。
ReLU 从数学表达式来看,运算十分高效。对于某一输入,当它小于 0 时,输出为 0,否则不变。下面是 ReLU 的函数表达式。
然而,ReLU 有一个致命缺点,叫「ReLU 坏死」。ReLu 坏死是指网络中的神经元由于无法在正向传播中起作用而永久死亡的现象。
更确切地说,当神经元在向前传递中激活函数输出为零时,就会出现这个问题,导致它的权值将得到零梯度。因此,当我们进行反向传播时,神经元的权重将永远不会被更新,而特定的神经元将永远不会被激活。
还有件事值得一提。你可能注意到,不像 sigmoid 和 tanh,Relu 并未限定输出范围。这通常会成为一个很大的问题,它可能在另一个深度学习模型如递归神经网络(RNN)中成为麻烦。具体而言,由 ReLU 生成的无界值可能使 RNN 内的计算在没有合理的权重的情况下发生数值爆炸。因此反向传播期间权重在错误方向上的轻微变化都会在正向传递过程中显著放大激活值,如此一来学习过程可能就非常不稳定。
参考文献
http://blog.youkuaiyun.com/qq_29133371/article/details/51867856
http://blog.youkuaiyun.com/baidu_29782299/article/details/52742773
机器之心