当前位置: 首页 > news >正文

深度学习中常见的激活函数分析

好的,我们来详细讲解一下 ReLU(Rectified Linear Unit,修正线性单元) 激活函数。

1. 定义

ReLU 是一个非常简单且常用的非线性激活函数。它的定义非常直接:

f(x) = max(0, x)

也就是说,对于输入 x:

  • 如果 x > 0,输出 x。
  • 如果 x <= 0,输出 0。

2. 函数图像

ReLU 的图像非常容易想象:

  • 对于 x < 0 的区域,函数图像是一条从负无穷到 0 的水平直线(y=0)。
  • 对于 x >= 0 的区域,函数图像是一条斜率为 1 的直线,从 (0, 0) 开始,向右上方延伸。
    在这里插入图片描述

(注:上图为示意,实际图像在 x<0 时是 y=0 的线)

3. 优点

ReLU 的受欢迎程度主要归功于它的几个显著优点:

  • 计算简单,效率高: ReLU 的计算只需要一个比较和一个取最大值操作,计算速度非常快,不需要复杂的指数或三角函数计算。
  • 缓解梯度消失问题: 这是 ReLU 最重要的优点之一。传统的激活函数如 Sigmoid 和 Tanh 在输入值较大或较小时,其导数会趋近于 0(梯度饱和),导致在深层网络中,前面层的梯度几乎为零,从而使得这些层的学习变得非常困难(梯度消失)。而 ReLU 在正区间(x>0)内的导数恒为 1,不会饱和,因此在训练深层网络时,梯度可以更有效地从前向后传播,加速训练过程。
  • 促进稀疏激活: ReLU 会将所有负的输入都置为 0。这意味着在神经网络中,只有一部分神经元会被激活(输出非零值),其余大部分神经元输出 0。这种稀疏性有助于模型关注最重要的特征,有时也能起到正则化的效果,有助于防止过拟合。

4. 缺点和注意事项

尽管 ReLU 优点众多,但它也存在一些潜在的问题:

  • 神经元死亡(Dying ReLU): 这是最常被提及的问题。当输入到 ReLU 神经元的值持续为负时,该神经元将始终输出 0,并且在反向传播中,其梯度也将为 0。如果这种情况持续发生,该神经元将停止更新,实际上从网络中“消失”了。这通常发生在输入数据的分布偏移或者初始化不当(例如,权重初始化过大导致输入值过小)的情况下。解决方法包括:
    • 使用 Leaky ReLU、Parametric ReLU 等改进版本,它们在负输入时输出一个很小的斜率(非零),使得梯度不为零,神经元仍有微弱的更新。
    • 改进初始化方法,避免权重过大导致输入值过小。
  • 非对称性: ReLU 在正负区间具有不同的行为(正区间恒为 1,负区间恒为 0)。这可能导致网络学习到的特征偏向于正方向,或者使得网络的输出范围偏向于非负数(除非最后一层使用特定的激活函数,如 Sigmoid 或 Tanh)。
  • 对负输入的处理: ReLU 会完全“丢弃”负输入,这有时可能不是最优的选择,尤其是在需要捕捉负值信息的任务中。

5. 使用场景

  • ReLU 是目前深度学习领域,尤其是在卷积神经网络(CNN)中,使用最广泛的激活函数之一。
  • 它适用于大多数需要引入非线性的场景。
  • 对于需要输出负数的层(例如,靠近输出层的分类层,通常会使用 Sigmoid 或 Softmax),可以在前一层(比如隐藏层)使用 ReLU,然后在输出层使用合适的激活函数。

6. 其他基于 ReLU 的变体

为了解决 ReLU 的一些缺点,研究者提出了多种改进版本:

  • Leaky ReLU: 在负输入区域,输出一个很小的斜率 a * x(通常 a 是一个很小的正数,如 0.01)。公式为:f(x) = max(a * x, x)。这使得即使输入为负,梯度也不会为零,缓解了神经元死亡问题。
  • Parametric ReLU (PReLU): Leaky ReLU 的升级版,a 不是一个固定的值,而是每个神经元在训练过程中学习得到的参数。
  • Exponential Linear Unit (ELU): 在负输入区域,输出一个平滑的指数函数 α * (eˣ - 1)α 是一个超参数,通常设为 1)。ELU 的优点是其均值趋近于零,并且在负区域也有平滑过渡,理论上可以缓解神经元死亡问题,使得输出更接近零,有助于训练。
  • Scaled Exponential Linear Unit (SELU): 这是一种特殊的 ELU 变体,其参数 αβ 被精心选择,使得激活函数本身具有自归一化(Self-Normalizing)的特性,有助于维持网络中激活值的均值和方差稳定。

总结

ReLU 是一个简单、高效且强大的激活函数,极大地推动了深度学习的发展,尤其是在处理图像识别等视觉任务上取得了巨大成功。尽管它存在一些已知的缺点(尤其是神经元死亡问题),但通过改进版本或调整训练策略,这些问题可以在很大程度上得到缓解。目前,ReLU 和其改进版本仍然是构建神经网络的首选激活函数之一。

http://www.lryc.cn/news/571147.html

相关文章:

  • Android Studio Jetpack Compose毛玻璃特效按钮
  • 【数据结构】栈和队列详解
  • 线性放大器设计方案:248-双极性任意波1M带宽400Vpp高压线性放大器
  • 欧拉安装vboxlinuxadditions时,出错
  • 第九章——8天Python从入门到精通【itheima】-95~96-Python的异常模块与包(自定义模块并导入+自定义Python包)
  • MySQL 命令行的核心操作命令详解
  • 资深Java工程师的面试题目(一)微服务
  • 如何高效分享WordPress博客文章
  • Sparse4D: 稀疏范式的端对端融合
  • (100)课126: 间隙锁临键锁,是为了锁定索引B+树里叶节点之间的间隙,不允许别的事务在这些间隙里插入新的叶节点,从而阻止幻读
  • 振动测控模块设计原理图:276-16路AD、10路DA嵌入式振动测控模块
  • 自然语言处理文本分类
  • Node.js 项目启动命令全面指南:从入门到精通(术语版)
  • Redis中的分布式锁之SETNX底层实现
  • vue3 watch监视详解
  • 最简单的远程桌面连接方法是什么?系统自带内外网访问实现
  • 基于Cesium的倾斜切片/模型位置方位调整工具
  • Android多媒体——MediaCodec回调与配置(二十五)
  • Android App启动流程深度解析(一):从Activity.startActivity开始
  • 常用交易所链接
  • 【PmHub面试篇】PmHub分布式事务Seata保证任务审批状态一致性面试专题解析
  • fd查找文件并拷贝
  • 【启发式算法】RRT算法详细介绍(Python)
  • OSPF 配置全攻略:从基础原理到实战演练
  • python 重要地位
  • UE/Unity/Webgl云渲染推流网址,如何与外部网页嵌套和交互?
  • 答题考试系统小程序ThinkPHP+UniApp
  • NLP学习路线图(五十一):PyTorch/TensorFlow
  • 用C语言实现面向对象思想编写驱动层--以驱动LED为例
  • R情感分析:解码文本中的情感