【AI知识】激活函数介绍(sigmoid Tanh Relu)+ 梯度爆炸 / 消失及解决办法

news2024/12/15 15:18:42

激活函数:

  • 使用激活函数的原因:

    神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,如果没有激活函数,无论构造的神经网络多么复杂,有多少层,最后的输出都是输入的线性组合,纯粹的线性组合并不能够解决更为复杂的问题。而引入激活函数之后,常见的激活函数都是非线性的,因此也会给神经元引入非线性元素,使得神经网络可以逼近其他的任何非线性函数,这样可以使得神经网络应用到更多非线性模型中。

  • Sigmoid函数 f ( z ) = 1 1 + e − z f(z)=\frac{1}{1+e^{-z}} f(z)=1+ez1 导数 f ( z ) ( 1 − f ( z ) ) f(z)(1-f(z)) f(z)(1f(z))

    下图是Sigmoid函数(左)及其导数的图像(右),求导过程:Sigmoid函数求导

在这里插入图片描述

  • 值域为(0,1),相当于对每个神经元的输出进行了归一化,适合用于将预测概率作为输出的模型,且预测明确,预测值十分接近1/0。

  • 导数最大值为0.25,很多输出接近 0 或 1 的神经元其梯度趋近于 0(饱和神经元)。因链式法则需要连乘,故进行反向传播时容易导致梯度消失。前边神经元的权重可能得不到更改。

  • 导数计算是指数运算,计算成本高。

  • 输出不以零为中心的,导致梯度下降的收敛速度变慢。关于原点对称的输入和中心对称的输出

  • Tanh函数: f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} f(x)=ex+exexex 导数 f ′ ( x ) = 1 − f ( x ) 2 f'(x)=1-f(x)^2 f(x)=1f(x)2

  • 解决了sigmoid函数输出不以零为中心的问题

  • 导数范围在(0,1)之间,梯度消失问题有所缓解

  • 在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层

  • ReLU函数: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x) 导数 1/0

    • 当输入为正时,导数为1,一定程度上改善了梯度消失问题,加速梯度下降的收敛速度
    • 没有指数运算,计算简单高效
    • 被认为具有生物学合理性,比如单侧抑制(在输入是负值的情况下,它会输出0,那么神经元就不会被激活。这意味着同一时间只有部分神经元会被激活,从而使得网络很稀疏,对计算来说是非常有效率的)、宽兴奋边界(即兴奋程度可以非常高)
    • Dead ReLU: 如果输入激活函数的值总是负的,那么反向传播过程经过该处的梯度恒为0,对应的权重和偏置参数此次无法得到更新。如果对于所有的样本输入,该激活函数的输入都是负的,那么该神经元再也无法学习,称为神经“死亡”。
    • 输出不以零为中心的问题
  • Leaky ReLU函数: 用于解决ReLU神经元死亡的问题,LeakyReLU输入小于0的部分,值为负,且有微小的梯度α,α取值一般为0.01。

  • PReLU函数: 可以看作是Leaky ReLU的一个变体。在PReLU中,负值部分的斜率是根据数据来定的,而非预先定义的。

  • ELU函数: ELU(Exponential Linear Unit),函数定义及图像如下图:

    在这里插入图片描述

总结: 通过上述的讨论可以看出,理想的激活函数应满足两个条件:1)输出的分布是零均值的,可以加快训练速度。2)激活函数是单侧饱和的,可以更好的收敛。

梯度爆炸 :梯度可能在更新过程中累积到很大,造成网络权重的大量更新,进而导致网络不稳定,模型损失在训练过程中变为NaN(训练过程中由于学习率等超参数设置的不合理,导致优化过程中没有减小loss,反而因为震荡导致loss逐渐增大,最终超过了float表示范围,出现NaN)

梯度消失 :梯度可能在更新过程中不断衰减直到接近0,导致神经元无法更新。

梯度爆炸/消失的可能原因 :1)隐藏层的层数过多;2)激活函数不合适;3)初始权重过大;4)使用不合适的学习率

