【神经网络 基本知识整理】(激活函数) (梯度+梯度下降+梯度消失+梯度爆炸)

神经网络 基本知识整理

  • 激活函数
    • sigmoid
    • tanh
    • softmax
    • Relu
  • 梯度
    • 梯度的物理含义
    • 梯度下降
    • 梯度消失and梯度爆炸

激活函数

我们知道神经网络中前一层与后面一层的连接可以用y = wx + b表示,这其实就是一个线性表达,即便模型有无数的隐藏层,简化后依旧是上述的线性表达式,那么模型的拟合能力非常受限。因此引入了激活函数σ,y = σ(wx + b),使得模型能够拟合非线性的问题。常用的激活函数详解可参考👉激活函数详解 ///激活函数详解

sigmoid

sigmoid激活函数表达式是: f ( x ) = 1 1 + e − x f(x) = \frac{1}{1+e^{-x}} f(x)=1+ex1
sigmoid常用于二分类中(输出层而非中间层),因为其能够很好的拟合0~1这个范围内的数。函数图像如下:
在这里插入图片描述
sigmoid函数的导数为: f ′ ( x ) = f ( x ) ∗ ( 1 − f ( x ) ) f'(x) = f(x)*(1-f(x)) f(x)=f(x)(1f(x))
根据图像也能看出其导数在x极大or极小的时候,导数是趋近于0的;即便是x=0时,取其导数的最大值,依旧只有1/4,因此如果将sigmoid作为中间层的激活函数,在利用链式法则反向求导的过程中,很容易导致梯度消失

根据sigmoid激活函数的特点,可以得到对应的优缺点。

优点:

  • 可解释性强:Sigmoid 函数的输出在 0 到 1 之间,可以被解释为概率,特别适用于二分类问题。
  • 平滑性:Sigmoid 函数是连续可导的,因此在梯度下降等优化算法中应用较为方便。
  • 求导方便,不需要额外的计算量。

缺点:

  • 以(0, 0.5)为对称中心,原点不对称,容易改变输出的数据分布;
  • 梯度饱和:在输入较大或较小的情况下,Sigmoid 函数的梯度会非常接近于 0,导致梯度消失问题,影响模型的训练效果;导数取值范围为(0, 0.25],连乘后梯度呈指数级减小,所以当网络加深时,浅层网络梯度容易出现梯度消失;
  • 输出不以 0 为中心:Sigmoid 函数的输出均值不为 0,可能导致在反向传播过程中出现偏移,影响模型的收敛速度;

tanh

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
tanh函数是奇函数,关于原点对称,导数为: f ′ ( x ) = 1 − ( f ( x ) 2 ) f'(x) = 1-(f(x)^{2}) f(x)=1(f(x)2)
tanh函数图像如下图所示👇。tanh和sigmoid非常相似,tanh可看作sigmoid放大平移的。
在这里插入图片描述
优点:

  • 输出以 0 为中心:Tanh 函数的输出均值为 0,相比 Sigmoid 函数,Tanh 函数对数据的均值变化更为敏感,有助于模型的训练。
  • 非线性特性:Tanh 函数是非线性的,可以帮助神经网络学习和表示复杂的函数关系。
    缺点:
  • 梯度饱和:与 Sigmoid 函数类似,Tanh 函数在输入较大或较小的情况下,梯度会接近于 0,可能导致梯度消失问题。
  • 计算复杂度:Tanh 函数的计算相对复杂,可能会增加模型的计算成本。

softmax

softmax是sigmoid的拓展,表达式: f ( x i ) = e x i ∑ j = 1 n e x j f(x_{i}) = \frac{e^{x_{i}}}{\sum_{j=1}^{n}e^{x_{j}}} f(xi)=j=1nexjexi
softmax激活函数常用于多分类场景,对最后一层神经网络的输出进行转换,同时常搭配交叉熵损失函数使用: L ( y , y ^ ) = − ∑ j = 1 n y j log ⁡ ( y j ^ ) L(y,\hat{y}) = -\sum_{j=1}^{n}y_{j}\log(\hat{y_{j}}) L(y,y^)=j=1nyjlog(yj^)

优点:

  • 归一化:Softmax 函数可以将输出转化为概率分布,所有输出的和为 1,适用于多分类问题。
  • 平滑性:Softmax 函数的输出相对平滑,有助于模型的训练和收敛。

