深度学习----激活函数

参考 https://www.jiqizhixin.com/articles/2017-11-02-26
https://senitco.github.io/2017/09/05/deep-learning-activation-function/
在神经网络中,我们使用非线性激活函数,如果采用的是线性激活函数或者不采用激活函数,则还是等价于上一步进行的线性变化,网络再深,也和一层是等价的。
- sigmoid: 1 1 + e x
- tanh: e x e x e x + e x
- relu: max ( 0 , x )
- leaky-relu: max ( α x , x ) ,其中 α 是人为事先设定的
- parametric relu: max ( α x , x ) ,其中 α 是参数,网络进行学习的
- softplus: l o g ( 1 + e x )
- swish: x 1 + e x
- randomized relu: max ( α x , x ) ,其中 α 是从均匀分布里随机采样的
- maxout: max ( w 1 T x + b 1 , w 2 T x + b 2 , . . . w k T x + b k ) ,本质是一个线性分段函数

1.sigmoid激活函数
sigmoid的曲线如下:


这里写图片描述

可以看到sigmoid的输出范围被压缩到(0,1),而且sigmoid的导数十分方便: s i g m o i d ( x ) x = s i g m o i d ( x ) ( 1 s i g m o i d ( x ) )
但是它有一些缺点:

  1. 梯度消失:当输入非常大或者非常小的时候,梯度趋近于0。
  2. 输出不以零为中心。
  3. 计算成本高:exp()函数计算成本较高。

2. tanh激活函数
tanh曲线如下:


这里写图片描述
可以看到tanh函数将输出压缩到(-1,1),与sigmoid不同的是,tanh是以零为中心的。因此在实践中,tanh函数的效果好于sigmoid函数。
缺点是:
tanh函数也有饱和区,即梯度趋近于0。

3. Relu修正线性单元
最近常用的是Relu激活函数,曲线如下图所示:


这里写图片描述

优点:
- Relu可以使网络更快速地收敛,在正区域(x>0)梯度为1,不会饱和
- Relu计算效率很高
缺点:

  • 输出不以零为中心
  • 在x<0区域,输出为0,同时梯度为0,这样权重无法得到更新。当x=0时,可以采用左侧或者右侧的梯度。

注意:当learning rate很大时,一些神经元的参数进行参数更新后,再次前向传播时,可能落入x<0的区域,这个神经元dead了。因此要小心设置learning rate,不要让网络出现很多的dead神经元。也可以使用下面的Leaky Relu。

4. Leaky Relu
Leaky Relu试图修复Relu中dead的问题。既修正了数据分布,又保留了一些负轴的值。


这里写图片描述

5. parametric relu
max ( α x , x ) ,其中 α 是参数,通过网络训练获得。
y α = 0 if(y>0), else =y

6. randomized relu


这里写图片描述

suggested by the NDSB competition winner, the random α i in training is sampled from 1/U(3,8) and in test time it is fixed as its expectation, i.e., 2/(l+u)=2/11.

7. swish
由谷歌的研究者发布,论文里提到swish函数的性能优于relu函数。


这里写图片描述

8. maxout
max ( w 1 T x + b 1 , w 2 T x + b 2 , . . . w k T x + b k )


这里写图片描述

maxout的缺点是参数变成了k倍。

9. softplus


这里写图片描述

可以看到,softplus是relu的平滑

猜你喜欢

转载自blog.csdn.net/yqmind/article/details/80400899
今日推荐