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

神经网络 基本知识整理

  • 激活函数
    • 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(批标准化)是非常重要的,后续再总结!

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

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

相关文章

【目标检测】YOLOv2 网络结构(darknet-19 作为 backbone)

上一篇文章主要是写了一些 YOLOv1 的原版网络结构&#xff0c;这篇文章一样&#xff0c;目标是还原论文中原版的 YOLOv2 的网络结构&#xff0c;而不是后续各种魔改的版本。 YOLOv2 和 YOLOv1 不一样&#xff0c;开始使用 Darknet-19 来作为 backbone 了。论文中给出了 Darkne…

springboot280基于WEB的旅游推荐系统设计与实现

旅游推荐系统设计与实现 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装旅游推荐系统软件来发挥其高效地信息处理…

5-隐藏层:神经网络为什么working

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享&#xff0c;严禁他用&#xff01;&#xff01;如有侵权&#xff0c;请联系删除 目录 一、知识引入 &#xff08;一&#xff09;隐藏层 &#xff08;二&#xff09;泛化 &#xff08;三…

java算法题每日多道

274. H 指数 题目 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;…

鸿蒙Harmony应用开发—ArkTS声明式开发(绘制组件:Ellipse)

椭圆绘制组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Ellipse(options?: {width?: string | number, height?: string | number}) 从API version 9开始&#xff0…

数据结构知识Day1

数据结构是什么&#xff1f; 数据结构是计算机存储、组织数据的方式&#xff0c;它涉及相互之间存在一种或多种特定关系的数据元素的集合。数据结构反映了数据的内部构成&#xff0c;即数据由哪些成分数据构成&#xff0c;以何种方式构成&#xff0c;以及呈现何种结构。这种结…

LeetCode讲解算法1-排序算法(Python版)

文章目录 一、引言问题提出 二、排序算法1.选择排序&#xff08;Selection Sort&#xff09;2.冒泡排序3.插入排序&#xff08;Insertion Sort&#xff09;4.希尔排序&#xff08;Shell Sort&#xff09;5.归并排序&#xff08;Merge Sort&#xff09;6.快速排序&#xff08;Qu…

【Node.js从基础到高级运用】十三、NodeJS中间件高级应用

在现代web开发中&#xff0c;Node.js因其高效和灵活性而备受青睐。其中&#xff0c;中间件的概念是构建高效Node.js应用的关键。在这篇博客文章中&#xff0c;我们将深入探讨Node.js中间件的高级应用&#xff0c;包括创建自定义中间件、使用第三方中间件等。我们将从基础讲起&a…

AJAX-原理XMLHttpRequest

定义 使用 查询参数 定义&#xff1a;浏览器提供给服务器的额外信息&#xff0c;让服务器返回浏览器想要的数据 语法&#xff1a;http://xxxx.com/xxx/xxx?参数名1值1&参数名2值2

ChatGPT编程Python小案例(拿来就用)—解压zip压缩文件

ChatGPT编程Python小案例&#xff08;拿来就用&#xff09;—解压zip压缩文件 今天撸一本书&#xff0c;其中书中提供一个zip压缩文件的资料。下载之后&#xff0c;没有解压软件&#xff0c;&#xff08;也可能该文件可以自解压&#xff09;。这段时间已经深刻体会到AI编程带来…

爬虫 Day2

resp.close()#关掉resp 一requests入门 &#xff08;一&#xff09; 用到的网页&#xff1a;豆瓣电影分类排行榜 - 喜剧片 import requestsurl "https://movie.douban.com/j/chart/top_list" #参数太长&#xff0c;重新封装参数 param {"type": "…

【Unity每日一记】unity中的内置宏和条件编译(Unity内置脚本符号)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

EDI在汽车主机厂配送流程中的应用

汽车主机厂的汽车配送流程始于汽车 “生产结束 ” &#xff0c;止于 “交付给经销商 ” 。在这个流程中&#xff0c;企业作为主机厂的下游供应商&#xff0c;与主机厂的物流服务供应商之间的信息交换将会变得十分重要。 配送流程&#xff1a;运输订单以及报告 汽车主机厂提供预…

【linux驱动】定时器的使用

【linux驱动】定时器的使用 文章目录 【linux驱动】定时器的使用1.介绍1.1相关名词1.2配置HZ的方法 2.API3.示例4.调试 1.介绍 1.1相关名词 HZ、jiffies、tick Linux系统启动后&#xff0c;每隔固定周期就会发出timer interrupt(IRQ 0)&#xff0c;HZ用来定义每一秒发生多少…

【机器学习】经典目标检测算法:RCNN、Fast RCNN、 Faster RCNN 基本思想和网络结构介绍

文章目录 三者的比较&#xff1a;RCNN、Fast RCNN、 Faster RCNN一、框架的对比1.三者都是二阶算法&#xff0c;网络框架比较&#xff1a;2.三者的优缺点比较&#xff1a; RCNN一、RCNN系列简介二、RCNN算法流程的4个步骤三、RCNN存在的问题四、论文解析补充1.R-CNN提出了两个问…

Odoo17免费开源ERP开发技巧:如何在表单视图中调用JS类

文/Odoo亚太金牌服务开源智造 老杨 在Odoo最新V17新版中&#xff0c;其突出功能之一是能够构建个性化视图&#xff0c;允许用户以独特的方式与数据互动。本文深入探讨了如何使用 JavaScript 类来呈现表单视图来创建自定义视图。通过学习本教程&#xff0c;你将获得关于开发Odo…

放慢音频速度的三个方法 享受慢音乐

如何让音频慢速播放&#xff1f;我们都知道&#xff0c;在观看视频时&#xff0c;我们可以选择快进播放&#xff0c;但是很少有软件支持慢速播放。然而&#xff0c;将音频慢速播放在某些情况下是非常必要的。例如&#xff0c;当我们学习一门新语言时&#xff0c;我们可以将音频…

Pytorch详细应用基础(全)

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.安装pytorch以及anaconda配置 尽量保持默认的通道&#xff0c;每次写指令把镜像地址写上就行。 defaults优先级是最低的&#…

深度学习神经网络相关记录《二》

如何判断模型是一个好模型&#xff1f; 模型预测效果&#xff0c;也就是模型预测的准确率运算速度&#xff1b;能够处理大量数据、短时间内急速学习、可以实时进行预测&#xff0c;是机器学习的重要优势&#xff1b;可解释性&#xff1b;深度学习已经不太关系这一点了&#xf…

基础:TCP三次握手做了什么,为什么要握手?

1. TCP 三次握手在做些什么 1. 第一次握手 &#xff1a; 1&#xff09;握手作用&#xff1a;客户端发出建立连接请求。 2&#xff09;数据处理&#xff1a;客户端发送连接请求报文段&#xff0c;将SYN位置为1&#xff0c;Sequence Number为x;然后&#xff0c;客户端进入SYN_S…