【机器学习之深度学习】Sigmoid和ReLU的联系与区别、ReLU如何解决死亡问题以及Tanh激活函数的基本概念

引言

在机器学习中,SigmoidReLU是两种常用的激活函数,它们在神经网络中扮演着重要的角色,但各有特点和适用场景

一、Sigmoid激活函数

在这里插入图片描述

1.1 公式

f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1

1.2 特点

将输入值映射到0到1之间的概率值,适用于二分类问题的输出层

1.3 优点

输出值介于0和1之间,可以解释为概率

1.4 缺点

  • 当输入值非常大或非常小的时候,梯度几乎接近于0,导致梯度消失问题
  • 输出不是零中心,可能影响训练稳定性

二、ReLU激活函数

在这里插入图片描述

2.1 公式

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x

2.2 特点

在正值范围内具有线性特性,计算速度快

2.3 优点

计算简单,输出是零中心,有助于加速训练过程和改善训练稳定性

2.4 缺点

在负值域内梯度为零,可能导致“死亡ReLU”问题,即某些神经元可能永远不会被激活

三、sigmoid和ReLU的区别

3.1 计算效率

ReLU的计算效率高于Sigmoid,因为ReLU的计算更简单

3.2 梯度消失/弥散问题

Sigmoid存在梯度消失问题,尤其是在深度神经网络中;而ReLU在负值域内没有梯度,但相对较少出现梯度弥散问题

3.3 模型收敛速度

ReLU有助于加快模型收敛速度,而Sigmoid可能需要更长的训练时间

3.4 适用场景

Sigmoid适用于二分类问题,而ReLU在处理多分类问题、图像识别、自然语言处理等任务时更为常见

3.5 总结

SigmoidReLU各有优缺点,选择哪种激活函数取决于具体的应用场景和需求

四、深层网络中用哪种激活函数好

4.1 结论

在深层网络中,ReLU通常是比Sigmoid更受欢迎的选择

4.2 原因

4.2.1 梯度消失问题

Sigmoid函数在输入非常大或非常小的时候,其输出接近于0或1,导致梯度接近于0。在深层网络中,这种梯度消失问题会随着层数的增加而加剧,使得网络难以训练。而ReLU函数在正值域内的梯度恒为1,能有效减少梯度消失问题。

4.2.2 计算效率

ReLU函数的计算比Sigmoid简单,因为它主要涉及阈值操作,这有助于加速深层网络的训练过程。

4.2.3 收敛速度

ReLU函数有助于网络更快地收敛,因为它提供了更直接的梯度信息。

4.3 ReLU的局限性

ReLU会有“死亡ReLU”问题,即某些神经元可能因为输入始终为负而永远不被激活。为了解决这个问题,出现了几种改进的ReLU变体,如Leaky ReLUParametric ReLU(PReLU) 和ELU

4.4 总结

对于深层网络,ReLU或其变体通常是更合适的选择,因为它们更能应对深层网络训练中的挑战。但是,最终的选择还应该基于具体的应用场景和数据集,有时也可能需要通过实验来确定最佳的激活函数

五、如何解决ReLU的死亡问题

ReLU激活函数的“死亡问题”(也称为“ReLU消失”或“ReLU饱和”)是指在某些情况下,神经元可能因为输入始终为负而输出始终为零,导致这些神经元在训练过程中停止学习

以下是一些解决或减轻ReLU死亡问题的方法:

5.1 Leaky ReLU

  • Leaky ReLUReLU添加了一个小的负斜率,通常设定为0.01。这意味着当输入小于零时,输出不再是零,而是输入的一个小倍数
  • 公式: f ( x ) = max ⁡ ( 0.01 x , x ) f(x) = \max(0.01x, x) f(x)=max(0.01x,x)

5.2 Parametric ReLU (PReLU)

  • PReLULeaky ReLU类似,但负斜率是一个可学习的参数,可以在训练过程中被优化

5.3 Exponential Linear Units (ELU)

  • ELU函数在负值域内具有指数衰减的特性,且在x=0时导数为1,有助于缓解梯度消失问题
  • 公式: f ( x ) = { x if  x > 0 α ( e x − 1 ) if  x ≤ 0 f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{if } x \leq 0 \end{cases} f(x)={xα(ex1)if x>0if x0
  • α是超参数,通常设定为1

5.4 Softplus

  • SoftplusReLU的一个平滑版本
  • 公式: log ⁡ ( 1 + e x ) \log(1 + e^x) log(1+ex)
  • 它没有ReLU的硬拐点,但计算成本较高

5.5 使用批量归一化(Batch Normalization)

  • 批量归一化可以减少内部协变量偏移,使激活函数的输入分布在训练过程中保持稳定,这有助于减少ReLU死亡问题

5.6 初始化策略

  • 使用合适的权重初始化策略,如He初始化或Xavier初始化,可以帮助减少神经元在前向传播中激活为负值的概率

5.7 调整学习率

  • 使用适当的学习率可以帮助网络更好地逃离局部最小值,减少神经元死亡的可能性

5.8 使用较小的网络或结构

  • 较小的网络结构可能减少神经元死亡的问题,因为每个神经元的输入范围更易于控制

5.9 混合使用不同的激活函数

  • 在网络的某些层使用ReLU,而在其他层使用不同的激活函数,如SigmoidTanh,可以结合不同激活函数的优点。

5.10 总结

通过这些方法,可以在一定程度上减轻或解决ReLU的死亡问题,从而提高神经网络训练的稳定性和性能

六、Tanh激活函数

在机器学习中,Tanh(双曲正切)激活函数是另一种常用的非线性激活函数
在这里插入图片描述

6.1 公式

f ( x ) = tanh ⁡ ( x ) = e x − e − x e x + e − x f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=tanh(x)=ex+exexex

6.2 特点

6.2.1 输出范围

Tanh函数的输出范围在-1到1之间,这意味着它的输出是零中心的,这有助于在训练过程中保持输入数据的均值接近于零

6.2.2 非线性

Tanh函数在其定义域内是严格单调递增的,并且是非线性的,这使得它能够引入模型中的非线性因素,这对于学习复杂的函数映射至关重要

6.2.3 计算复杂度

Tanh函数的计算复杂度高于ReLUSigmoid,因为它涉及指数运算

6.3 优点

  • 输出是零中心的,这有助于加速学习过程,特别是在使用梯度下降算法时
  • Sigmoid函数更广的输出范围可以提供更强的表达能力

6.4 缺点

  • 仍然存在梯度消失问题,尤其是在深层网络中
  • 计算成本高于ReLU

6.5 应用场景

  • Tanh激活函数常用于隐藏层,尤其是在处理需要零中心输出的场景
  • 在某些情况下,它可以用作输出层激活函数,尤其是在输出值需要在-1到1之间的情况

6.6 总结

  • 在选择激活函数时,通常需要根据具体问题和网络架构来决定
  • ReLU由于其简单性和在许多任务中的有效性,通常是最常用的选择,尤其是在深层网络中
  • Tanh在某些情况下仍然是一个不错的选择,特别是当网络的输入或输出需要零中心化时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值