下面内容转自深度学习:激活函数的比较和优缺点,sigmoid,tanh,relu,正确性有待进一步研究,这里谨做记录。
后面为自己的思考。
sigmoid
sigmoid缺点:
- 激活函数计算量大,反向传播求误差梯度时,求导涉及除法
- 反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
- Sigmoids函数饱和且kill掉梯度。
- Sigmoids函数收敛缓慢。
ReLU
RELU特点:
输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入
ReLU 的优点:
- Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多
ReLU 的缺点:
- 训练的时候很”脆弱”,很容易就”die”了
例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0。【1】
如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
思考
上面说的ReLU的缺点【1】的解释:
- 非常大的梯度流过一个 ReLU 神经元后 ===》
- 权重恰好调整为一个非常大的负值(记为w1) ===》
- 由于该神经元的输入为正值(记为x1),所以w1*x1=u1,u1为一个很大负值 ===》
- u1落在了ReLU的左半部分,所以该神经元最终输出 y1 = ReLU(u1)= 0 ===》
- 以后该神经元的输出一直为0 ===》
- 因为该神经元输出不变,所以权值不再调整 ===》
- 因此说该神经元dead了。
不知是否正确,欢迎讨论。
另外可以参考sigmoid tanh Relu比较