解决梯度爆炸办法:

  • 梯度裁剪(Gradient Clipping): 通过设定一个阈值来限制梯度的最大值,如果梯度超过了这个阈值,就将其缩放到阈值范围内。

  • 权重初始化(Weight Initialization): 合理的权重初始化确保每一层的输出不会太大,避免了反向传播中梯度的放大效应。

  • 使用合适的激活函数: ReLU 激活函数容易导致梯度爆炸,尤其是当输入值非常大时,ReLU 的导数保持为 1,导致梯度的快速传播,可使用 Leaky ReLU、ELU等激活函数,在输入较大时提供更好的梯度控制。

  • 使用自适应优化器: 使用如 Adam、RMSprop 这样的自适应优化器,它们会根据梯度的大小动态调整学习率,从而防止在梯度过大时,更新的步伐过大。

解决梯度消失办法:

  • 使用合适的激活函数: 如ReLU 和其变种在正区间的梯度恒定为 1,不会出现梯度过小的问题,因此能够有效避免梯度消失。

  • 权重初始化(Weight Initialization): 合适的初始化方法可以确保梯度在传播过程中不会迅速衰减,从而防止梯度消失。

  • Batch Normalization(批量归一化): 通过对每一层输入进行标准化来加速训练,它对每一层的输入进行均值和方差归一化,使得每一层的输入分布保持稳定。

  • 使用残差网络(ResNet): 通过引入跳跃连接将输入直接传递到下一层或跳过某些层,这样可以直接传递梯度,避免了梯度在深层网络中逐渐消失的问题。

  • 调整学习率: 较小的学习率在一定情况下有助于训练过程的稳定性,特别是在处理梯度消失的问题时(但也会导致收敛速度变慢)

参考:详解激活函数(Sigmoid/Tanh/ReLU/Leaky ReLu等)
一文搞懂激活函数(Sigmoid/ReLU/LeakyReLU/PReLU/ELU)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2259993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

驱动开发-入门【1】

1.内核下载地址 Linux内核源码的官方网站为https://www.kernel.org/,可以在该网站下载最新的Linux内核源码。进入该网站之后如下图所示: 从上图可以看到多个版本的内核分支,分别为主线版本(mainline)、稳定版本&#…

3D 生成重建038-DiffGS训练一个3DGS编码器来简化训练

3D 生成重建038-DiffGS训练一个3DGS编码器来简化训练 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 三维高斯溅射(3DGS)在渲染速度和保真度方面表现出了令人信服的性能,但由于其离散性和非结构性,高斯溅射的生成仍然是一…

【渗透测试一】信息收集

信息收集简介 定义 信息收集是渗透测试和网络安全评估等活动的初始关键阶段。它是指通过各种合法手段(如网络扫描、查询公开数据库、社会工程学等),收集与目标系统(包括网络、主机、应用程序、组织等)相关的信息&…

小迪笔记第五十一天-前后台功能点文件下载文件读取文件删除目录遍历目录穿越

前言 前后台功能点 就是因为权限的不同而造成的 功能的不同 一般这个文件的 下载 文件的读取 一般出现在前台 而人家的删除和遍历 目录的穿越出现在 后台 以这个海洋cms 为例进行 演示 (源码在后台) 后台管理地址:http://192.168…

「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念,并解决一个经典问题:斐波那契数列。学生将学习如何使用动态规划优化递归计算,并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …

phidata - 具有记忆、知识、工具和推理能力的多模态代理

Phidata 是一个用于构建多模态代理的框架,使用 phidata 可以:使用内存、知识、工具和推理构建多模式代理。建立可以协同工作解决问题的代理团队。使用漂亮的 Agent UI 与您的代理聊天。 16200 Stars 2200 Forks 28 Issues 82 贡献者 MPL-2.0 License Pyt…

第六届全球校园人工智能算法精英大赛-算法巅峰专项赛(系列文章)-- 开篇

前言 “全球校园人工智能算法精英大赛”是江苏省人工智能学会举办的面向全球具有正式学籍的全日制高等院校及以上在校学生举办的算法竞赛。其中的算法巅峰专项赛是新赛道,2024年是其第一届比赛。 翻阅过所有赛道的题目,题目出的真心可以,很具…

