最全最详细的常见激活函数总结(sigmoid、Tanh、ReLU等)及激活函数面试常见问题总结

为什么要使用激活函数?

激活函数用来怎加非线性因素的,提高模型拟合能力。如果不存在激活函数,神经网络的每一层的输入都是对前面输入的线性变化,就算把网络加到很深也无法去拟合任意函数的。

激活函数具有的特性

虽然我们常用激活函数不是很多,那是否只有这些函数能作为激活函数呢?我们从神经网络的工作过程中看,激活函数具有什么样的性质能够更好的帮助神经网络的训练。(借鉴Hengkai Guo添加链接描述

  1. 非线性:数,激活函数必须是非线性的。
  2. 计算简单:神经元都要经过激活运算的,在随着网络结构越来越庞大、参数量越来越多,激活函数如果计算量小就节约了大量的资源。
  3. f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x:在向前传播时,如果参数的初始化是随机量的最小值,神经网络的训练很高效。在训练的时候不会出现输出的幅度随着不断训练发生倍数的增长,是网络更加的稳定,同时也使得梯度更容易回传。
  4. 可微:因为神经网络要通过反向传播来跟新参数,如果激活函数不可微,就无法根据损失函数对权重求偏导,也就无法更新权重。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响1
  5. 非饱和性:(饱和函数有Sigmoid、Tanh等,非饱和函数ReLU等)例如Sigmoid函数求导以后的值很小,两端的值接近为零在反向传播的时候,如果网络的层次过大便会发生梯度消失的问题,使得浅层的参数无法更新。(梯度消失后面会介绍)
  6. 单调性:当激活函数单调时,单层网络保证是凸函数。
  7. 输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的Learning Rate2

激活函数的类别

饱和激活函数

Sigmoid激活函数

1. 函数图像和公式
我们从图像和公式上结合上面分析的激活函数的特性来看看Sigmoid激活函数的优点和缺点。
f ( x ) = 1 1 + e − x {\rm{f}}(x) = \frac{1}{{1 + {e^{ - x}}}} f(x)=1+ex1

Sigmoid
2. 函数性质

  • 非线性函数
  • 求导简单,函数求导后为 f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) {f'}(x) = f(x)(1 - f(x)) f(x)=f(x)(1f(x))
  • 不满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
  • 在定义域内处处可导
  • 饱和激活函数
  • 函数为单调函数
  • 函数的输出区间在(0,1)之间,函数定义域为负无穷到正无穷
    3. 函数倒数图像和导数

Sigmoid导数图像和原图像
4. 优点和缺点

  • 优点:平滑、容易求导
  • 缺点:
    • 激活函数运算量大(包含幂的运算)
    • 函数输出不关于原点对称,使得权重更新效率变低,同时这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布
    • 由图像知道导数的取值范围[0,0.25],非常的小。在进行反向传播计算的时候就会乘上一个很小的值,如果网络层次过深,就会发生“梯度消失”的现象了,无法更新浅层网络的参数了。

Tanh(双曲正切函数)激活函数

1. 函数图像和公式

函数图像:
Tanh
函数公式:
f ( x ) = ( e x − e − x ) ( e x + e − x ) f(x) = \frac{{({e^x} - {e^{ - x}})}}{{({e^x} + {e^{ - x}})}} f(x)=(ex+ex)(exex)

2. 函数倒数图像和导数

导数公式:
f ′ ( x ) = 1 − ( f ( x ) ) 2 {f'}(x) = 1 - {(f(x))^2} f(x)=1(f(x))2
倒数图像:
Tanh导数图像
3. 函数性质

我们从图像和公式上结合上面分析的激活函数的特性来看看Tanh激活函数的优点和缺点,Tanh函数类似于将Sigmoid函数拉伸和向下平移的结果。

  • 非线性函数(从图像上来看是一个分段线性函数,所有的负值为0,正值不变)
  • 求导简单, f ′ ( x ) = 1 − ( f ( x ) ) 2 {f'}(x) = 1 - {(f(x))^2} f(x)=1(f(x))2
  • 不满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
  • 饱和激活函数
  • 函数为单调函数
  • 函数的输出区间在(-1,1)之间,函数定义域为负无穷到正无穷

4. 优点和缺点

  • 优点:
    • 解决了Sigmoid的输出不关于零点对称的问题
    • 也具有Sigmoid的优点平滑,容易求导
  • 缺点:
    • 激活函数运算量大(包含幂的运算
    • Tanh的导数图像虽然最大之变大,使得梯度消失的问题得到一定的缓解,但是不能根本解决这个问题

Sigmoid、Tanh激活函数引发的常见问题解决

先针对自然语言处理领域常用的RNN和LSTM网络来说
1. RNN 中为什么要采用 tanh,而不是 ReLU 作为激活函数?
(引用何之源​的回答)添加链接描述
2. 为什么LSTM模型中既存在sigmoid又存在tanh两种激活函数?
(引用知乎问题添加链接描述

非饱和激活函数

ReLU激活函数

ReLU函数代表的的是“修正线性单元”,它是带有卷积图像的输入x的最大函数(x,o)。ReLU函数将矩阵x内所有负值都设为零,其余的值不变

  1. 函数图像和公式
    公式:
    ReLu: f ( x ) = max ⁡ ( 0 , x ) f(x) = \max (0,x) f(x)=max(0,x)
    函数图像
    ReLu
    2.激活函数的性质
  • 非线性函数(虽然单侧是线性函数)
  • 计算简单是真的简单(不管是在神经网络向前计算过程中还是反向传播的时候)
  • 右侧满足 f ( x ) ≈ x {\rm{f}}(x) \approx x f(x)x
  • 右侧为单调函数
  • 输出为(0,+无穷)
  1. 优点和缺点
  1. 对于ReLU神经元“死亡”解决方案
    • 对函数进行优化,也就有了后面介绍的函数Leaky ReLU等
    • 采用较小的学习速率
    • 采用 momentum based 优化算法,动态调整学习率
  2. ReLu使用中疑问

Leaky ReLU等变种激活函数

  1. 函数图像和公式

Leaky ReLu
公式: f ( x ) = max ⁡ ( α x , x ) f(x) = \max (\alpha x,x) f(x)=max(αx,x)
函数图像跟之前的ReLu图像很像,同样的PReLU和ELU激活函数也是在ReLu的基础上针对ReLU在训练时神经元容易死亡做出了优化,基本的思路就是让函数小于0的部分不直接为0,而是等于一个很小的数,使得负轴的信息不至于完全丢弃。

  • 在残差网络中激活函数relu的使用,为什么不使用leakyrelu、rrule等改进后的激活函数呢?详细见链接
  • 为什么在生成对抗网络(GAN)中,隐藏层中使用leaky relu比relu要好?详细见链接
  1. https://zhuanlan.zhihu.com/p/73214810
  2. https://zhuanlan.zhihu.com/p/71882757

  1. Goodfellow I, Bengio Y, Courville A. Deep learning[M]. MIT press, 2016. ↩︎

  2. https://zhuanlan.zhihu.com/p/28109972 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值