一、Sigmoid函数
优点:
- 能够把输入的连续实值变换为0和1之间的输出。
缺点:
- 容易梯度消失
- 输出不是0均值,不便于下层的计算
- 含有幂运算,求解耗时。
为什么要0均值?
二、tanh函数
- 解决了Sigmoid函数的不是zero-centered输出问题
- 梯度消失和幂运算的问题仍然存在。
三、Relu函数
优点:
- 解决了梯度消失问题
- 计算速度非常快,只需要判断输入是否大于0
- 收敛速度远快于sigmoid和tanh
缺点:
- ReLU的输出不是0均值
- Dead ReLU Problem,某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
有两个主要原因可能导致这种情况产生
- 非常不幸的参数初始化,这种情况比较少见
- learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
四、Leaky Relu
解决了ReLU函数在输入为负的情况下产生的梯度消失问题。
五、Elu
六、PRelu
参数化修正线性单元
当参数取的比较大,Leaky Relu就是PRelu
七、RReLU
是在一个给定的范围内随机抽取的值,这个值在测试环节就会固定下来。