柚坛工具箱Uotan Toolbox适配鸿蒙,刷机体验再升级

想要探索智能设备的无限可能?Uotan Toolbox(柚坛工具箱)将是您的得力助手。这款采用C#语言打造的创新型开源工具箱,以其独特的设计理念和全面的功能支持,正在改变着用户与移动设备互动的方式。 作为一款面向专业用户的…

‘Close Project‘ is not available while IDEA is updating indexes的解决

XXX is not available while IDEA is updating indexes IDEA 1.Remove from Recent Projects 2.重新 Open工程即可

[笔记] 编译LetMeowIn(C++汇编联编程序)过程

文章目录 前言过程下载源码vs2017 创建空项目 引入编译文件改项目依赖属性改汇编编译属性该项目还需注意编译运行 总结 前言 编译LetMeowin 项目发现是个混编项目,c调用汇编的程序,需要配置一下,特此记录一下 过程 下载源码 首先下载源码…

Linux系统操作03|chmod、vim

上文: Linux系统操作02|基本命令-CSDN博客 目录 六、chmod:给文件设置权限 1、字母法 2、数字法(用的最多) 七、vim:代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…

SpringCloud微服务实战系列:01让SpringCloud项目在你机器上运行起来

目录 项目选型 项目安装-本地运行起来 软件安装: 项目启动: 总结&答疑 项目选型 软件开发,基本上都不会从0开始,一般都是在其他项目或者组件的基础上进行整合优化迭代,站在巨人肩膀上才能看得更远&#xff0c…

Python鼠标轨迹算法(游戏防检测)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

npm error Error: Command failed: F:\360Downloads\Software\nodejs\node.exe

前言: 电脑环境:win7 node版本:18.20.0 npm版本:10.9.2 情景再现:电脑上是存在的vuevite的项目且可以正常运行。想着摸鱼的时间复习一下ts语法,所以想创建一个demo。按照 开始 | Vite 官方中文文档 官网创建…

软件工程 设计的复杂性

复杂性代表事件或事物的状态,它们具有多个相互关联的链接和高度复杂的结构。在软件编程中,随着软件设计的实现,元素的数量以及它们之间的相互联系逐渐变得庞大,一下子变得难以理解。 如果不使用复杂性指标和度量,软件…

大屏开源项目go-view二次开发3----象形柱图控件(C#)

环境搭建参考: 大屏开源项目go-view二次开发1----环境搭建(C#)-CSDN博客 要做的象形柱图控件最终效果如下图: 其实这个控件我前面的文章也介绍过,不过是用wpf做的,链接如下: wpf利用Microsoft.Web.WebView2显示html…

ORB-SLAM3源码学习:G2oTypes.cc: void EdgeInertial::computeError 计算预积分残差

前言 这部分函数涉及了g2o的内容以及IMU相关的推导内容,需要你先去进行这部分的学习。 1.函数声明 void EdgeInertial::computeError() 2.函数定义 涉及到的IMU的公式: {// TODO Maybe Reintegrate inertial measurments when difference between …

Kafka - 消息乱序问题的常见解决方案和实现

文章目录 概述一、MQ消息乱序问题分析1.1 相同topic内的消息乱序1.2 不同topic的消息乱序 二、解决方案方案一: 顺序消息Kafka1. Kafka 顺序消息的实现1.1 生产者:确保同一业务主键的消息发送到同一个分区1.2 消费者:顺序消费消息 2. Kafka 顺…

[MoeCTF 2021]unserialize

[广东强网杯 2021 团队组]欢迎参加强网杯 这题简单&#xff0c;flag直接写在脸上 NSSCTF {Wec10m3_to_QwbCtF} [MoeCTF 2021]unserialize <?phpclass entrance {public $start;function __construct($start){// 构造函数初始化 $start 属性$this->start $start;}fun…

舌头分割数据集labelme格式2557张1类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;2557 标注数量(json文件个数)&#xff1a;2557 标注类别数&#xff1a;1 标注类别名称:["tongue"] 每个类别标注的框数&#xff1…