当前位置: 首页 > news >正文

【机器学习300问】59、计算图是如何帮助人们理解反向传播的?

        在学习神经网络的时候,势必会学到误差反向传播,它对于神经网络的意义极其重大,它是训练多层前馈神经网络的核心算法,也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播,不妨借助一个工具——计算图。

一、计算图是什么?

(1)计算图的定义

        计算图是一种用来表示数学表达式和计算流程的数据结构(有向图),是一个将复杂计算过程可视化的图形模型。计算图中有节点(vertices)和边(edges)的概念,节点通常表示计算操作或者函数,而边表示数据或参数的流动,一个节点的输出可以成为另一个节点的输入。

(2)举例说明

        举例说明一下,假设有这样一个数据表达式 v=a+u 它的计算图可以画成这样:

        现在,在这个操作的前后分别再加上个操作 u=bc 和 J=3v,那么这个新的复杂一点的计算图可以画成这样:

(3)计算图的主要用途和优点

① 直观的表现计算关系

计算图中的节点代表数值或者变量,而边则表示节点之间的依赖关系,例如加法、乘法或其他复杂操作。这种图形化的表示方式直观展示了计算步骤及其顺序。

② 进行局部计算

无论全局计算是多么的复杂,都可以通过局部计算使各个节点致力于简单的计算,从而简化问题。

③ 内存优化和提升计算效率

计算图可以缓存中间计算结果,避免重复计算,提高内存使用效率和减少运行时间。

④ 自动微分和计算梯度

        在训练神经网络时,需要计算损失函数相对于所有权重的梯度来进行优化。计算图能够轻松实现自动微分,因为每一步计算的梯度可以通过链式法则从输出反向传播至输入,这一过程被称为反向传播。

二、计算图怎么实现正向传播?

(1)正向传播的过程

  1. 初始化节点值:在计算图中,输入层的每一个节点都会被赋予一个初始值,这通常是实际输入数据,比如一组特征向量。
  2. 应用权重和偏置:在计算到达隐藏层之前,输入层的节点值与对应的权重(weights)相乘。此外,每个隐藏层节点都会加上一个偏置值(bias)。这个操作对应计算图中的一个节点,其上一层的所有输出都会汇聚到这个点。
  3. 激活函数:在隐藏层节点加上权重和偏置之后,通过一个激活函数(如ReLU或Sigmoid)来引入非线性。激活函数的选择对网络的性能有着直接影响。此操作通常在计算图中表示为另外一个节点。
  4. 传递到下一层:经过激活函数处理后的值被传递到下一层,如果有多个隐藏层,则这一过程会重复进行,直到达到输出层。
  5. 输出层的计算:最后,当信息流到达输出层,相同的过程(加权、求和、添加偏置以及激活)会得到一个输出值。在分类任务中,这个值通常会通过softmax函数被转换成概率分布。
  6. 得出预测结果:这个最终经过激活处理的输出层的值就是网络的预测结果。对于不同的任务,比如分类、回归或其他,输出层会以不同的方式处理这些值来适应特定任务的需求。

(2)正向传播举例

        以逻辑回归任务为例,来介绍一下上述过程的具体实现。先把逻辑回归所用到的公式说明一下:

z=w^Tx+b=w_1x_1+w_2x_2+b

        假设数据样本只有两个特征x_1x_2,为了计算z,我们需要输入参数w_1,w_2,b,因此z的公式如上所示。逻辑回归模型的公式定义如下,其中\hat y是预测值,\sigma(z)是sigmoid函数:

\hat y = a = \sigma (z)

\sigma(z)=\frac{1}{1+e^{-z}}

        逻辑回归的损失函数定义如下,为了简单理解我给出的是单个样本的代价函数:

L(a,y)=-[ylog(a)+(1-y)log(1-a)]

        其中,a是逻辑回归的输出,y是样本的标签值(真实值)。现在我们画出这个计算图。

