深度学习10:反向传播1:计算图,反向求导,链式法则,加法,乘法节点反向传播(经典,必学会链式法则)

发布时间:2026/10/24 8:53:49

深度学习10:反向传播1:计算图,反向求导,链式法则,加法,乘法节点反向传播(经典,必学会链式法则) 反向传播算法一、计算图二、一直是后面导数乘以当前自变量系数得出当前自变量的导数?*(我个人疑问)三、链式法则(反向传播的精髓一定搞明白不然没法向下继续学习)四、反向传播加法节点的反向传播乘法节点的反向传播(明显看出来受到相乘系数就是偏导)反向传播Backward Propagation 或 Back PropagationBP 算法指的是计算神经网络参数梯度的方法。简言之该方法根据微积分中的链式法则按相反的顺序从输出层到输入层遍历网络。该算法存储了计算某些参数梯度时所需的任何中间变量。复合函数的链式求导法则一、计算图计算图将计算过程用图表示出来。这里说的图是数据结构中的图通过多个节点和边表示连接节点的直线称为边。如上就是 100 × 2 150 × 3 650 的计算图表示。计算图的基本计算原则就是从输入出发、按照箭头方向从左到右依次进行计算最终得到输出结果。这个过程其实就是 前向传播forward。计算图的特点是可以通过传递“局部计算”获得最终结果。即只需根据与自己相关的信息输出接下来的结果。无论全局的计算有多么复杂各个节点所要做的就是进行局部计算并传递计算结果最终得出全局的复杂计算的结果如果增加更多的计算环节比如再乘以一个“零售加价系数”计算图如下所示如果我们进一步考虑当衣服的价格上涨输入变化时会多大程度上影响最后要支付的金额输出结果将输入的衣服价格记为( x (x(x)输出的支付金额记为( L (L(L)这其实就是要求导数值( ∂ L ∂ x (\frac{\partial L}{\partial x}(∂x∂L​)。在计算图上我们可以利用反向从右到左的传递来方便地计算导数。这个过程就可以叫做反向传播backward。这里衣服加1收到和他相乘个数影响就变成2如果再来一个相乘个数x那就是 2x这里最后零售价加价系数也是相乘1.1所以变成2.2x 这就是衣服加1最终总价影响变得是衣服单价他最终影响收到相乘的影响从而得出衣服单价对总价的导数如果衣服件数加1他的导数是110一定根据这简单举例明白这些局部偏导:这里每次自变量变化对应局部导数就是和自变量变化 相乘的那个数加法当前局部导数就是1没变化方式一顺着你的思路计算图反向传播求导正向传播先看数值变化如果衣服件数原来是 2现在加 1 变成 3。衣服的总价从 (100 \times 2 200) 变成了 (100 \times 3 300)也就是增加了 100。最终支付金额增加了 (100 \times 1.1零售系数 110)。反向传播求导数即图中的红色箭头看“衣服件数”到“乘法节点”这条边局部导数是衣服单价也就是100。看“加法节点”的右侧加法直接传递导数依然是100。看“乘法节点乘以1.1”这条边局部导数是零售系数1.1。最后把路径上的局部导数相乘(100 \times 1.1 \mathbf{110})。所以衣服件数对最终总价的导数是 110。方式二用纯数学公式推导最严谨我们把整个过程写成一个总价公式设 (Y) 为最终支付金额(x) 为衣服件数。(Y (衣服单价 \times x 裤子单价 \times 裤子件数) \times 零售系数)代入图中的数字(Y (100 \times x 150 \times 3) \times 1.1)(Y 110x 495)现在我们对 (x)衣服件数求导(\frac{\partial Y}{\partial x} 110)公式求导的结果也是 110。二、一直是后面导数乘以当前自变量系数得出当前自变量的导数?*(我个人疑问)在计算图里这被称为“上游传来的导数后面的导数”乘以“当前节点的局部导数也就是你说的当前自变量系数”。场景一单纯的乘法节点适用我疑问的规律假设函数是( y 3 x (y 3x(y3x)系数是 3。如果( x (x(x) 变化一点点( y (y(y) 的变化量就是( x (x(x) 变化量的 3 倍。所以( ∂ y ∂ x 3 (\frac{\partial y}{\partial x} 3(∂x∂y​3)。如果这个乘法节点前面还有更复杂的网络后面传回来的导数是( L ′ (L(L′)上游导数。那么( x (x(x) 的导数就是( L ′ × 3 (L \times 3(L′×3)。这就是你说的“后面导数 x 当前系数”。场景二加法节点你的规律的补充假设函数是( y x z (y x z(yxz)加法节点。如果( x (x(x) 变化一点点( y (y(y) 的变化量就是( x (x(x) 的变化量不会放大也不会缩小。所以加法节点的局部导数系数永远是 1。如果后面传回来的导数是( L ′ (L(L′)上游导数。那么( x (x(x) 的导数就是( L ′ × 1 L ′ (L \times 1 L(L′×1L′)。这也印证了你说的规律乘以当前系数加法节点系数是1相当于没变。三、链式法则(反向传播的精髓一定搞明白不然没法向下继续学习)反向传播将局部导数向反方向传递传递的原理基于链式法则。反向传播时将信号乘以节点的局部导数然后传递给下一个节点。仔细想下面这链式法则,很重要仔细想下面这链式法则,很重要仔细想下面这链式法则,很重要L 代表的就是最后整体计算的结果通常在神经网络中L 代表 Loss即最终的损失函数值在你之前看的价格计算图里L 就是最终的支付总金额举例:对于复合函数( z ( x y ) 2 (z (x y)^2(z(xy)2)令( u x y (u x y(uxy)则∂ z ∂ x ∂ z ∂ u ∂ u ∂ x 2 u × 1 2 ( x y ) \frac{\partial z}{\partial x} \frac{\partial z}{\partial u} \frac{\partial u}{\partial x} 2u \times 1 2(x y)∂x∂z​∂u∂z​∂x∂u​2u×12(xy)四、反向传播利用计算图的反向传播可以很容易地计算出输出关于输入的偏导数。加法节点的反向传播对于( z x y (z x y(zxy)( ∂ z ∂ x 1 (\frac{\partial z}{\partial x} 1(∂x∂z​1)( ∂ z ∂ y 1 (\frac{\partial z}{\partial y} 1(∂y∂z​1)。因此加法的反向传播会将上游传来的值原样向下游传递。乘法节点的反向传播(明显看出来受到相乘系数就是偏导)对于( z x y (z xy(zxy)( ∂ z ∂ x y (\frac{\partial z}{\partial x} y(∂x∂z​y)( ∂ z ∂ y x (\frac{\partial z}{\partial y} x(∂y∂z​x)。因此乘法的反向传播会将上游传来的值乘以输入的翻转向下游传递。这里在前向传播的过程就要记住得到的x是多少y是多少,并保存。因为这写值在反向传播的时候且是乘法节点时候会影响当前局部导数。所以在反向传播的时候一定要先执行一次前向传播
延伸阅读

更多相关文章

2026/10/24 8:53:49

RCQ本地图书管理工具:SQLite+Click构建的极简书库系统

简介:RCQ读者书库程序是一款基于Python开发的轻量级图书管理工具,面向编程初学者、教学实践者及小型阅读团体,解决个人藏书数字化录入、分类检索、借阅跟踪等实际管理需求。资源包共63个文件,含2个核心Python源码(.py&…

2026/10/24 8:53:49

Flink SQL实战:实时数仓案例与优化技巧

1. 项目概述:一个开箱即用的Flink SQL学习仓库这个Flink SQL案例仓库是我在辅导团队新人时逐步积累的实战资料库,专门针对实时数仓场景设计了可直接运行的完整示例。不同于官方文档的碎片化演示,这里每个案例都包含数据生成器、业务逻辑实现和…

2026/10/24 8:53:49

JSBSim飞行仿真中的FGPropertyManager核心机制与应用

1. JSBSim与FGPropertyManager基础认知作为一名飞行仿真领域的开发者,第一次接触JSBSim时往往会被其庞大的属性管理系统所震撼。FGPropertyManager作为JSBSim的核心组件之一,承担着整个仿真系统中所有变量和参数的中央管理职责。这就像是一个大型航空公司…

2026/10/24 9:53:56

鸿蒙Flutter应用数据存储适配方案详解

1. 为什么需要鸿蒙化适配的Flutter存储方案在鸿蒙生态中开发Flutter应用时,数据持久化存储一直是个痛点。传统Android/iOS平台上,shared_preferences作为Flutter官方推荐的轻量级存储方案,简单易用且性能稳定。但在鸿蒙设备上直接使用未经适配…

2026/10/24 9:53:56

OpenCV 3.2 源码编译与 Python 绑定避坑指南

简介:OpenCV 3.2 面向计算机视觉、机器学习方向的 C 开发者与高校学生,提供该版本在 Windows 环境下编译、链接及二次开发所需的头文件与库文件,可用于图像处理、特征检测、目标识别、视频分析和相机标定等项目的环境搭建。压缩包共 178 个文…

2026/10/24 9:53:56

localStorage使用指南:从基础操作到企业级实践

1. 初识localStorage:浏览器端的轻量级数据仓库第一次接触localStorage是在2015年开发一个电商网站时,当时需要记住用户浏览过的商品记录。服务端存储方案会带来额外的网络请求,而cookie又太小且每次请求都会携带。当同事建议使用localStorag…

2026/10/24 9:53:56

rea 工程化实践:实时可复用前端架构设计与落地

1. 从“rea”这个标题说起:一个被低估的缩写背后藏着什么第一次看到“rea”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率又是一个被缩写玩坏了的项目名。做技术的人都有个毛病,喜欢把长名字砍成三四个字母,仿佛名字越短…

2026/10/24 9:53:56

Vue3自定义时间选择器开发指南

1. 项目背景与需求分析在Vue3项目开发中,时间选择功能是表单交互的常见需求。虽然市面上有成熟的UI组件库(如Element Plus、Ant Design Vue等)提供时间选择器,但在特定业务场景下,我们往往需要高度定制化的时间选择组件…

2026/10/23 22:56:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