计算机视觉教程核心版(三)优化中篇反向传播展示

2023-10-31

目录

介绍

简单的表达式

模块化

反向传播中的模式

多个分支梯度相加

 

介绍

在本节中,我们将对反向传播(这是一种通过递归的应用链式法则计算梯度表达式的方法)进行直观而专业的理解。理解反向传播的过程以及其中的细节对我们理解,有效开发、设计和调试神经网络至关重要。

问题陈述

本节核心问题是:给定一些函数f(x),x是输入向量。我们着力于计算f在x的梯度。

动机

回想最初我们对这个问题感兴趣的原因,在具体的神经网络中,f对应着损失函数,输入x包含训练数据和神经网络权重。例如损失函数可以使SVM损失函数,输入是训练数据(x_i, y_i),i=1...N和,权重及偏置(W,b)。一般情况下,我们认为训练数据给定且固定,且权重作为我们可以控制的变量。因此,尽管我们可以使用反向传播计算输入样本x_i的梯度,实际中我们经常仅仅计算参数(W,b)的梯度,以便于我们可以使用它来执行参数更新。然而输入x_i的梯度有时也可以发挥作用,例如,为了可视化和翻译神经网络正在做什么。

简单的表达式

我们用一个简单的例子开始,以便于我们为更复杂的表达式定义概念和惯称。

假设函数f(x, y, z) = (x, + y) * z。这个表达式可以被分解为q = x + y和f = q*z。并且,我们知道如何分开单独计算两个表达式的值,之后利用链式法则计算。我们赋予初始值,表示如下图

 

计算图如图所示

图片来源

则香草代码如图所示,绿色表示输入,红色数字表示此处f的梯度值。

 

# set some inputs
x = -2; y = 5; z = -4

# perform the forward pass
q = x + y # q becomes 3
f = q * z # f becomes -12

# perform the backward pass (backpropagation) in reverse order:
# first backprop through f = q * z
dfdz = q # df/dz = q, so gradient on z becomes 3
dfdq = z # df/dq = z, so gradient on q becomes -4
# now backprop through q = x + y
dfdx = 1.0 * dfdq # dq/dx = 1. And the multiplication here is the chain rule!
dfdy = 1.0 * dfdq # dq/dy = 1

反向传播计算梯度如图

 

每一个节点之前的梯度(即偏导数)等于它的前向梯度乘它的本地梯度。举例,最后一个节点之后的偏导数等于它的前向梯度,即f对自己的偏导数,结果为1。最后一个节点由两输入部分相乘组成,即上箭头所指,和下箭头所指。上箭头的本地梯度z,带入输入值z(如图绿色部分),则本地梯度值为-4,此处梯度值为-4*1。下箭头梯度公式为q,带入q的值,则梯度为-3*1。

 

另一个节点的的输入由两输入部分相加得到,则节点的上箭头的本地梯度为q对x的偏导数,本体梯度为1,则此处梯度值为-4*1。下箭头的本地梯度为q对y的偏导数,本地梯度为1,则此处梯度值为-4*1。

更复杂的例子如下计算图

模块化

上图中,我们把梯度计算尽可能地分解成最简单的加法和乘法节点。实际上我们可以把一些节点组合在一起,形成更复杂的节点,如果我们想这么做的话,我们需要知道组合节点的本地梯度。例如sigmoid函数,将e的指数看为sigmoid函数输入

则计算如下图变得极为方便。

 

反向传播中的模式

值得注意的是,在许多案例中,反向传播梯度可以在直观层面上解释。例如,三个最常用的门(相加,相乘和求最大值),针对于这些门在反向传播过程中发挥的作用,它们都有各自非常形象的解释。

加法节点的分支梯度(注意是反向传播)等于它的上游梯度,我们可以将计算图加法节点当做梯度分布器,其将上游梯度分布到各个分支。最大值结点在正向传播过程中,仅有最大输入值对输出的影响,在反向过程中(max(a, 0)的在a>=0时候,梯度为1,在梯度小于0的时候,梯度为0),将梯度路由到其中一个分支,这类似路由器的功能。乘法结点将上游梯度通过缩放分步到各输入上,因此乘法结点类似于梯度分布器。

 

 

多个分支梯度相加

如果一个节点的输出q_{}i给n个节点,这个节点的梯度公式如下:

\frac{\partial f}{\partial x}=\sum_{i=1}^{n}\frac{\partial f}{\partial q_{}i}*\frac{\partial q_{}i}{\partial x}

 

 

矢量化操作梯度

示例,细节解释见参考

具体见

总结:

  • 我们研究了各种梯度的含义,它们是怎样在回路中反向传播,怎样更新。
  • 我们讨论了实际中分阶段计算的重要性,我们总是将函数打碎成各种模块,在这些模块中你可以轻易地得到局部梯度并使用链式法则,计算最终结果。更重要的是,我们一点也不想把损失函数的梯度求出来,并一次性计算梯度,我们不需要一个清楚地数学梯度等式。因此,分解表达式到多个阶段以便于你能够独立区分每个阶段。

下一节我们将开始定义神经网络,反向传播将使我们高效得在连接出计算损失函数梯度。换句话说,我们已经准备好训练神经网络。卷及神经网络近在咫尺。

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机视觉教程核心版(三)优化中篇反向传播展示 的相关文章

  • [ESP32C3填坑] AT指令不应答

    烧录固件 固件连接 发布的固件 ESP32 C3 ESP AT 用户指南 latest 文档 espressif com 然后选择 v2 4 2 0 ESP32 C3 MINI 1 AT V2 4 2 0 zip这个版本 再下载烧录软件 工
  • 外观模式(Facade)

    设计模式之外观模式 外观模式的作用 为复杂的系统提供高层的接口 程序这个东西总是会变的越来越大 随着时间的推移 程序中的类会越来越多 而且它们之间相互关联 这会导致程序结构也变得越来越复杂 随之也会使得我们在使用这些类之前 必须弄清楚它们之
  • 中文乱码的原因及解决方法

    1 我们常用的编码表 ASCLL 美国标准信息交换码 gt 用一个字节的7位可以表示 ISO8859 1 拉丁码表 欧洲码表 gt 用一个字节的8位来表示 GB2312 中国的中文编码表 GBK 中国的中文编码表的升级 gt 一个汉字用两个

