激活函数是神经网络模型重要的组成部分。在神经网络模型中,激活函数提供了非线性建模能力(不带激活函数的感知元是线性的),进而帮助网络学习数据中的复杂模式。
Sigmoid激活函数
将输入值压缩到0到1之间的范围,公式和数学图片分别如下所示:
f ( x ) = 1 / ( 1 + e − x ) f(x) = 1 / (1 + e^{-x}) f(x)=1/(1+e−x)Sigmoid函数在早期的神经网络中广泛使用。然而,它有一些问题,如梯度消失
和梯度爆炸
,导致在深层网络中训练困难,因此现在使用较少。
当前更多的是用于二分类
中。
Tanh激活函数
是Sigmoid的改进版,将输入值映射到一个范围在-1到1
之间的值,公式和数学图像分别如下所示:
f ( x ) = ( 2 / ( 1 + e − 2 x ) ) − 1 f(x) = (2 / (1 + e^{-2x})) - 1 f(x)=(2/(1+e−2x))−1相较于Sigmoid激活函数,Tanh激活函数的输出范围更广,因此在某些情况下,它能带来更好的表现。然而,类似于Sigmoid,Tanh仍然存在梯度消失问题
,特别是对于较深的神经网络。
当前更多的是用于类似于LSTM网络结构的后面
。
ReLU(Rectified Linear Unit)是目前使用最广泛的激活函数之一
。ReLU函数在输入为正数时直接输出输入值,而在输入为负数时输出为0,公式和数学图像分别如下所示:
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)相比于Sigmoid
和Tanh
,ReLU
的梯度更大,且在深层网络中具有较快的训练速度
。然而,ReLU也存在一个问题,当输入为负数时,梯度为0,导致对应的神经元无法更新权重,这被称为"神经元死亡"问题。
当前在各种任务下广泛使用(不包括多分类任务)。
为了解决ReLU的"神经元死亡"问题,Leaky ReLU
引入了一个小的斜率(通常为0.01)
来保证在输入为负数时仍然有梯度
。Leaky ReLU函数的定义和数学图像分别如下所示:
f ( x ) = m a x ( a x , x ) f(x) = max(ax, x) f(x)=max(ax,x)其中,a是一个小于1的常数。这使得Leaky ReLU在某些场景下表现更好,但对于a的选择需要小心,过大的值可能导致函数失去非线性特性
。
当前已没有特定使用情况,同等情况下(PReLU 和Swish 激活函数可能会有更好的表现)。
Parametric ReLU是Leaky ReLU的扩展版本,它允许斜率参数a成为可学习的参数
,这样网络可以自动调整
斜率。这一特性使得Parametric ReLU更加适应不同的数据分布和任务,减少了手动调整的需求。
Swish激活函数在近年来被提出,它是一个平滑的激活函数
。Swish函数在输入为正数时与ReLU相似,在输入为负数时逐渐趋近于0。
Swish函数的表现相对于ReLU在一些情况下更好,但在某些场景下可能受到影响,因此使用时需谨慎权衡
。函数公式和数学图像分别如下所示:
f ( x ) = x ⋅ s i g m o i d ( β x ) f(x)=x⋅sigmoid(βx) f(x)=x⋅sigmoid(βx) 其中, β β β 是一个常量或一个可学习的参数。
到此,使用 激活函数介绍(一) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的激活函数
也可以在评论区提出,后续会对其进行添加!!!!
如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦。