深度学习----**函数

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

1.sigmoid**函数
sigmoid的曲线如下:


深度学习----**函数

可以看到sigmoid的输出范围被压缩到(0,1),而且sigmoid的导数十分方便:sigmoid(x)x=sigmoid(x)(1sigmoid(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(w1Tx+b1,w2Tx+b2,...wkTx+bk)


深度学习----**函数

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

9. softplus


深度学习----**函数

可以看到,softplus是relu的平滑