政安晨:【深度学习神经网络基础】(九)—— 在深度学习神经网络反向传播训练中理解梯度

目录

简述

理解梯度

什么是梯度

计算梯度


政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏政安晨的机器学习笔记

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

简述

在深度学习神经网络中,反向传播是一种用来训练神经网络的常用方法。它通过计算损失函数对于网络参数的梯度,然后使用梯度下降算法更新参数,以降低损失函数的值。

梯度表示了函数在某一点上的变化率和方向,对于神经网络而言,梯度表示了损失函数对于网络参数的变化率和方向。在反向传播过程中,首先通过前向传播计算出网络的输出和损失函数的值,然后利用链式法则逐层计算参数的梯度。

具体来说,反向传播的过程可以分为两个步骤:反向传播和参数更新。

在反向传播过程中,从输出层开始,通过链式法则计算每一层的梯度。首先计算输出层的梯度,然后反向传播到上一层,重复这个过程直到输入层。

在参数更新过程中,根据梯度的方向和大小,使用梯度下降算法来更新参数。梯度下降算法根据梯度的反方向调整参数的值,以使损失函数的值逐渐降低。具体来说,参数的更新公式可以表示为:参数 = 参数 - 学习率 * 梯度。

在深度学习中,梯度的理解非常重要。梯度可以告诉我们当前参数的变化趋势,通过不断迭代调整参数,使得损失函数逐渐减小,从而提高神经网络的性能。

反向传播是训练神经网络的最常用方法之一。Rumelhart、Hinton和Williams(1986)引入了反向传播,该方法到今天仍然很流行。程序员经常使用反向传播训练深层神经网络,因为在图形处理单元上运行时,它的伸缩性很好。

要了解这种用于神经网络的算法,我们必须探讨如何训练它,以及它如何处理模式。经典的反向传播已得到扩展和修改,产生了许多不同的训练算法。

理解梯度

反向传播是梯度下降的一种,许多教科书中通常互换使用这两个术语。梯度下降是指针对每个训练元素,在神经网络中的每个权重上计算一个梯度。由于神经网络不会输出训练元素的期望值,因此每个权重的梯度将为你提示如何修改权重以实现期望输出。如果神经网络确实输出了预期的结果,则每个权重的梯度将为0,这表明无需修改权重。

梯度是权重当前值下误差函数的导数。误差函数用于测量神经网络输出与预期输出的差距。实际上,我们可以使用梯度下降,在该过程中,每个权重的梯度可以让误差函数达到更低值。

梯度实质上是误差函数对神经网络中每个权重的偏导数。每个权重都有一个梯度,即误差函数的斜率。权重是两个神经元之间的连接。计算误差函数的梯度可以确定训练算法应增加,还是减小权重。反过来,这种确定将减小神经网络的误差。误差是神经网络的预期输出和实际输出之间的差异。许多不同的名为“传播训练算法”的训练算法都利用了梯度。

总的来说,梯度告诉神经网络以下信息:

● 零梯度——权重不会导致神经网络的误差;

● 负梯度——应该增加权重以减小误差;

● 正梯度——应当减小权重以减小误差。

由于许多算法都依赖于梯度计算,因此我们从分析这个过程开始。

什么是梯度

首先,让我们探讨一下梯度。本质上,训练是对权重集的搜索,这将使神经网络对于训练集具有最小的误差。如果我们拥有无限的计算资源,那么只需尝试各种可能的权重组合,来确定在训练期间提供最小误差的权重。

因为我们没有无限的计算资源,所以必须使用某种快捷方式,以避免需要检查每种可能的权重组合。这些训练算法利用了巧妙的技术,从而避免对所有权重进行蛮力搜索。但这种类型的穷举搜索将是不可能的,因为即使小型网络也具有无限数量的权重组合。

请考虑一幅图像,它展示每个可能权重的神经网络误差。

下图展示了单个权重的误差。

从上图可以看出:最佳权重是曲线的值最低的位置。问题是我们只看到当前权重的误差;我们看不到整幅图像,因为该过程需要穷尽的搜索。但是,我们可以确定特定权重下误差曲线的斜率。在这个例子中,斜率或梯度为−0.562 2。负斜率表示增大权重会降低误差。

梯度是指在特定权重下误差函数的瞬时斜率。

误差曲线在该点的导数给出了梯度。这条线的倾斜程度告诉我们特定权重下误差函数的陡峭程度。导数是微积分中最基本的概念之一。

对于本文,你只需要了解导数在特定点处提供函数的斜率即可。训练技巧和该斜率可以为你提供信息,用于调整权重,从而降低误差。现在,利用梯度的实用定义,我们将展示如何计算它。

