(三)反向传播 Backpropagation

文章目录

      • 反向传播Backpropagation
        • (1)Chain Rule
        • (2)Forward pass和Backward pass

反向传播Backpropagation

对于计算Gradient Descent这件事情,我们的neural network是有非常非常多的参数,可能有上百万个参数。所以input的 θ \theta θ向量是有上百万维的。现在最大的困难就是,你要如何有效地去把这个百万维的向量计算出来。——这个就是Backpropagation在做的事情。

image-20241118213549677

所以,Backpropagation并不是一个和Gradient Descent不同的训练方法,它本身就是Gradient Descent,它只是一个比较有效率的算法,让你在计算gradient这个向量的时候是比较有效率的。

(1)Chain Rule

Backpropagation里面没有特别高深的数学,你唯一需要记得的就是Chain Rule。(链式法则)

image-20241118213952269

再回到neural network上面。

image-20241118214329999

对于一个输入 x n x^n xn,通过计算得到的结果 y n y^n yn,它和真实值 y ^ n \hat y^n y^n之间的差距,就是我们的一个Loss, C n C^n Cn

把所有的Loss加起来求和,就得到最终的 L ( θ ) L(\theta) L(θ)

如上图所示,如果此时要对某一个参数比如 w w w求偏微分的话,就得到右边这个式子,即:对整体求偏微分,等于对每个加项求偏微分再求和。

这样考虑有什么好处,好处在于,接下来我们就不用去想着怎么对 L ( θ ) L(\theta) L(θ)整体求偏微分了,而只是去考虑,我们如何去计算,对于某一笔data,我们求它的 C n ( θ ) C^n(\theta) Cn(θ)的偏微分就可以了。这样把每一笔data的求出来,再加和就可以了。

image-20241118215157092

因此,我们从下面这个neural network里面,先只拿一个neural出来去考虑它。

image-20241118215426266

对于一个neuron,假设它如上图所示有两个输入,那么它的计算结果应该是: z = x 1 w 1 + x 2 w 2 + b z=x_1w_1+x_2w_2+b z=x1w1+x2w2+b,根据刚才所说,现在我们要计算它的 ∂ C ∂ w \frac{\partial C}{\partial w} wC,结合Chain rule的原理,它等于 ∂ z ∂ w ∂ C ∂ z \frac{\partial z}{\partial w}\frac{\partial C}{\partial z} wzzC

对于这两项,其中, ∂ z ∂ w \frac{\partial z}{\partial w} wz叫做“Forward pass”。对于另一项, ∂ C ∂ z \frac{\partial C}{\partial z} zC被叫做Backward pass。

(2)Forward pass和Backward pass

Forward pass

先来看一下怎么计算 ∂ z ∂ w \frac{\partial z}{\partial w} wz

image-20241118220735806

不难计算。但是我们从中可以发现一个规律,就是:这个 w 1 w_1 w1前面接的是 x 1 x_1 x1,所以它的微分就是 x 1 x_1 x1;这个 w 2 w_2 w2前面接的是 x 2 x_2 x2,所以它的微分就是 x 2 x_2 x2

所以,假如给你一个neural network,此时计算任何一个 ∂ z ∂ w \frac{\partial z}{\partial w} wz都会变得非常容易,因为我们发现的一个规律是,只需要看这个 w w w对应的input是什么即可。

image-20241118221603795

Backward pass

对于 ∂ C ∂ z \frac{\partial C}{\partial z} zC来说,似乎它的计算就比较复杂了。

image-20241118221828728

因为,在得到z之后,在这之后还要经过一个复杂的计算过程,才会得到C。(因为C是根据最终的计算结果y,与真实值 y ^ \hat y y^对比得出的)

不过在此,我们可以用Chain Rule对此再做一个拆解。

image-20241118222256143

此处我们向后多考虑一层。这一层计算出的z经过一个激活函数,例如Sigmoid函数,即 a = σ ( z ) a=\sigma(z) a=σ(z),它在下一层当中作为其中一个input。如上图所示,它在下一层中作为一个input的时候,它会再乘上它对应的 w w w,与另一个input乘对应w相加,去计算下一层的 z ′ z' z z ′ ′ z'' z′′。(注:此处举的例子里面每层是有两个neuron,实际上会有更多个)

