神经网络中常见激活函数总结

简述

在多层神经网络中,上一层节点的输出和下一层节点的输入之间具有一个函数关系,这个函数就是激活函数。

意义

如果没有激活函数,再多层数的神经网络也是线性的,这就和原始的感知机一样了。所以激活函数为神经网络引入的非线性,神经网络强大的拟合能力,激活函数起到了举足轻重的作用。这也说明激活函数都是非线性的。

常见激活函数

1. sigmoid函数

数学表达式:sigmoid(z) = \frac{1}{1 + e^{-z}}
几何图像:

sigmoid

上图中蓝线是sigmoid函数,红线是其导数。

缺点:

  • 导致梯度消失的问题。从上面的sigmoid导数可以看出,导数的最大值为0.25,当梯度进行反向传播时,每传递一层梯度值减少到原来的1/4,如果神经网络层数较多时,梯度会变得非常接近0,出现梯度消失的现象。
  • sigmoid不是0均值(zero-centered)。非0均值的激活函数,模型为了收敛,不得不Z字形逼近最优解(参考),导致收敛速度慢。
  • 解析式中含有幂运算,计算时相对来说更加耗时。
2. tanh函数

数学表达式:tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}
几何图像:

tanh

上图中红线是tanh函数,蓝线是其导数。

特点:
相比sigmoid函数,解决了非 zero-centered 问题。但是梯度消失和和幂运算的问题依然存在。

3. Relu函数

数学表达式:Relu(x) = max(0, x)
几何图像:

relu.png

优点:

  • 解决了梯度消失的问题
  • 收敛速度快
  • 计算速度快

缺点:

  • 非zero-centered
  • Dead Relu Problem。由于负半轴始终为0,导致一些神经元永远不会被激活,相应的参数永远不会更新。

尽管存在两个问题,但是Relu仍是目前最常用的激活函数。

4. Leaky Relu函数

数学表达式:f(x) = max(\alpha x, x)

Leaky Relu激活函数就是针对Relu的Dead Relu Problem提出的。负半轴是\alpha x而不是0,\alpha 通常是一个很小的数。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容