五、误差反向传播法(上)

上一章中,我们介绍了神经网络的学习,并通过数值微分计算了神经网络的权重参数的梯度(严格来说,是损失函数关于权重参数的梯度)。数值微分虽然简单,也容易实现,但缺点是计算上比较费时间。本章我们将学习一个能够高效计算权重参数的梯度的方法——误差反向传播法。

正确理解误差反向传播法,我个人认为有两种方法:一种是基于数学式;另一种是基于计算图(computational graph)。

本章希望大家通过计算图,直观地理解误差反向传播法。

5.1 计算图

5.1.1 用计算图求解

问题1:太郎在超市买了2个100日元一个的苹果,消费税是10%,请计算支付金额。

可以将“2”和“1.1”分别作为变量“苹果的个数”和“消费税”标在○外面。

问题2:太郎在超市买了2个苹果、3个橘子。其中,苹果每个100日元,橘子每个150日元。消费税是10%,请计算支付金额。

综上,用计算图解题的情况下,需要按如下流程进行。

1.构建计算图。

2.在计算图上,从左向右进行计算。

这里的第2歩“从左向右进行计算”是一种正方向上的传播,简称为正向传播(forward propagation)。正向传播是从计算图出发点到结束点的传播。 既然有正向传播这个名称,当然也可以考虑反向(从图上看的话,就是从右向左)的传播。实际上,这种传播称为反向传播(backward propagation)。反向传播将在接下来的导数计算中发挥重要作用。

5.1.2 局部计算

局部计算是指,无论全局发生了什么,都能只根据与自己相关的信息输出接下来的结果。

我们用一个具体的例子来说明局部计算。比如,在超市买了2个苹果和其他很多东西

这里的重点是,各个节点处的计算都是局部计算。这意味着,例如苹果和其他很多东西的求和运算(4000 + 200 4200)并不关心4000这个数字是如何计算而来的,只要把两个数字相加就可以了。换言之,各个节点处只需进行与自己有关的计算(在这个例子中是对输入的两个数字进行加法运算),不用考虑全局

5.1.3 为何用计算图解题

那么计算图到底有什么优点呢?

一个优点就在于前面所说的局部计算。无论全局是多么复杂的计算,都可以通过局部计算使各个节点致力于简单的计算,从而简化问题。另一个优点是,利用计算图可以将中间的计算结果全部保存起来(比如,计算进行到2个苹果时的金额是200日元、加上消费税之前的金额650日元等)。但是只有这些理由可能还无法令人信服。实际上,使用计算图最大的原因是,可以通过反向传播高效计算导数。

这里,假设我们想知道苹果价格的上涨会在多大程度上影响最终的支付金额,即求“支付金额关于苹果的价格的导数”。设苹果的价格为x,支付金额为L,则相当于求

。这个导数的值表示当苹果的价格稍微上涨时,支付金额会增加多少。

反向传播使用与正方向相反的箭头(粗线)表示。反向传播传递“局部导数”,将导数的值写在箭头的下方。在这个例子中,反向传播从右向左传递导数的值(1 1.1 2.2)。从这个结果中可知,“支付金额关于苹果的价格的导数”的值是2.2。这意味着,如果苹果的价格上涨1日元,最终的支付金额会增加2.2日元(严格地讲,如果苹果的价格增加某个微小值,则最终的支付金额将增加那个微小值的2.2倍)。

5.2 链式法则

5.2.1 计算图的反向传播

让我们先来看一个使用计算图的反向传播的例子。假设存在y = f(x)的计算,这个计算的反向传播如图5-6所示。

如图所示,反向传播的计算顺序是,将信号E乘以节点的局部导数

,然后将结果传递给下一个节点。这里所说的局部导数是指正向传播中y = f(x)的导数,也就是y关于x的导数

。比如,假设y = f(x) =

, 则局部导数为

= 2x。把这个局部导数乘以上游传过来的值(本例中为E),然后传递给前面的节点。

5.2.2 什么是链式法则

介绍链式法则时,我们需要先从复合函数说起。复合函数是由多个函数构成的函数。比如,z = (x + y) 2 是由式(5.1)所示的两个式子构成的。

链式法则是关于复合函数的导数的性质,定义如下。

如果某个函数由复合函数表示,则该复合函数的导数可以用构成复合函数的各个函数的导数的乘积表示。

这就是链式法则的原理,乍一看可能比较难理解,但实际上它是一个非常简单的性质。以式(5.1)为例,

z关于x的导数)可以用

z关于t 的导数)和

t关于x的导数)的乘积表示。用数学式表示的话,可以写成式(5.2)。

式(5.2)中的∂ t正好可以像下面这样“互相抵消”,所以记起来很简单

所以最后要计算的结果

5.2.3 链式法则和计算图

现在我们尝试将式(5.4)的链式法则的计算用计算图表示出来。如果用“**2”节点表示平方运算的话,则计算图如图5-7所示。

根据链式法则,

成立,对应“z关于x的导数”。也就是说,反向传播是基于链式法则的。

5.3 反向传播

5.3.1 加法节点的反向传播

这里以z = x + y为对象,观察它的反向传播。z = x + y的导数可由下式(解析性地)计算出来。

在图5-9中,反向传播将从上游传过来的导数(本例中是

)乘以1,然后传向下游。也就是说,因为加法节点的反向传播只乘以1,所以输入的值会原封不动地流向下一个节点。

另外,本例中把从上游传过来的导数的值设为

。这是因为,如图5-10 所示,我们假定了一个最终输出值为L的大型计算图。

的计算位于这个大型计算图的某个地方,从上游会传来

,并向下游传递

现在来看一个加法的反向传播的具体例子。假设有“10 + 5=15”这一计算,反向传播时,从上游会传来值1.3。用计算图表示的话,如图5-11所示。

5.3.2 乘法节点的反向传播

这里我们考虑z = xy。这个式子的导数用式(5.6)表示。

乘法的反向传播会将上游的值乘以正向传播时的输入信号的“翻转值”后传递给下游。翻转值表示一种翻转关系,如图5-12所示,正向传播时信号是x的话,反向传播时则是y;正向传播时信号是y的话,反向传播时则是x

现在我们来看一个具体的例子。比如,假设有“10 × 5 = 50”这一计算,反向传播时,从上游会传来值1.3。用计算图表示的话,如图5-13所示。

因为乘法的反向传播会乘以输入信号的翻转值,所以各自可按1.3 × 5 = 6.5、1.3 × 10 = 13计算。另外,加法的反向传播只是将上游的值传给下游,并不需要正向传播的输入信号。但是,乘法的反向传播需要正向传播时的输入信号值。因此,实现乘法节点的反向传播时,要保存正向传播的输入信号。

5.3.3 苹果的例子

苹果的例子(2个苹果和消费税)。这里要解的问题是苹果的价格、苹果的个数、消费税这3个变量各自如何影响最终支付的金额。这个问题相当于求“支付金额关于苹果的价格的导数”“支付金额关于苹果的个数的导数”“支付金额关于消费税的导数”。用计算图的反向传播来解的话,求解过程如图5-14所示。

结果可知,苹果的价格的导数是2.2,苹果的个数的导数是110,消费税的导数是200。这可以解释为,如果消费税和苹果的价格增加相同的值,则消费税将对最终价格产生200倍大小的影响,苹果的价格将产生2.2倍大小的影响。

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

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

相关文章

Rust Axum 快速上手指南(静态网页和动态网页2024版)

本文基于 Axum 0.7.5(当前稳定版)、tower-http 0.5.2、MiniJinja 0.7.2 编写,涵盖生产环境核心场景:tower-http Layer 叠加与数据传递、静态网页服务、MiniJinja 动态模板渲染,并重点解析请求 / 应答在多 Layer 中的流…

Golang语言设计理念

