激活函数理解

激活函数

直观理解

Activation Function,用来做非线性变换

对于前馈神经网络模型,如果没有非线性变换的话,只能拟合线性模型,无论经过多少隐藏层,输出层都是输出特征的线性组合。添加激活函数后,相当于做了非线性变换,能够拟合更为复杂的模型。

激活函数通常具备一下性质

  • 简单的非线性函数
  • 连续并可导(要用梯度下降)
  • 单调函数(保证loss函数为凸函数)

sigmoid

sigmoid函数为S型函数,两端饱和函数,在x趋向于\(+\infty\)\(-\infty\)时导数为0,包括logistic函数和tanh函数

image-20230515155923504

logistic的输出范围是(0,1),输出非零中心化的,而tanh的输出范围是(-1,1),输出是零中心化

非零中心化的输出会使得收敛速度变慢,参考:https://liam.page/2018/04/17/zero-centered-active-function/

以下为参考文章中的截图

image-20230515163114659 image-20230515163207405 image-20230515163239839

ReLU

Rectified Linear Unit,修正线性单元

其定义为

image-20230515163322912

图像如下

image-20230131173923100
  • (+)相比于sigmoid两端饱和的函数,relu函数是左饱和的,当x>0时,导数为1,缓解了梯度消失的问题,加快了梯度下降收敛

  • (-)relu存在和logistic一样输出非零中心化的问题

  • (-)存在relu死亡现象

对于relu死亡现象的理解,参考:https://blog.csdn.net/qq_51698536/article/details/127211764

造成relu死亡的根本原因是,在对于某个神经元参数更新之后,导致这个参数变为负值(可能是学习率设置过大,或者输入值异常导致)。在此之后,在这个负参数的影响下,relu函数的输入可能是负值,对于relu函数来说,当输入小于0时,输出也是0,梯度也是0,这就导致这个参数无法更新,并一致持续下去,也就是说这个神经元在网络中不起到任何作用了,即死亡

Leaky ReLU

在输入x<0时,也给一个很小的梯度\(\lambda\),这样当神经元非激活时,也能有一个很小的梯度更新参数,从而避免relu死亡问题

image-20230515181321715

带参数的ReLU

为每一个神经元的relu引入一个可学习的参数\(\gamma_i\),允许不同的神经元有不同的参数

image-20230515181305017

ELU

指数线性单元,近似零中心化

image-20230515181249361

Softplus

ReLU函数的平滑版本

image-20230515181606120 image-20230515181754947
posted @ 2023-01-31 17:45  dctwan  阅读(70)  评论(0编辑  收藏  举报