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

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

引言

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

文章目录

  • 引言
  • 一、Sigmoid激活函数
    • 1.1 公式
    • 1.2 特点
    • 1.3 优点
    • 1.4 缺点
  • 二、ReLU激活函数
    • 2.1 公式
    • 2.2 特点
    • 2.3 优点
    • 2.4 缺点
  • 三、sigmoid和ReLU的区别
    • 3.1 计算效率
    • 3.2 梯度消失/弥散问题
    • 3.3 模型收敛速度
    • 3.4 适用场景
    • 3.5 总结
  • 四、深层网络中用哪种激活函数好
    • 4.1 结论
    • 4.2 原因
      • 4.2.1 梯度消失问题
      • 4.2.2 计算效率
      • 4.2.3 收敛速度
    • 4.3 ReLU的局限性
    • 4.4 总结
  • 五、如何解决ReLU的死亡问题
    • 5.1 Leaky ReLU
    • 5.2 Parametric ReLU (PReLU)
    • 5.3 Exponential Linear Units (ELU)
    • 5.4 Softplus
    • 5.5 使用批量归一化(Batch Normalization)
    • 5.6 初始化策略
    • 5.7 调整学习率
    • 5.8 使用较小的网络或结构
    • 5.9 混合使用不同的激活函数
    • 5.10 总结
  • 六、Tanh激活函数
    • 6.1 公式
    • 6.2 特点
      • 6.2.1 输出范围
      • 6.2.2 非线性
      • 6.2.3 计算复杂度
    • 6.3 优点
    • 6.4 缺点
    • 6.5 应用场景
    • 6.6 总结

一、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在某些情况下仍然是一个不错的选择,特别是当网络的输入或输出需要零中心化时

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ClickHouse:单机安装
  • 【数据结构】—— 队列
  • 阿里大模型调用 = 》通义千问大语言模型
  • GenAI下沉到边缘侧,内存和性能如何平衡?
  • 江科大/江协科技 STM32学习笔记P22
  • 四数之和(LeetCode)
  • Linux 系统框架分析(一)
  • PyTorch深度学习框架
  • 【vue3|第20期】vue3中Vue Router路由器工作模式
  • 编程-设计模式 24:访问者模式
  • 散点图、折线图 -- 通过javascript实现
  • Spring -- 事务
  • Day23--前后端分离项目中如何使用 Vue.js 和 Axios 加载 WebServlet 生成的验证码图片
  • 三高服务是指什么
  • Docker中新建Python容器运行yolov9
  • [译] React v16.8: 含有Hooks的版本
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Asm.js的简单介绍
  • CSS 专业技巧
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • IndexedDB
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Next.js之基础概念(二)
  • vue 配置sass、scss全局变量
  • Vue组件定义
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 初识MongoDB分片
  • 搭建gitbook 和 访问权限认证
  • 对超线程几个不同角度的解释
  • 基于webpack 的 vue 多页架构
  • 技术胖1-4季视频复习— (看视频笔记)
  • 来,膜拜下android roadmap,强大的执行力
  • 面试总结JavaScript篇
  • 浅谈web中前端模板引擎的使用
  • 线上 python http server profile 实践
  • 移动端唤起键盘时取消position:fixed定位
  • 用 Swift 编写面向协议的视图
  • 湖北分布式智能数据采集方法有哪些?
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #每天一道面试题# 什么是MySQL的回表查询
  • (35)远程识别(又称无人机识别)(二)
  • (42)STM32——LCD显示屏实验笔记
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (AngularJS)Angular 控制器之间通信初探
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)学习JVM —— 垃圾回收机制
  • (七)Knockout 创建自定义绑定
  • (数据结构)顺序表的定义
  • .gitignore文件使用
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net Signalr 使用笔记
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .Net 知识杂记