使用Chain Rule,我们可以写出 ∂ C ∂ z = ∂ a ∂ z ∂ C ∂ a \frac{\partial C}{\partial z}=\frac{\partial a}{\partial z}\frac{\partial C}{\partial a} zC=zaaC

对于 ∂ a ∂ z \frac{\partial a}{\partial z} za,很好计算,因为我们知道 a = σ ( z ) a=\sigma(z) a=σ(z),我们只需要求 σ ′ ( z ) \sigma'(z) σ(z)即可。也可以看一下下图,绿色的是Sigmoid函数,紫色的是它的导函数。

image-20241118223319850

接下来的问题就是 ∂ C ∂ a \frac{\partial C}{\partial a} aC应该长什么样子呢?

先不考虑那么遥远,先考虑a对下一层的影响。如图,我们知道,a会影响 z ′ z' z z ′ z' z会影响最终的C;a会影响 z ′ ′ z'' z′′ z ′ ′ z'' z′′会影响最终的C。总之,先不考虑那么多,对于后面这一层而言,a总之要先透过 z ′ z' z z ′ ′ z'' z′′去影响C。

所以,就像Chain Rule的Case 2那样,此处我们可以写成: ∂ C ∂ a = ∂ z ′ ∂ a ∂ C ∂ z ′ + ∂ z ′ ′ ∂ a ∂ C ∂ z ′ ′ \frac{\partial C}{\partial a}=\frac{\partial z'}{\partial a}\frac{\partial C}{\partial z'}+\frac{\partial z''}{\partial a}\frac{\partial C}{\partial z''} aC=azzC+az′′z′′C。(因为我们举的例子当中是每层只有两个neuron,所以此处是有两个部分,如果有更多个neuron,那么式子会有更多项之和)

对于这个式子,我们仍然是要去计算它。对于其中的 ∂ z ′ ∂ a \frac{\partial z'}{\partial a} az,怎么算?很简单,就是 w 3 w_3 w3,因为 z ′ = a w 3 + . . . z'=aw_3+... z=aw3+...;同理, ∂ z ′ ′ ∂ a \frac{\partial z''}{\partial a} az′′就是 w 4 w_4 w4

image-20241118224848003

接下来的问题就是: ∂ C ∂ z ′ \frac{\partial C}{\partial z'} zC ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z''} z′′C怎么算?——此处我们同样面临着刚才的问题:在 z ′ z' z z ′ ′ z'' z′′这一层之后,同样还会发生很多很多的事情,还要做很复杂的计算,最终才能得到y,才能得到C。所以我们一下子不知道C对z’或者C对z’'该怎么算。

image-20241118225145816

此处我们先假设这两项我们已经通过某种方法算出来了。先不管为什么,总之我们假设这两项已经被我们算出来了。

那么,至此,整个 ∂ C ∂ z \frac{\partial C}{\partial z} zC就能够计算出了。
∂ C ∂ z = σ ′ ( z ) [ w 3 ∂ C ∂ z ′ + w 4 ∂ C ∂ z ′ ′ ] \frac{\partial C}{\partial z}=\sigma'(z)[w_3\frac{\partial C}{\partial z'}+w_4\frac{\partial C}{\partial z''}] zC=σ(z)[w3zC+w4z′′C]
image-20241118225436131

其实到这里,我们可以这样说:只要我们知道了 ∂ C ∂ z \frac{\partial C}{\partial z} zC ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z''} z′′C是多少,我们就可以计算出 ∂ C ∂ z \frac{\partial C}{\partial z} zC了。

对此,我们直接从另外一个视角来观察这个式子,如下图所示:

image-20241118225609249