计算梯度

我们将为每个权重单独计算一个梯度。我们不仅关注方程,也关注梯度在具有真实数值的实际神经网络中的应用。下图展示了我们将使用的神经网络——XOR神经网络。

此外,在本文中,我们将展示一些计算,说明神经网络的训练。

我们必须使用相同的起始权重,让这些计算保持一致。但是,上述权重没有什么特征,是由该程序随机生成的。前面提到的神经网络是典型的三层前馈神经网络,就像我们之前研究的那样,圆圈表示神经元,连接圆圈的线表示权重,连接线中间的矩形给出每个连接的权重。

我们现在面临的问题是,计算神经网络中每个权重的偏导数。当一个方程具有多个变量时,我们使用偏导数。每个权重均被视为变量,因为这些权重将随着神经网络的变化而独立变化。每个权重的偏导数仅显示每个权重对误差函数的独立影响。该偏导数就是梯度。

可以用微积分的链式规则来计算每个偏导数。我们从一个训练集元素开始。对于上图,我们提供[1,0]作为输入,并期望输出是1。你可以看到我们将输入应用于上图。第一个输入神经元的输入为1.0,第二个输入神经元的输入为0.0。

该输入通过神经网络馈送,并最终产生输出。第4章“前馈神经网络”介绍了计算输出与总和的确切过程。反向传播既有前向,也有反向。

计算神经网络的输出时,就会发生前向传播。我们仅针对训练集中的这个数据项计算梯度,训练集中的其他数据项将具有不同的梯度。在后文,我们将讨论如何结合各个训练集元素的梯度。现在我们准备计算梯度。

下面总结了计算每个权重的梯度的步骤:

● 根据训练集的理想值计算误差;

● 计算输出节点(神经元)的增量;

● 计算内部神经元节点的增量;

● 计算单个梯度。


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

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

相关文章

SQL SERVER的安装

目录 1.百度SQL SERVER找到图下的所显示的,点击进去 2.找到图下红色框起来的,点击立即下载​ 3.下载好之后点开,选择下载介质 4.SQLSERVER下载成功之后选择打开文件夹​ 6.双击后缀名是.iso的镜像文件 7.双击setup.exe进行安装​ 8.安…

BTI性能开销权衡及优化措施

BTI分支目标识别精讲与实践系列 思考 1、什么是代码重用攻击?什么是ROP攻击?区别与联系? 2、什么是JOP攻击?间接分支跳转指令? 3、JOP攻击的缓解技术?控制流完整性保护? 4、BTI下的JOP如何…

vue:如何通过两个点的经纬度进行距离的计算(很简单)

首先假设从api获取到了自己的纬经度和别人的纬经度 首先有一个概念需要说一下 地球半径 由于地球不是一个完美的球体,所以并不能用一个特别准确的值来表示地球的实际半径,不过由于地球的形状很接近球体,用[6357km] 到 [6378km]的范围值可以…

免费HTTPS证书获取攻略

申请SSL证书可简化为以下三个步骤: 第一步:选择证书类型与提供商 - 确定网站需求,选择合适的SSL证书类型(如DV、OV、EV)。 - 选取信誉良好的证书颁发机构(CA)。 永久免费SSL证书_永久免费htt…

腾讯云优惠券领取及使用教程详解

腾讯云作为国内领先的云服务提供商,以其稳定可靠、性能卓越的服务赢得了广大用户的青睐。为了回馈用户,腾讯云经常推出各种优惠活动,其中优惠券就是非常受欢迎的一种。本文将详细介绍腾讯云优惠券的领取和使用方法,帮助大家更好地…

多维 HighCharts

1&#xff1a;showHighChart.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- js脚本都是官方的,后两个是highchart脚本 --><script type"text/javascript" src"jquery1.7.1.mi…

Linux用户及用户组管理命令

Linux操作系统是一种基于UNIX的多用户、多任务的操作系统。在Linux系统中&#xff0c;用户和用户组的管理是非常重要的&#xff0c;因为它关系到系统安全和多用户环境下的资源共享。本文将详细介绍Linux中用户和用户组管理的相关命令&#xff0c;帮助用户更好地理解和管理Linux…

MoonBit 2024 Qcon 北京精彩回顾速览

2024年4月11日至13日&#xff0c;QCon 全球软件开发大会暨智能软件开发生态展在北京国测国际会议会展中心举办。本次 QCon 大会汇集了100技术大咖&#xff0c;通过1场主论坛、近30分论坛以及5场高端闭门交流和多场闪电演讲等多样化的活动形式&#xff0c;促进了与会者的深入交流…

