问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深度学习中的激活函数:种类、优缺点及实现

创作时间:
作者:
@小白创作中心

深度学习中的激活函数:种类、优缺点及实现

引用
CSDN
1.
https://blog.csdn.net/yangdashi888/article/details/78015448

深度学习中的激活函数是神经网络中非常重要的组成部分,它们决定了神经元的输出是否"激活"。不同的激活函数有着各自的特点和适用场景。本文将详细介绍几种常见的激活函数及其优缺点。

1. 几种常见的激活函数

Sigmoid

Sigmoid函数(也称为逻辑激活函数)的数学表达式为:
[ \sigma(x) = \frac{1}{1 + e^{-x}} ]

Sigmoid函数能够将实值输入压缩到0~1的范围内。虽然它在历史上很流行,但现在已较少使用,主要是因为它存在以下两个缺点:

  • 梯度饱和问题:当输入非常大或非常小时,梯度接近于0,导致反向传播时权重更新缓慢。
  • 输出非零均值:Sigmoid函数的输出不是0均值的,这会导致后层神经元的输入分布不均,影响梯度更新。

Tanh

Tanh函数是Sigmoid函数的变形,其数学表达式为:
[ \tanh(x) = 2\sigma(2x) - 1 ]

Tanh函数将实值输入压缩到-1~1的范围内,解决了Sigmoid函数的非零均值问题。但同样存在梯度饱和的问题。

ReLU

ReLU(Rectified Linear Unit)函数的数学表达式为:
[ f(x) = \max(0, x) ]

ReLU函数近年来越来越受欢迎,主要优点包括:

  • 收敛速度快:Krizhevsky等人发现使用ReLU的SGD收敛速度比Sigmoid/Tanh快很多。
  • 计算复杂度低:ReLU只需要一个阈值就可以得到激活值,计算效率高。

但ReLU也存在一个缺点:当输入小于0时,梯度为0,可能导致神经元"坏死"。

Leaky ReLU

Leaky ReLU是为了克服ReLU的缺点而设计的,其数学表达式为:
[ f(x) = \begin{cases} ax & \text{if } x < 0 \ x & \text{if } x \geq 0 \end{cases} ]
其中a是一个很小的常数(如0.01)。

Leaky ReLU在x<0时仍能保留一定的梯度,避免了神经元"坏死"的问题。但关于其效果,目前还没有统一的结论。

PReLU

PReLU(Parametric ReLU)是对Leaky ReLU的改进,将a作为一个可训练的参数。Kaiming He等人在2015年的论文中指出,将a作为参数训练可以进一步提高模型性能。

Randomized Leaky ReLU (RReLU)

RReLU是Leaky ReLU的随机版本,训练时a从高斯分布中随机采样,测试时再进行修正。

激活函数的实现代码

以下是上述激活函数的C语言实现代码:

static inline float linear_activate(float x){return x;}
static inline float logistic_activate(float x){return 1./(1. + exp(-x));}
static inline float loggy_activate(float x){return 2./(1. + exp(-x)) - 1;}
static inline float relu_activate(float x){return x*(x>0);}
static inline float elu_activate(float x){return (x >= 0)*x + (x < 0)*(exp(x)-1);}
static inline float relie_activate(float x){return (x>0) ? x : .01*x;}
static inline float ramp_activate(float x){return x*(x>0)+.1*x;}
static inline float leaky_activate(float x){return (x>0) ? x : .1*x;}
static inline float tanh_activate(float x){return (exp(2*x)-1)/(exp(2*x)+1);}

其他激活函数

除了上述激活函数外,近年来还出现了Swish和Mish等新型激活函数。其中,Mish函数因其平滑的特性而受到关注。

从上图可以看出,Mish相对于ReLU和Swish显得更加平滑,这可能有助于提高模型的性能和稳定性。

总结

选择合适的激活函数对于深度学习模型的性能至关重要。不同的激活函数在梯度消失、计算效率和模型性能等方面各有优劣。在实际应用中,可以根据具体任务和模型需求来选择最适合的激活函数。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号