此处我们可以把它理解成一个“特殊的neuron”,这个neuron的input,就是 ∂ C ∂ z ′ \frac{\partial C}{\partial z'} zC ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z''} z′′C,它们分别乘上各自的权重 w 3 w_3 w3 w 4 w_4 w4,加和之后再乘上一个 σ ′ ( z ) \sigma'(z) σ(z)就得到output,就是 ∂ C ∂ z \frac{\partial C}{\partial z} zC

注意, σ ′ ( z ) \sigma'(z) σ(z)是一个常数,因为它在我们计算Forward pass的过程中就已经被计算好了,而不是一个函数。

现在的情况是:“假设 ∂ C ∂ z ′ \frac{\partial C}{\partial z'} zC ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z''} z′′C已经被计算出来的情况下,所有问题就都被解决了。——那 ∂ C ∂ z ′ \frac{\partial C}{\partial z'} zC ∂ C ∂ z ′ ′ \frac{\partial C}{\partial z''} z′′C怎么算呢?

Case 1.Output Layer

第一种情况,假设后面这一层的output已经是整个neural network的输出层了。

image-20241118233040189

这时就很好算,因为 y 1 y_1 y1 z ′ z' z的函数,而损失函数C也是 y y y的函数,所以它们的偏导都很容易能算出。

Case 2.Not Output Layer

image-20241118233506787

如果红色的这一层不是最后一层,而是在它后面还有很多复杂的过程,怎么办?

同样的道理,它也是来自于它后面一层,如上图所示。——反复的继续下去,总有一次我们会得到上面Case 1的情况,就有解了。

image-20241118233907141

至此,你可能会觉得有点崩溃。假如这个网络有10层Layer,那么对于这个偏微分的计算公式,就会是一个很可怕的式子。从前往后不停地展开、嵌套……。

但是实际上并不是你想的那样,你只需要换一个视角,从后往前看,即从Output Layer开始算。——你会发现,它的运算量,和刚才我们讲的Forward pass是一样的。

image-20241118234308273

把它从后往前视为一个特殊的neural network就可以了。

image-20241118234431295

重新思考一下,实际上Backpropagation就是重新建了一个neural network,它的最初input就是最后一层的偏微分,并且它每层的 σ ′ ( z ) \sigma'(z) σ(z)要首先经过一轮Forward pass才能获取。除此之外,就和一个普通的neural network运算是一样的。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Dowex 50WX8 ion-exchange resin可以用于去除水中的金属离子(如钠、钾、镁、钙等)和其他杂质,提高水质,11119-67-8

一、基本信息 中文名称:Dowex 50WX8 离子交换树脂 英文名称:Dowex 50WX8 ion-exchange resin CAS号:11119-67-8 供应商:陕西新研博美生物科技 外观:米色至浅棕色或绿棕色粉末/微球状 纯度:≥95% 分子…

国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程

在当今数字化、网络化的视频监控领域,大中型项目对于视频监控管理平台的需求日益增长,特别是在跨区域、多设备、高并发的复杂环境中。EasyCVR视频监控汇聚管理平台正是为了满足这些需求而设计的,它不仅提供了全面的管理功能,还支持…

一家餐饮企业,「闯入」AI阵地

作者| 皮爷 出品|产业家 “我们需要用AI来帮助我们门店破除内卷的状态。”一位连锁餐饮品牌告诉产业家,“这也是我们想尽快把AI用起来的原因,看看能不能带来一些帮助。” 这种情况正发生在一众餐饮企业中。 与这种情况对应的一个背景是&#xff0c…

基于YOLOv8深度学习的智慧社区建筑外墙破损(裂缝、露筋、剥落)检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着智慧社区的发展,对建筑结构健康状况的实时监测变得愈发重要。在此背景下,建筑外墙破损(如裂缝、露筋和剥落)等问题对建筑物整体结构的安全性和耐久性构成了严重威胁,及时、准确地检测这些问题变得尤为关键。传统的…

单片机UART协议相关知识

概念 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器) 是一种 异步 串行 全双工 通信协议,用于设备一对一进行数据传输,只需要两根线(TX,RX)。 异步&…

Python模块、迭代器与正则表达式day10

1、Python模块 1.1模块的简介 在编写代码的时候,创建的.py文件就被称为一个模块 1.2模块的使用 想要在a文件里使用b文件的时候,只要在a文件中使用关键字import导入即可 1.2.2 from ...import...语句 导入模块可以使用import,如果只导入模…