随机推荐

  • TensorFlow实战练习2

    TensorFlow实现自编码器 自编码器可以使用自身的高阶特征编码自己 自编码器其实是一种神经网络 它的输入和输出是一致的 它借助稀疏编码的思想 目标是使用稀疏的一些高阶特征重新组合来重构自己 它的特点非常明显 第一 期望输入 输出一致
  • VS2019无法登陆解决办法

    文章目录 前言 1 vs登陆 2 解决 总结 前言 今天想看看c代码 打开vs2017 哦豁 登不进去 打开vs2019 哦豁 还是不行 1 vs登陆 到这里就登不进去了 2 解决 vs2019找到账户选项 将嵌入式Web浏览器改为系统We
  • Spring事务嵌套:业务场景事务2异常时需要事务2回滚事务1提交

    目录 1 改变事务2的传播方式REQUIRES NEW 2 异步调用 业务场景 业务提交审核 生成审核账单等数据 事务方法1 审核通过 业务看到账单如果没有问题就去手动审核通过 事务方法2 后期增加了一个自动审核的功能 如果账单中等等一些信
  • 【华为OD机试真题 JAVA】转骰子

    JS版 华为OD机试真题 JS 转骰子 标题 转骰子 时间限制 1秒 内存限制 262144K 语言限制 不限 骰子是一个立方体 每个面一个数字 初始为左1 右2 前3 观察者方向 后4 上5 下6 用123456表示这个状态 放置到平面上
  • 【新手教程】手把手教你搭建腾讯云服务器,图文详细教程

    目 录 本篇字数 1271 背景 服务器搭建 环境搭建 安装JDK Tomcat MySQL驱动 域名绑定 背景 暑假期间 愁着无聊但也不能荒废学业吧 毕竟以后想靠技术混口饭吃 为了实施自己的计划 特地挑了一个便宜的云服务器来用作自己的后台
  • 华为OD机试 - 计算最接近的数(Java)

    题目描述 给定一个数组X和正整数K 请找出使表达式 X i X i 1 X i K 1 结果最接近于数组中位数的下标 i 如果有多个 i 满足条件 请返回最大的 i 其中 数组中位数 长度为N的数组 按照元素的值大小升序排列后 下标为 N
  • SQL 从字符串中提取数字

    一基础使用 声明一个nvarchar类型的变量并赋值declare Name nvarchar 50 set Name 我正在123学 习22 SQL中11 的一些函数 patindex函数返回所查内容在字符串中第一次出现的内容print
  • 敏捷开发 宣言 思想 认识误区

    敏捷软件开发 Agile software Development 敏捷开发是一种软件开发方法 基于迭代和增量开发 通过自组织 跨团队 沟通协作完成开发工作 敏捷宣言的诞生 2001年2月11日到13日 17位软件开发领域的领军人物聚集在美
  • C语言 系统调用操作内核信号集

    使用内存映射可以拷贝文件 对原始文件进行内存映射 创建一个新文件 把新文件的数据拷贝映射到内存中 通过内存拷贝将第一个文件的内存映射区拷贝到第二个文件的内存映射区 释放资源 匿名映射 不需要文件实体来进行内存映射 只能用于有血缘关系的进程间
  • 【Python 1-14】Python手把手教程之——详解函数的高级用法

    作者 弗拉德 来源 弗拉德 公众号 fulade me 传递列表 你经常会发现 向函数传递列表很有用 这种列表包含的可能是名字 数字或更复杂的对象 如字典 将列表传递给函数后 函数就能直接访问其内容 下面使用函数来提高处理列表的效率 假设有
  • Filter过滤器的作用和工作原理

    对于一个web应用程序来说 过滤器是处于web容器内的一个组件 它会过滤特定请求资源请求信息和响应信息 一个请求来到时 web容器会判断是否有过滤器与该信息资源相关联 如果有则交给过滤器处理 然后再交给目标资源 响应的时候则以相反的顺序交给
  • ubuntu 查看USB对应的串口

    dmesg grep tty conner conner W65KJ1 KK1 dmesg grep tty 0 000000 console tty0 enabled 4 599129 usb 1 6 2 ch341 uart conve
  • FAT32下和NTFS下永久性删除文件的恢复

    FAT32下和NTFS下永久性删除文件的恢复 查看文件系统类型 FAT32下永久性删除文件的恢复 NTFS下永久性删除文件的恢复 注意事项 总结 查看文件系统类型 右键磁盘点击属性 就可以看到文件系统 如果没有FAT32文件系统 可以创建虚
  • 外包干三年,必废!

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 源码精品专栏 原创 Java 2020 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 Rock
  • Anaconda环境配置常见报错与解决方案汇总

    Anaconda指的是一个开源的Python发行版本 其包含了conda Python等180多个科学包及其依赖项 因为包含了大量的科学包 Anaconda 的下载文件比较大 约 531 MB 如果只需要某些包 或者需要节省带宽或存储空间
  • Windows 环境安装Scala详情

    为了进一步学习Spark 必须先学习Scala 编程语言 首先开始Scala 环境搭建 温馨提示 本文是基于Windows 11 安装Scala 2 13 1 版本 第一步 确保本机已经正确安装JDK1 8 环境 第二步 Scala 官网下
  • python里unexpected eof while parsing_[人人都会编程]Python代码报错看不懂?记住这20个报错提示单词轻松解决bug...

    1 syntaxerror invalid syntax语法错误 无效语法 1 syntax s nt ks 语法 句法 2 error er r 错误 3 invalid n v l d 无效 2 syntaxerror unexpect
  • ChatGPT爆火背后的真相:学编程已经成为必选项

    这一阵最热门的话题 莫过于人工智能新选手 ChatGPT 在推出后只用了两个月就积累了1亿用户 它的出现在科技圈掀起了一阵 惊涛骇浪 有人称ChatGPT的意义 堪比当年蒸汽机的出现 它足以爆发新一轮的 工业革命 它的出现 和我们每个人的生
  • 有关@string

    android label string app name gt 什么意思 有何作用 android label string app name gt 意思是应用的名称 还有一个是主活动的名称 label表示标签 表示引用 string a
  • 计算机视觉教程核心版(三)优化中篇反向传播展示

    目录 介绍 简单的表达式 模块化 反向传播中的模式 多个分支梯度相加 介绍 在本节中 我们将对反向传播 这是一种通过递归的应用链式法则计算梯度表达式的方法 进行直观而专业的理解 理解反向传播的过程以及其中的细节对我们理解 有效开发 设计和调