(3)人话理解正向传播

        正向传播很好理解,就是你把数值带入上面这个图,从左向右正向一次计算每一个节点中的数学表达式,就得到了最终的输出。 虽然很好理解,但我在这里特意说明一下,在正向传播过程中,“传播”的实际上是信号数据(就是你通过节点式子算出来的值)。

        中间怎么算的你可以忽略,正向传播就是在干这样一件事情,输入一组样本加上对应权重和偏置,得到一个最终的损失函数值。进一步理解就是说,不同的一组样本+权重+偏置会得到不同的损失函数值。因为神经网络学习的目的就是得到最优的权重和偏置(w,b合称参数),所以我把每次输入的训练样本都设成一样,但是允许更换许多许多组不同的权重+偏置的组合,就会得到许多许多不同的损失函数值。

        我想要做的事情就是想得知:当损失函数值最小的时候,对应的权重+偏置是多少,此时的参数就是最优参数。要想达成这个目的就需要误差反向传播。

三、计算图怎么实现反向传播?

(1)反向传播的过程

        计算图在实现反向传播的过程中扮演了关键角色,它提供了一种结构化的表示,使得能够高效且准确地计算神经网络中所有参数相对于损失函数的梯度。下面是利用计算图进行反向传播的基本步骤:

  1. 计算损失函数值:反向传播的起点是损失函数,使用预测结果和实际标签计算损失函数的值。损失函数衡量模型预测结果与真实值之间的差距。
  2. 初始化梯度:在损失节点处,对自身的梯度进行初始化,通常这个梯度是1,因为损失函数关于自身的导数是1。初始化所有参数(权重和偏置)的梯度为零。
  3. 利用链式法则计算每个节点梯度:从输出层开始,根据损失函数的梯度(即损失函数对输出层节点的导数),利用链式法则,将计算得到的梯度沿着计算图反向传播到每个权重和偏置。每个节点的梯度是其下游节点梯度与其本地导数的乘积累积而成。
  4. 梯度聚合:在计算图中,一个节点可能有多个输入,每个权重可能会受到多条路径上的梯度影响,需要将所有这些影响累积起来,得到最终的梯度值。
  5. 参数更新:当所有参数的梯度都通过反向传播计算出来后,根据优化算法(如梯度下降法或其变种)使用这些梯度来更新相应的权重和偏置。

(2)反向传播举例

        以一个输入节点的输入层、一个sigmoid作为激活函数的隐藏层,一个输出节点的输出层为例。先给出他的正向传播计算图:

        除了乘法和加法节点之外,还出现了自然数e为底的幂运算和除法节点。除法节点处的导数公式是:

y=\frac{1}{x}

\frac{\partial y}{\partial x}=-\frac{1}{x^2}=-y^2

反向传播时,会将上游的值乘上-y^2后再传给下游。计算图如下:

加法节点会原封不动的传给下游,计算图如下图所示:

exp节点的y=e^x它的导数就是它自己,所以上游的值要乘上这个exp(-x)后再传给下游,计算图如下所示:

乘法节点将正向传播时的值翻转后做乘法,因此这里需要乘以-1,计算图如下所示:

(3)人话理解反向传播

        既然神经网络学习的目的是学到最优权重w和偏置b(合称参数),这个“最优”怎么定义?就是指能让损失函数值最小的参数,就是最优参数。要想得到最优参数,那么我就得回答这样一个问题,即怎么根据现在误差值来调整w和b才能让误差值变小呢?这个问题可以拆解成另外两个小问题:

① 误差和参数之间它们是怎么互相影响对方的?

        建立参数与误差值之间的公式,也就是损失函数。通过损失函数就找到了他们之间的桥梁,就能知道误差想要表小,参数该如何变化。

