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

神经网络 基本知识整理

  • 激活函数
    • 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.hqwc.cn/news/549430.html

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

相关文章

中国银行信息系统应用架构发展历程

概述&#xff1a; 从 20 世纪 80 年代开始至今&#xff0c;我国银行业信息化历程已 有四十年历史。虽然相对于发达国家来讲&#xff0c;我国银行业务信 息化起步较晚&#xff0c;但发展速度很快&#xff0c; 目前我国一些大型商业银行的信息化程度已经处于全球领先水平。 “银行…

云原生(四)、Docker-Compose

Docker-Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它使用一个简单的 YAML 文件来配置应用程序的服务、网络和卷&#xff0c;从而使得在不同环境中轻松部署应用程序变得更加简单和可靠。 Docker Compose 主要由以下几个核心组件组成&#xf…

部署Zabbix Agents添加使能监测服务器_Windows平台_MSI/Archive模式

Windows平台 一、从MSI安装Windows代理,添加Windows Servers/PC 概述 可以从Windows MSI安装包(32位或64位) 安装Zabbix agent 32位包不能安装在64位Windows中 所有软件包都支持TLS,配置TLS可选 支持UI和命令行的安装。 1、下载Agent代理程序,使用Agent2升级版,官网链接如…

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

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

深入学习NIO三大核心:缓冲区 Buffer、通道Channel、Selector选择器

缓冲区 Buffer 一、简单介绍 Buffer&#xff0c;顾名思义就是缓冲区的意思&#xff0c;它是NIO中数据交换的载体&#xff0c;实质上是一种承载数据的容器。在上一篇BIO文章中我们提到BIO的工作模式是使用流来进行数据交换&#xff0c;并且根据操作的不同&#xff0c;分为输入…

阿里云-零基础入门NLP【基于机器学习的文本分类】

文章目录 学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路TF-IDF介绍TF-IDF 机器学习分类器TF-IDF LinearSVCTF-IDF LGBMClassifier 学习过程 20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析)&#xff0c;一开始看这块其实挺懵的&am…

一文了解如何做全基因集GSEA富集分析

原文链接:一文完成全基因集GSEA富集分析 本期内容 写在前面 我们前面分享过一文掌握单基因GSEA富集分析的教程,主要使用单基因的角度进行GSEA富集分析。 我们社群的同学咨询,全基因集的GSEA如何分析呢??其实,原理都是大同小异的,那么今天我们就简单的整理一下吧。 若…

京津冀自动驾驶产业盛会“2024北京国际自动驾驶技术展览会”

随着科技的飞速发展&#xff0c;自动驾驶技术成为了汽车产业变革的热点和前沿。智能化、网联化已经成为推动汽车产业创新发展的重要力量&#xff0c;而自动驾驶技术则是其中的关键一环。它不仅能够提高道路安全性、缓解交通拥堵&#xff0c;还能为乘客带来更加舒适、便捷的出行…

uniapp可视范围高度 - 用户屏幕可操作的屏幕高度 - 适用于APP、H5@公众号、纯H5@Chrome

可视范围高度 let heightPx uni.getWindowInfo().windowHeight uni.getWindowInfo().windowTop 官方手册 uni.getWindowInfo() | uni-app官网uni-app,uniCloud,serverless,uni.getWindowInfo()https://uniapp.dcloud.net.cn/api/system/getWindowInfo.html 实测数据 uni.ge…

如何将大华dav视频转mp4?一键无损清晰转换~

Digital Audio Video&#xff08;DAV&#xff09;文件格式源于数字监控领域&#xff0c;旨在解决视频监控数据的存储和回放问题。随着数字监控技术的发展&#xff0c;DAV格式逐渐成为监控设备记录视频的标准格式&#xff0c;广泛应用于安防系统、摄像头监控等场景。 MP4文件格式…

Python基础(六)之数值类型元组

Python基础&#xff08;六&#xff09;之数值类型元组 1、简介 元组&#xff1a; 在Python中是内置的数据结构之一&#xff0c;是一个不可变的序列,切可以是任何类型数据。元组的元素放在&#xff08;&#xff09;小括号内。一般我们希望数据不改变的时候使用 不可变与可变的…

多目标进化算法——NSGA-II(python实现)

目录 前言NSGA-II非支配排序支配关系非支配关系非支配排序算法算法思想算法伪代码伪代码释义Python代码实现 过渡1拥挤度距离排序算法思想算法伪代码Python代码实现 过渡2二元锦标赛 精英选择策略选择交叉变异生成新种群选择交叉变异Python代码实现 整体流程图测试函数与结果 其…