激活函数都有哪些?都长什么样?有哪些优缺点?
Sigmoid
能够把输入的连续实值“压缩”到0和1之间。
缺点:
1、Sigmoids saturate and kill gradients:
sigmoid 有一个非常致命的缺点,当输入非常大或者非常小的时候,这些神经元的梯度是接近于0的,从图中可以看出梯度的趋势。所以,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。
2、Sigmoid 的 output 不是0均值:
这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
产生的一个结果就是:如果数据进入神经元的时候是正的,那么w计算出的梯度也会始终都是正的。
tanh
与 sigmoid 不同的是,tanh 是0均值的
ReLU
f(x)=max(0,x)
ReLU 的优点:
1、使用 ReLU 得到的SGD的收敛速度会比 sigmoid/tanh 快很多。(因为它是linear,而且 non-saturating)
2、相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。
ReLU 的缺点:
举个例子:一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这个情况发生了,那么这个神经元的梯度就永远都会是0.
实际操作中,如果learning rate 很大,那么很有可能网络中的40%的神经元都”dead”了。
当然,如果设置一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
Leaky-ReLU、P-ReLU、R-ReLU
Leaky ReLUs: 就是用来解决这个 “dying ReLU” 的问题的。与 ReLU 不同的是:
α 是一个很小的常数
Parametric ReLU: 对于 Leaky ReLU 中的α,通常都是通过先验知识人工赋值的。
见论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》
Randomized ReLU:
在训练过程中,α 是从一个高斯分布 U(l,u) 中 随机出来的,然后再测试过程中进行修正(有点像dropout的用法)。
Maxout
Maxout出现在ICML2013上,见论文
怎么选用激活函数?
使用 ReLU,要小心设置 learning rate,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.