一、激活函数图像
(1)sigmoid
(2)tanh
(3)ReLU
二、什么是梯度消失和梯度爆炸?
在反向传播过程中需要对激活函数进行求导,如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸。同样如果导数小于1,那么随着网络层数的增加梯度更新信息会朝着指数衰减的方式减少这就是梯度消失。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。
根本原因:
(1)隐藏层的层数过多。
(2)激活函数。BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,计算梯度包含了对激活函数进行求导。如果此部分大于1,那么层数增多时,最终要求的梯度将以指数形式增加,即发生梯度爆炸;如果此部分小于1,那么随着层数增多,求出的梯度将以指数形式衰减,即发生梯度消失。
由图可见,sigmoid函数的导数最大值不超过0.25,因此作为激活函数在反向传播时很容易发生梯度消失,因此一般不适合用于神经网络中。同理,tanh函数比sigmoid要好一些,但它的导数仍是小于1的。综上,在神经网络中一般采用ReLU函数作为激活函数。
如何防止梯度消失?
· 采用ReLU函数作为激活函数。
· 权重初始化采用高斯初始化。
如何防止梯度爆炸?
· 使用 ReLU / maxout 等代替 sigmoid。
· 设置梯度剪切阈值,如果超过了该阈值,直接将梯度设为该值。