② 如果误差变化了参数该如何变化?

        为了使误差减小,我们需要根据损失函数关于参数的梯度来调整参数。梯度给出了损失函数在当前参数值处的斜率,指向损失函数值下降最快的方向。这里有必要重提一下导数的定义:“一函数在某一点的导数描述了这个函数在这一点附近的变化率”,也就是自变量变,函数值跟着变,还不是简单的跟着变多少,还知道变的快慢。假设我有w_1,w_2,b三个参数,对损失函数求偏导就能知道每一个参数,它对应要变化多快或多慢,将这种变化率\partial w_1,\partial w_2,\partial d反向传给原来的w_1,w_2,b,就能指导参数变化的具体值:

w_{new}=w_{old}-a\partial w

b_{new}=b_{old}-a\partial b

        所以反向传播,“传播”的是误差信号在神经网络中的梯度(就是指导参数该怎么变的变化率)。具体来说,它并不是传播实际的输入数值或预测结果,而是传播从输出层到输入层的损失函数相对于网络中每个参数的梯度(梯度就是偏导数的向量表示)。这些梯度信息表明了在当前参数设置下,损失函数增大或减小的趋势。也就是说,告诉我们应当如何调整权重和偏置才能降低损失函数的值。

③ 举个小孩儿做题的例子

        反向传播就好比你正在教一个小孩做一道复杂的数学题。小孩做完题后,你会检查答案是否正确,如果不对,你会告诉他哪里错了,让他改正。在这个过程中:

  • 正向传播:就像是小孩按照步骤一步步计算题目。比如说他要计算 (a+b) × c,他先算出 a+b 的结果,然后再把这个结果乘以 c 得到最后的答案。

  • 损失函数:相当于你用来判断小孩答案对错的标准。如果他的答案离正确答案差很多,你就有一个衡量错误程度的“分数”。

  • 反向传播:是你指导小孩如何改正错误的过程。假设他最后的答案错了,你会告诉他:“你计算的最后一步有问题,你需要知道是因为 c 值没乘对还是前面 a+b 的结果就不对。”于是你从最后一个步骤开始,告诉小孩每一步对他最后答案的影响有多大(也就是计算梯度),这样他才能有针对性地调整自己的计算步骤,以便下次做得更好。

        这里的关键就在于,你没有告诉他正确答案(也就是损失函数最小的时候对应的参数,有时候正确答案你自己都不知道),而是通过提示让他自己一步步去找到正确答案。

相关文章:

【机器学习300问】59、计算图是如何帮助人们理解反向传播的?

在学习神经网络的时候,势必会学到误差反向传播,它对于神经网络的意义极其重大,它是训练多层前馈神经网络的核心算法,也是机器学习和深度学习领域中最为重要的算法之一。要正确理解误差反向传播,不妨借助一个工具——计…...

ctfshow web入门 php特性 web108--web115

web108 ereg函数相当于而preg_match()函数 ereg函数的漏洞:00截断。%00截断及遇到%00则默认为字符串的结束 strrev函数就是把字符串倒过来 就是说intval处理倒过来的传参c0x36d(877)?ca%00778 web109 异常处理类 通过异常处理类Excepti…...

京东API接口采集商品详情数据(测试入口如下)

京东API接口采集商品详情数据 请求示例,API接口接入Anzexi58 在当今数字化时代,电商平台的API接口成为了获取商品详情数据的重要途径之一。作为中国最大的自营式电商企业,京东提供了丰富的API接口供开发者使用,以便获取京东平台上…...

Mac brew 安装软件

Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…...

【顶部距离计算】计算元素顶部与浏览器顶部的距离

在开发中,我们常常需要计算某个元素顶部与浏览器视口顶部的距离,只需要一个方法即可计算 解决:使用getBoundingClientRect()方法 代码示例: 接收一个参数element表示需要计算的元素 // 计算该元素的顶部距离浏览器的顶部距离 c…...

守护人类健康:人工智能赋能医疗领域创新应用

