Tensorflow——tensorflow的激活函数

目录

  1. sigmoid 函数
  2. tanh函数
  3. relu 函数
  4. softplus 函数
  5. leakrelu 函数
  6. ELU 函数
  7. SELU函数

1.sigmoid 函数

这是传统的神经网络中常用的激活函数之一。
公式:
S(x) = \frac{1}{{1 + {e^{ - x}}}}
图像:

 
 

 

  • 优点:它输出映射在(0,1)内,单调连续,非常适合用作输出层,并且求导比较容易;
  • 缺点:具有软饱和性,一旦输入落入饱和区,一阶导数就变得接近于0,很容易产生梯度消失。
  • 饱和性:当|x|>c时,其中c为某常数,此时一阶导数等于0,通俗的说一阶导数就是上图中的斜率,函数越来越水平。

2. tanh函数

tanh也是传统神经网络中比较常用的激活函数。
公式:
\tanh (x) = \frac{{\sinh x}}{{\cosh x}} = \frac{{{e^x} - {e^{ - x}}}}{{{e^x} + {e^{ - x}}}} = \frac{{1 - {e^{ - 2x}}}}{{1 + {e^{ - 2x}}}}
图像:

 
 

 

3. relu 函数

relu函数是目前用的最多也是最受欢迎的激活函数。
公式:
f(x) = \max (x,0)
图像:

 
 

由上图的函数图像可以知道,
relu
 
x<0
 
时是硬饱和。由于当
x>0
 
时一阶导数为
1
 
。所以,
relu
 
函数在
x>0
 
时可以保持梯度不衰减,从而缓解梯度消失问题,还可以更快的去收敛。但是,随着训练的进行,部分输入会落到硬饱和区,导致对应的权重无法更新。我们称之为“神经元死亡”。

 

除了relu本身外,TensorFlow还定义了relu6,也就是定义在min(max(features, 0), 6)tf.nn.relu6(features, name=None),以及crelu,也就是tf.nn.crelu(features, name=None).

4. softplus 函数

softplus函数可以看作是relu函数的平滑版本
公式:
f(x) = \log (1 + {e^x})
图像:

 
 

 

5. leakrelu 函数

leakrelu函数是relu激活函数的改进版本,解决部分输入会落到硬饱和区,导致对应的权重无法更新的问题。

公式:
f(x) = \max (x,leak*x)
图像:

 
 

左边缩小方差,右边保持方差;方差整体还是缩小的,而均值得不到保障。

6. ELU 函数

公式:

图像:

 
 

 

7. SELU函数

最近的自归一化网络中提出,函数和图像如下

公式:

图像:
蓝色是:selu,橙色是:elu

 
 

左边缩小方差,右边放大方差,适当选取参数alpha和lambda,使得整体上保持方差与期望。如果选取:
lambda=1.0506,alpha=1.67326,那么可以验证如果输入的x是服从标准正态分布,那么SELU(x)的期望为0,方差为1.


作者:SpareNoEfforts
链接:https://www.jianshu.com/p/9879bdce0a60
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2018-10-24 11:19  idvcn  阅读(217)  评论(0)    收藏  举报