缺点:

  • 计算复杂度:Softmax 函数的计算相对复杂,尤其在类别数目很大时,可能会增加模型的计算成本。
  • 容易受到异常值影响:在输入较大或较小的情况下,Softmax 函数的输出可能会非常接近 0 或 1,使得模型对异常值比较敏感。

Relu

Relu函数是一个分段函数,其每一段都是线性的,但由于分段使其在全局内是非线性的,音系Relu是一个非线性的函数。表达式: f ( x ) = m a x ( x , 0 ) f(x) = max(x,0) f(x)=max(x,0)
图像:
在这里插入图片描述
Relu两段导数都是固定的常数,因此常用于神经网络的中间层。但是Relu将x<0这一段直接设置为0,很多神经元阶段的输出为0,使得神经元失活。因此有很多Relu的变性,比如Leaky_Relu,在x<0的一段引入很小的斜率。

优点:

  • 非饱和性:相比于 Sigmoid 和 Tanh 函数,ReLU 在正区间上不会饱和,减少了梯度消失问题,有助于训练深层网络。
  • 计算简单:ReLU 函数的计算相对简单,只需判断输入是否大于 0,因此在实际应用中的计算速度较快。
  • ReLU 函数广泛应用于隐藏层,特别是在深度卷积神经网络(CNN)中,有助于加速模型的训练。

缺点:

  • 死亡 ReLU:在训练过程中,部分神经元可能永远不会被激活(输出恒为 0),导致这些神经元对应的权重无法更新,称为“死亡 ReLU”问题。
  • 输出不以 0 为中心:与 Tanh 相比,ReLU 函数的输出不以 0 为中心,可能导致一些问题,如收敛速度较慢。

ReLU 的变体:

  • Leaky ReLU:解决了“死亡 ReLU”问题,引入一个小的斜率(通常很小的斜率值,如0.01),使得负数输入时也有少量的输出。
  • Parametric ReLU (PReLU):与 Leaky ReLU 类似,但斜率是一个可学习的参数,可以通过反向传播进行训练。
  • Randomized Leaky ReLU (RReLU):斜率在训练过程中是随机的,但在测试时取平均值,有一定的正则化效果。
  • Exponential Linear Unit (ELU):引入了负半轴的指数函数,解决了 ReLU 的输出不以 0 为中心的问题,并且对负数输入有非零输出。

梯度

梯度的物理含义

我们在学习y=f(x)这样的一元函数的导数的时候,知道函数在某一点的导数其实就是在该点切线的斜率,反应了函数在该点的变化方向以及变化速率,注意这个方向其实是函数增加的方向
在这里插入图片描述
在空间中一个点有无数个方向,一个多元函数在某一个点也必然有无线多个方向。此时引入了梯度,梯度是多元函数对每一个变元求偏导后组成的偏导向量。多元函数对某一变元求偏导得到的是函数在某坐标轴的变化率,将这些偏导组合得到的梯度就代表多元函数在某一点变化最快的方向(该向量指向的方向)以及变化的速率(向量的模),同样这里的变化是指函数增长,那么反方向就是函数减小:
在这里插入图片描述

梯度下降

机器学习的目标函数/损失函数是关于可训练参数W的多元函数,这个函数在某一点的梯度(这里的某一点就是某一个数据点[(x1,x2,x3,…,xn), y])反应了误差变化的方向与快慢,之后用这个梯度来更新参数W,使得损失函数值减少,直到找到全局最优or局部最优。 用梯度更新参数的过程其实就是梯度下降算法,多层网络从后往前逐层计算梯度的过程是误差反向传播,两者结合训练模型。 梯度下降具体可以用如下式子表示:
在这里插入图片描述
梯度下降是用➖,梯度上升就用➕。因为前面提到梯度是函数增加的方向,我们一般是需要损失函数最小(局部或者全局),因此是沿着梯度的反方向。 这里的W是所有参数组成的向量;α是学习率,学习率过高和过低都不行【过低更新缓慢,时间长且可能局部最优;过高变化太大,可能一直动荡不收敛,可能错过最优点,可能造成梯度爆炸】,可以去了解一下torch里面的优化器optimizer对lr的调整策略👉pytorch自适应学习率调整。