编者按:每年的4月7日是世界卫生日,又称世界健康日,旨在引起世界各国人民对卫生、健康工作的关注,提高人们对卫生领域的素质和认识,强调健康对于劳动创造和幸福生活的重要性。那么,如果医疗技术能够更加智能…...

linux常用指令(一)——cat、more、cp

cat命令: 用于查询看文件内容 语法:cat linux路径 参数必填,表示要查看文件的目录的路径,(相对,绝对,特殊路径符都可以使用) more命令: 用于查看文件内容&#xff0c…...

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码;HAL_QSPI_MapInit; 这里注意:你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的,如果不是你需要将引脚…...

Mac反编译APK

文章目录 第一种方式: brew installapktool 使用说明dex2jar 使用说明 第二种方式: 下载安装包apktool 使用说明 (根据官方介绍没有操作成功,后续成功再更新这里)dex2jar 使用说明 安装 JD-GUI 查看jar包中的class文件JD-GUI 使用说明 第一种方式: brew install 安装过程可能很…...

Java数据结构-队列

目录 1. 队列概念2. 模拟实现队列2.1 链式队列2.2 循环队列 3. 双端队列4. 队列的应用4.1 用队列实现栈4.2 用栈实现队列 1. 队列概念 队列是一种只能在一端进行插入数据操作,另一端进行删除数据操作的数据结构,插入数据的叫队尾,删除数据的…...

JVM专题——类文件结构

本文部分内容节选自Java Guide和《深入理解Java虚拟机》, Java Guide地址: https://javaguide.cn/java/jvm/class-file-structure.html 🚀 基础(上) → 🚀 基础(中) → 🚀基础(下&am…...

零基础10 天入门 Web3之第2天

10 天入门 Web3之第2天Web3 是互联网的下一代,它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术,该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划,可帮助大家入门 Web3: 一、这是第二…...

Vue和FastAPI实现前后端分离

前言 近期接触了一些开源大模型应用服务,发现很多用的都是FastAPI web框架,于是乎研究了一下它的优势,印象最深有两个:一个是它的异步处理性能比较好,二是它可以类似java swagger的API交互文档,这个对应前…...

34470A是德科技34470A数字万用表

181/2461/8938产品概述: Truevolt数字万用表(34460A、34461A、34465A、34470A)利用是德科技的新专利技术,使您能够快速获得见解、测量低功耗设备并保持校准的测量结果。Truevolt提供全方位的测量能力,具有更高的精度、…...

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑

引言 在 iOS 开发中,将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下,我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而,如果你没有 Mac 电脑,也没有关系,本文将介绍一…...

c语言多媒体文件管理及检索系统220

定制魏:QTWZPW,获取更多源码等 目录 选题 程序设计题1:基于数据分析的小区电量扩容推荐程序 程序设计题2:神气的盒子 程序设计题3:多媒体文件管理及检索系统 程序设计题4: 计算24点游戏 程序设计题…...

链表之双向链表的实现

铁汁们大家好,我们上一篇博客学习了单链表,这节课让我们继续往深学习,学习一下双线链表,话不多说,我们开始吧! 目录 1.双向链表 2.顺序表和链表的优缺点 3.双向链表的实现 1.双向链表 1.我们要实现的双线…...

小白学大模型:什么是生成式人工智能?

什么是生成式人工智能? 在过去几年中,机器学习领域取得了迅猛进步,创造了人工智能的一个新的子领域:生成式人工智能。这些程序通过分析大量的数字化材料产生新颖的文本、图像、音乐和软件,我将这些程序简称为“GAIs”…...

并发编程01-深入理解Java并发/线程等待/通知机制

为什么我们要学习并发编程? 最直白的原因,因为面试需要,我们来看看美团和阿里对 Java 岗位的 JD: 从上面两大互联网公司的招聘需求可以看到, 大厂的 Java 岗的并发编程能力属于标配。 而在非大厂的公司, 并…...

3.类与对象(中篇)介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...