解决:IDEA编译报错,自动切换JDK编译版本

一、IDEA切换JDK版本 要想在IDEA中完成对JDK版本的切换有多个地方需要我们进行修改 File | Settings | Build, Execution, Deployment | Compiler | Java Compiler File->ProjectStruct->platform settings->SDKS File->ProjectStruct->projectSettings->…

JavaScript函数式编程

函数式编程 课程介绍 为什么要学习函数编程以及什么是函数式编程函数式编程的特性(纯函数、柯里化、函数组合等)函数式编程的应用场景函数式编程库Lodash 为什么要学习函数式编程 函数式编程是非常古老的一个概念&#xff0c;早于第一台计算机的诞生&#xff0c; 函数式编程…

500以内的不入耳运动耳机推荐,首推五大业内顶级优品

不入耳式运动耳机因其独特的佩戴方式和设计&#xff0c;能够在运动过程中保持对周围环境的警觉&#xff0c;避免因音乐沉浸而忽视潜在的安全隐患&#xff0c;同时它们还能有效减少对耳道的压迫&#xff0c;让运动更加舒适自在&#xff0c;接下来&#xff0c;就让我为大家推荐一…

智能助手大比拼!5款热门思维导图软件细致评估!

思维导图是一种创造性的方法&#xff0c;集思广益&#xff0c;寻找不同想法之间的联系。如果你做得好&#xff0c;你可以为难题提出新的想法和解决方案&#xff0c;总结一篇文章或演示稿&#xff0c;让你的想法井然有序。在数字时代&#xff0c;纸质思维导图存在不能随意更改、…

arm64-v8a、armeabi-v7a、x86、x86_64

当我们去GitHub下载应用的时候是不是经常很懵逼&#xff0c;就像下图一样&#xff0c;粗看一下如此多安装包到底要选择下载哪个且每种安装包到底有哪差别&#xff1f;毕竟因为自己一无所知&#xff0c;有时便随意下载一个后&#xff0c;安装时却报『此版本与你的系统不兼容』的…

Python的pytest框架(1)--基本概念、入门

按基础到进阶的顺序&#xff0c;学习Python的pytest框架&#xff0c;本篇文章先讲一讲pytest的基本概念、入门使用规则。 目录 一、pytest基础知识 1、安装 2、pytest框架主要做了什么工作 二、pytest的规则约定、运行方式以及参数详解 1、编写测试用例 模块&#xff08…

Oracle 19c RAC 补丁升级 补丁回退

补丁升级流程 补丁升级 停止集群备份家目录 两节点分别操作 cd /u01/app/19.3.0/grid/bin/ crsctl stop crs tar -zcvf /u01/app.tar.gz /u01/app /u01/app/19.0.0/grid/bin/crsctl start crs 两节点OPatch替换 --- 表示 root 用户&#xff0c;$ 表示 Oracle 用户提示符&#…

负荷预测 | Matlab基于TCN-GRU-Attention单变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于TCN-GRU-Attention单变量时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行环境matlab2023及以…

无人棋牌室软硬件方案

先决思考 软件这一套确实是做一套下来&#xff0c;可以无限复制卖出&#xff0c;这个雀氏是一本万利的买卖。 现在肯定是有成套的方案&#xff0c;值不值得重做&#xff1f;为什么要重做&#xff1f; 你想达到什么效果&#xff1f;还是需要细聊的。 做这个东西难度不高&…

DNF手游攻略:萌新入坑大全!

玩DNF手游国服已经正式定档&#xff0c;离上线已经越来越近了&#xff0c;很多小伙伴对于装备打造以及附魔还不是特别了解。如果你还不知道装备要怎么附魔&#xff0c;不要担心&#xff0c;本篇攻略将为你全面解析全职业过渡和毕业附魔推荐。 ​ 一、物理职业附魔推荐 1. 武器…

1688推出跨境业务,用API自动对接商品货源

2023年底&#xff0c;出海圈迎来一则重磅消息&#xff1a;1688正式进军海外市场。这一决策引发了众多卖家的关注与疑惑&#xff0c;为何1688会在这个时候推出跨境版呢&#xff1f; 事实上&#xff0c;1688早已涉足跨境业务&#xff0c;拥有“跨境专供”板块&#xff0c;成为众…

【C++学习】C++IO流

这里写目录标题 &#x1f680;C语言的输入与输出&#x1f680;什么是流&#x1f680;CIO流&#x1f680;C标准IO流&#x1f680;C文件IO流 &#x1f680;C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取…