起源 Golang语言始于2007年,是一门编译型、静态类型、并发友好 的语言,由Robert Griesemer( 罗伯特格里森、图灵奖获得者、C 语法联合发明人、Unix 之父)、Rob Pike( 罗布派克、Plan 9 操作系统领导者、UTF-8 编码的最…

深入掌握 nsenter:Linux命名空间操作的利器

#作者:朱雷 文章目录1、简介2、功能与用途2.1. 核心功能2.1.1. 进入命名空间2.1.2. 支持多种命名空间2.1.3. 容器调试3、安装3.1. 依赖包3.2. 权限要求3.3. 命令用法与示例3.3.1. 基本语法3.3.2. 常用选项包括:3.3.3. 示例4、 应用场景与优势4.1. 容器调…

Ubuntu Qt x64平台搭建 arm64 编译套件

环境: 主机平台:Ubuntu22.04.5 x86_64 目标平台:IMX8QM Ubuntu22.04.5 arm64 Qt版本:Qt6.5.3 LST GUI实现:QML 一、获取Ubuntu22.04.5 x86_64 系统镜像文件 1、镜像下载与安装 使用国内镜像下载对应版本的Ubuntu镜像…

mysql第五天学习 Mysql全局优化总结

Mysql全局优化总结 从上图可以看出SQL及索引的优化效果是最好的,而且成本最低,所以工作中我们要在这块花更多时间。 补充一点配置文件my.ini或my.cnf的全局参数: 假设服务器配置为: CPU:32核内存:64GDISK…

leetcode hot100 二叉搜索树

二叉搜索树的第k小的数class Solution:def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:# 二叉搜索树的中序遍历是 升序排列的, 求第k小的,即第k个数self.res []def fun(root):if not root:returnfun(root.left)if root:self.res.a…

从Sonnet到Opus:一次解决RAG知识库流式输出难题的探索

又到周末,还得消耗消耗 ➡️ anyrouter 上的Claude资源,万一哪天都不能用了,也是浪费。 2025/9/5,Claude AI 的母公司 Anthropic 发布了一项新政策:即日起,Anthropic将不再对中国控股公司及其海外子公司开放…

「数据获取」中国科技统计年鉴(1991-2024)Excel

02、数据详情数据名称:《中国科技统计年鉴》(1991-2024年)数据年份:1991-202403、数据截图 04、获取方式(获取方式看绑定的资源)

SimLingo:纯视觉框架下的自动驾驶视觉 - 语言 - 动作融合模型

摘要 本文深入探讨了 SimLingo,一个在自动驾驶领域具有开创性意义的视觉-语言-动作一体化模型。SimLingo 创新性地将自动驾驶、语言理解和指令感知控制整合到一个统一的纯摄像头框架中,显著提升了自动驾驶系统在复杂环境中的感知、决策与执行能力。该模…

第五十四天(SQL注入数据类型参数格式JSONXML编码加密符号闭合复盘报告)

#SQL注入产生原理: 代码中执行的SQL语句存在可控变量导致 #常见SQL注入的利用过程: 1、判断数据库类型 2、判断参数类型及格式 3、判断数据格式及提交 4、判断数据回显及防护 5、获取数据库名,表名,列名 5、获取对应数据及…

VMWare上搭建Hive集群

文章目录1. MySQL安装2. 安装Hive集群3. 使用Hive客户端4. 实战总结本实战在VMware上搭建Hive集群,集成MySQL作为元数据存储,完成Hive环境配置、元数据初始化及HDFS仓库目录创建,实现Hive on Hadoop的SQL查询能力,为大数据分析提供…

Android网络之WIFI技术网络模型概述

文章目录术语1、WLAN与WIFI2、802.11 WIFI无线网络标准演进3、WIFI5、WIFI6和WIFI7的最高速率对比4、WIFI网络中的各个角色(元件)1)网络拓扑架构图5、802.11权威指南1)OSI与TCP/IP2)IEEE 802.11协议簇介绍3&#xff09…

游戏中的设计模式——第三篇 简单工厂模式

5. 简单工厂模式 5.1 简单工厂模式的定义 简单工厂模式的核心是定义一个创建对象的接口,将对象的创建和本身的业务逻辑分离,降低系统的耦合度,使得两个修改起来相对容易些,当以后实现改变时,只需要修改工厂类即可。 5.…

基于SVN搭建企业内部知识库系统实践

一、准备工作 CentOS 7 服务器:确保你有 root 或 sudo 权限,可以访问该服务器。Windows 客户端:你将需要在 Windows 上安装 TortoiseSVN 客户端来与 SVN 服务器交互。防火墙:确保你的防火墙已开放 3690 端口,用于 SVN…

SQL注入7----(盲注与回显)

一.前言 在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办?例如应用程序就会返回 一个"通用的"的页面,或者重定向一个通用页面(可能为网站首页)。这时,我们之前学习的SQL注入办 法就…

尚硅谷宋红康JVM全套教程(详解java虚拟机)

https://www.bilibili.com/opus/1071553679925968898 案例7:日均百万订单系统JVM参数设置 https://github.com/wei198621/jvm_by_atguigu https://github.com/xftxyz2001/atguigu-jvm/blob/main/JavaYouthdocsJVM/%E7%AC%AC1%E7%AB%A0-JVM%E4%B8%8EJava%E4%BD%…

鸿蒙NEXT开发实战:图片显示、几何图形与自定义绘制详解

探索HarmonyOS NEXT强大的图形渲染能力,从图片展示到自定义绘图 HarmonyOS NEXT作为华为自主研发的操作系统,为开发者提供了一套丰富而强大的图形渲染能力。无论是显示图片、绘制几何图形,还是实现复杂的自定义绘图,鸿蒙都提供了简…

python + Flask模块学习 2 接收用户请求并返回json数据

用到的模块还是flask,用到的类有Flask, request, jsonfiy 🙂 目录 1、GET请求 2、POST请求 1、表单格式 2、json格式 就酱,也比较简单,下一篇说简单的授权,简单来说就是比如用户付费买了服…

国内外常用的免费BUG管理工具选型

帮助用户根据自身情况做决定,比如团队规模、技术能力、是否需要移动端支持等。避免只是罗列工具,而是提供实际选择的维度。 国内外常用的免费BUG管理工具选择非常丰富,从轻量级到功能全面型都有覆盖。我将它们分为几类,并详细介绍…

JavaScript的事件循环机制

1.事件循环的理解JavaScript是单线程的,意味着它一次只能执行一个任务。而事件循环就是去协调在JavaScript环境中运行的同步任务、异步任务(微任务、宏任务)的执行顺序的一种机制。它是 JavaScript 实现单线程非阻塞异步执行的核心。2.事件循环的执行顺序同步任务—…