大家好,我是一苟
这一期主要和大家分享一下常见的激活函数
神经网络是线性的,无法解决非线性的问题,加入激活函数就是给模型引入非线性能力
下面具体来介绍一下激活函数:
函数的取值范围为(0,1),激活函数导数取值范围为
因为激活函数的导数最大值小于1,反向传播的时候,由于链式求导,很容易出现梯度消失的问题(这也是面试中常见考点)
Tanh
从上式可以发现,激活函数进行平移和拉伸可以得到Tanh激活函数
tanh的取值范围为(-1,1),导数的取值范围为(0,1),虽然对进行了一定程度上的改进,但仍存在梯度消失的问题
ReLU
全称为 Unit,即修正线性单元函数
从下图可以发现,激活函数导数的取值为0或者1
当z>0时,ReLU 激活函数的导数恒为常数1,这就避免了 和 tanh 会在神经网络层数比较深的时候出现的梯度消失的问题;但z
此外,使用 ReLU 作为激活函数,模型收敛的速度比 和 tanh 快;
Leaky ReLU
这是对ReLU的一个改进,主要是考虑到ReLU激活函数在z
虽然能够在一定程度上解决dead ReLU的问题,但是效果并不稳定
ELU
ELU 的提出也解决了 ReLU 的问题。与 ReLU 相比,ELU 有负值,这会使激活的平均值接近零,让模型学习得更快
其中 αα不是固定的,是通过反向传播学习出来的
融合了和ReLU,左侧具有软饱和性,右侧无饱和性
GeLU
出自2016年的论文《 Error Units (GELUs)》
GELU 激活函数的优缺点:
Swish
出自2017年的论文《 for 》
Swish激活函数就是在激活函数的基础上乘上x
GLU
GLU 全称为 Gated Unit,即门控线性单元函数。
对于激活函数知识点的考察,基本上就围绕梯度消失,函数或者导数的取值范围这几个点来考
掌握每个激活函数的特性,也利于设计更好的神经网络模型