Difference between ReLU、LReLU、PReLU、CReLU、ELU、SELU
激活函数 ReLU、LReLU、PReLU、CReLU、ELU、SELU 的定义和区别
ReLU
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145527993-1091307500.png)
LReLU
(Leaky-ReLU)
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145538035-1768285932.png)
PReLU
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145545236-968971060.png)
其中ai是可以学习的的。如果ai=0,那么 PReLU 退化为ReLU;如果 aiai是一个很小的固定值(如ai=0.01),则 PReLU 退化为 Leaky ReLU(LReLU)。
PReLU 只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的,当不同 channels 使用相同的ai时,参数就更少了。BP 更新ai时,采用的是带动量的更新方式(momentum)。
tensorflow中:没找到啊!
CReLU
(Concatenated Rectified Linear Units)
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145602313-1029985240.png)
tensorflow中:tf.nn.crelu(features, name=None)
ELU
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145610197-536364646.png)
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145616179-1106332856.png)
其中α是一个可调整的参数,它控制着ELU负值部分在何时饱和。
右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快
tensorflow中:tf.nn.elu(features, name=None)
SELU
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145624940-882543194.png)
其实就是ELU乘了个lambda,关键在于这个lambda是大于1的。以前relu,prelu,elu这些激活函数,都是在负半轴坡度平缓,这样在activation的方差过大的时候可以让它减小,防止了梯度爆炸,但是正半轴坡度简单的设成了1。而selu的正半轴大于1,在方差过小的的时候可以让它增大,同时防止了梯度消失。这样激活函数就有一个不动点,网络深了以后每一层的输出都是均值为0方差为1。
tensorflow中:tf.nn.selu(features, name=None)
![](https://img2018.cnblogs.com/blog/1470684/201809/1470684-20180914145630708-136461443.png)
PS:
Activation Function Cheetsheet
欢迎转载,转载请保留页面地址。帮助到你的请点个推荐。