DDD架构设计知道(1)

看过很多人写架构设计的文章,绝大多数都是站在企业的角度谈“术”的层面。而当今的时代社会特别是00后门更多的会站在个人的角度,去看架构设计。个体和超级单体时代也已经来临,很多传统意义上的企业管理模式也在改变。所以如果架构设计面对当…

ubuntu下连接了192.168.1.x和192.168.2.x两个网络段,如何让这个两个网段互相通信?

在 Ubuntu 上连接两个网络段(如 个人终端A 192.168.1.10 和 个人终端B 192.168.2.10),需要配置路由和网络转发功能,使这两个网段能够相互通信。以下是实现方法: 步骤 1:确认网络配置 1. 确保 Ubuntu 机器…

Shell脚本5 -- 脚本与用户交互read

声明: 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(4)脚本与用户交互以及if条件判断】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题&#xff0c…

mysql5.7主从问题记录

项目运行一段时间后突然打印如下异常信息。 由于现场环境和数据库是客户提供,看异常提示一直以为是代码问题,导致锁表。 通过逐步排查之后发现,是binlog把磁盘占满了,让客户的DBA设置了一下就恢复。 当设置了主从同步之后&…

使用卷积自编码器进行图像重构

1. 自编码器简介 自编码器(Autoencoder)是一种无监督学习的神经网络模型,旨在学习数据的有效表示。自编码器的主要组成部分包括编码器和解码器,二者共同工作以实现数据的压缩和重构。以下是自编码器的详细介绍: 1.1 …

鸿蒙实战:页面跳转传参

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战,学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目,编写首页代码,实现按钮跳转至第二个页面并…

恶意代码分析入门--静态分析(chapter1_Lab01-01)

恶意代码分析-工具收集 - 17bdw - 博客园 (cnblogs.com) 实验环境:Lab 1-1 这个实验使用Lab01-01.exe和Lab01-01.dll文件,使用本章描述的工具和技术来获取 关于这些文件的信息。 操作环境 操作场景: windows xp sp3 实验工具: PEi…

【操作系统不挂科】<信号量(9)>选择题(带答案与解析)

前言 大家好吖,欢迎来到 YY 滴操作系统不挂科 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的操作系统题目,供yy应对期中考试复习。大家可以参考 本章为选择题题库,试卷…

服务器数据恢复—raid5阵列故障导致上层系统分区无法识别的数据恢复案例

服务器数据恢复环境: 某品牌DL380服务器,服务器中三块SAS硬盘组建了一组raid5阵列。服务器安装Windows Server操作系统,划分了3个分区,D分区存放数据库,E分区存放数据库备份。 服务器故障: RAID5阵列中有一…

【ARM】MDK在debug模式下的Registers窗口包含哪些内容

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决客户对于Debug模式下,对于Registers窗口包含的内容了解。 2、 问题场景 Registers窗口是在进入到debug模式下后,就会出现一个窗口。窗口中包含了很多寄存器信息。但是对于具体内容不了解…

【后端】版本控制

版本控制 1. 什么是版本控制? 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理…

高项 - 项目进度管理

个人总结,仅供参考,欢迎加好友一起讨论 博文更新参考时间点:2024-12 高项 - 章节与知识点汇总:点击跳转 文章目录 高项 - 项目进度管理进度管理ITO规划监控 管理基础项目进度计划的定义和总要求管理新实践用户故事(补…

【数据结构】【线性表】【练习】反转链表

申明 该题源自力扣题库19&#xff0c;文章内容&#xff08;代码&#xff0c;图表等&#xff09;均原创&#xff0c;侵删&#xff01; 题目 给你单链表的头指针head以及两个整数left和right&#xff0c;其中left<right&#xff0c;请你反转从位置left到right的链表节点&…

鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)

元服务是什么&#xff1f;和App的关系&#xff1f; 元服务是是一种HarmonyOS轻量应用形态&#xff0c;用户无需安装即可使用&#xff0c;具备随处可及、服务直达、自由流转的特征。 元服务是可以独立部署和运行的程序实体&#xff0c;独立于应用&#xff0c;不依赖应用可独立…