这里需要注意的是,对于每一个数据点都有一个梯度,我们实际是需要将目标函数在所有数据点上的梯度求均值,然后进行一次参数更新的(full-batch)。但训练数据是上万的,一次计算所有数据点的梯度计算量很大,因此在实际操作中会将数据集数据进行分批处理,每次对一个batch的数据点求目标函数的梯度均值,然后进行一次参数更新(mini-batch)。可参考👉mini-batch

梯度消失and梯度爆炸

梯度是根据链式法则,从后往前反向计算的。如果网络太深,前面层对应参数的偏导会极小或者极大,这就是梯度消失和梯度爆炸。

  • 梯度消失:指在反向传播过程中,梯度逐渐变小,最终接近于零。这意味着底层神经元的权重几乎不会被更新,导致网络无法学习到底层特征,从而影响了整个网络的性能。梯度消失通常出现在使用 Sigmoid 或 Tanh 等饱和性激活函数时,因为这些函数在输入较大或较小的情况下梯度接近于零。
  • 梯度爆炸:指梯度变得非常大,甚至超出了计算机可以表示的范围。这会导致参数的更新值非常大,模型的行为变得不稳定,甚至可能无法收敛。
    以实际的例子讨论【参考梯度消失和梯度爆炸】:
    在这里插入图片描述
    要计算误差关于b1这个参数的偏导,通过链式法则得到看上面的式子,假设σ是sigmoid函数,上面分析了sigmoid的导数值在0~0.25之间:
    在这里插入图片描述
  • 随着网络层数的增加,前面层的偏导中会有越来越多的σ’的连乘,导数会越来越小;
  • 如果一开始w初始化很大,使得(σ' * wi)>1,那么同样随着网络层数的增加,(σ’ * wi)连乘使得偏导越来越大。

避免梯度消失or梯度爆炸的方法中,Batch normalization(批标准化)是非常重要的,后续再总结!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跳绳计数,YOLOV8POSE

跳绳计数&#xff0c;YOLOV8POSE 通过计算腰部跟最初位置的上下波动&#xff0c;计算跳绳的次数

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…

Github 2024-03-18开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-18统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目7TypeScript项目3非开发语言项目1Solidity项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476 天协议类型…

ubuntu下在vscode中配置matplotlibcpp

ubuntu下在vscode中配置matplotlibcpp 系统&#xff1a;ubuntu IDE&#xff1a;vscode 库&#xff1a;matplotlib-cpp matplotlibcpp.h文件可以此网址下载&#xff1a;https://github.com/lava/matplotlib-cpp 下载的压缩包中有该头文件&#xff0c;以及若干实例程序。 参考…

无人机助力智慧农田除草新模式,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建无人机航拍场景下的农田杂草检测识别系统

科技发展到今天&#xff0c;无人机喷洒药物已经不是一件新鲜事情了&#xff0c;在很多高危的工作领域中&#xff0c;比如高空电力设备除冰&#xff0c;电力设备部件传送更换等等&#xff0c;无人机都可以扮演非常出色的作用&#xff0c;前面回到老家一段时间&#xff0c;最近正…

笔记本固态硬盘损坏数据恢复两种方法 笔记本固态硬盘损坏如何恢复

大家好&#xff01;今天要跟大家分享的是笔记本固态硬盘损坏数据恢复的两种方法。相信很多小伙伴都遇到过这种情况&#xff0c;电脑突然蓝屏或者死机&#xff0c;再开机后发现自己的数据不见了&#xff0c;这时候该怎么办呢&#xff1f;这可真是让人头疼。毕竟&#xff0c;我们…

设计模式学习笔记 - 设计原则与思想总结:2.运用学过的设计原则和思想完善之前性能计数器项目

概述 在 《设计原则 - 10.实战&#xff1a;针对非业务的通用框架开发&#xff0c;如何做需求分析和设计及如何实现一个支持各种统计规则的性能计数器》中&#xff0c;我们讲解了如何对一个性能计数器框架进行分析、设计与实现&#xff0c;并且实践了一些设计原则和设计思想。当…

ASP.NET通过Appliaction和Session统计在人数和历史访问量

目录 背景: Appliaction&#xff1a; Session&#xff1a; 过程&#xff1a; 数据库&#xff1a; Application_Start&#xff1a; Session_Start&#xff1a; Session_End&#xff1a; Application_End&#xff1a; 背景: 事件何时激发Application_Start在调用当前应用…

REDHAWK——连接(续)

文章目录 前言一、突发 IO1、数据传输①、输入②、输出 2、突发信号相关信息 (SRI)3、多输出端口4、使用复数数据①、在 C 中转换复数数据 5、时间戳6、端口统计①、C 二、消息传递1、消息生产者①、创建一个消息生产者②、发送消息 2、消息消费者①、创建消息消费者②、注册接…

Ruoyi前后端分离项目部署至Tomcat上

项目部署 4.1.前端打包 disaster-ui目录下为本项目的前端所在位置&#xff0c;在命令行窗口进入该目录&#xff0c;然后输入npm run build:prod部署前端Vue项目,或者直接在disaster-ui/bin目录下双击build.bat文件部署前端。 图 4-1 前端部署图 4.2 环境变量 在MySQL可视化…

Vmware虚拟机配置虚拟网卡

背景 今天同事咨询了我一个关于虚拟机的问题&#xff0c;关于内网用Vmware安装的虚拟机&#xff0c;无法通过本机访问虚拟上的Jenkins的服务。   验证多次后发现有如下几方面问题。 Jenkins程序包和JDK版本不兼容&#xff08;JDK1.8对应Jenkins不要超过2.3.57&#xff09;虚…

LeetCode每日一题[C++]-303.区域和检索-数组不可变

题目描述 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的 和 &#xff0c;其中 left < right 实现 NumArray 类&#xff1a; NumArray(int[] nums) 使用数组 nums 初…

微信小程序简单实现手势左右滑动和点击滑动步骤条功能

使用微信小程序实现左右滑动功能&#xff0c;自定义顶部图案&#xff0c;点击文字滑动和手势触屏滑动&#xff0c;功能简单&#xff0c;具体实现代码如下所示&#xff1a; 1、wxss代码&#xff1a; /* 步骤条 */ .tab-box {display: flex;flex-direction: row;position: fix…

LVS+Keepalived 高可用群集--部署

实际操作 LVS Keepalived 高可用群集 环境设备 LVS1192.168.6.88 &#xff08;MASTER&#xff09;LVS2192.168.6.87 &#xff08;BACKUP&#xff09;web1192.168.6.188web2192.168.6.189客户端192.168.6.86VIP192.168.6.180 &#xff08;一&#xff09;web服务器 首先配置…

华为汽车业务迎关键节点,长安深蓝加入HI模式,车BU预计今年扭亏

‍编辑 |HiEV 一年之前&#xff0c;同样是在电动汽车百人会的论坛上&#xff0c;余承东在外界对于华为和AITO的质疑声中&#xff0c;第一次公开阐释了华为选择走智选车模式的逻辑。 一年之后&#xff0c;伴随问界M7改款、问界M9上市&#xff0c;华为智选车模式的面貌已经发生了…

Python基于深度学习的中文情感分析系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Javaweb的学习19_CSS概念+css与html的结合方式

CSS CSS&#xff1a;页面美化和布局控制 1. 概念&#xff1a;Cascading Style Sheets 层叠样式表 层叠&#xff1a;多个样式可以作用在同一个html的元素(标签)上&#xff0c;同时生效 2. 好处&#xff1a; 1.功能强大 2.将内容展示(HTML)和样式控制(CSS)分离 *降低耦合度。解耦…

第十八届全国大学生智能汽车竞赛——摄像头算法(附带个人经验)

文章目录 前言一、摄像头图像处理1、摄像头图像采集2、图像二值化与大津算法 二、左右边界&#xff0c;中线扫描 前言 参加了第十六&#xff0c;十七和第十八届全国大学生智能车竞赛&#xff0c;对摄像头的学习有部分心得&#xff0c;分享给大家&#xff0c;三届车赛&#xff…

算法第三十天-矩阵中移动的最大次数

矩阵中移动的最大次数 题目要求 解题思路 网格图 DFS 从第一列的任一单元格 ( i , 0 ) (i,0) (i,0) 开始递归。枚举往右上/右/右下三个方向走&#xff0c;如果走一步后&#xff0c;没有出界&#xff0c;且格子值大于 g r i d [ i ] [ j ] grid[i][j] grid[i][j]&#xff0c;则…

堆叠与集群

8.1堆叠与集群概述 随着企业的发展&#xff0c;企业网络的规模越来越大&#xff0c;这对企业网络提出了更高的要求&#xff1a;更高的可靠性、更低的故障恢复时间、设备更加易于管理等。传统的园区网高可靠性技术出现故障时切换时间很难做到毫秒级别、实现可靠性的方案通常为一…