动手学深度学习笔记---4.4 前向传播、反向传播与计算图

前向传播(Forward Propagation)与反向传播(Back Propagation)举例 前向传播(Forward Propagation)与反向传播(Back Propagation) 阅读详情

在之前对多层感知机的实现过程中,只考虑了感知机在进行前向传播时所进行的计算,对于涉及梯度计算的反向传播并未进行过多赘述,仅调用深度学习框架所提供的反向传播函数进行自动梯度计算。因此在本节内容中,针对深度学习模型在训练时的前向传播以及反向传播过程进行了介绍。

一、前向传播

前向传播过程主要是指按输入层 -> 隐藏层 -> 输出层顺序传递数值进行计算并存储结果的过程。

在这里插入图片描述

以上述图中多层感知机结构为例:

从输入层到隐藏层的计算为:

zi=w1x+b1hi=ReLU(z)z_i = w_1 x +b_1 \\ h_i = ReLU(z)zi​=w1​x+b1​hi​=ReLU(z)

从隐藏层到输出层的计算为:

oi=y^i=w2hi+b2o_i =\hat{y}_i = w_2 h_i + b_2oi​=y^​i​=w2​hi​+b2​

通过该过程,神经网络可以得到一个输出值y^\hat{y}y^​,用于计算与训练集中真实值yyy的误差,该误差会在反向传播过程中用到,来实现对参数[w,b][w,b][w,b]的修正,输出预测值与真实值的误差损失可用LLL表示:

l=lloss_function(y^,y)l = l_{loss\_function}(\hat{y},y)l=lloss_function​(y^​,y)

同时根据之前学到的L2L2L2正则定义,对于参数[w1,b1],[w2,b2][w_1,b_1],[w_2,b_2][w1​,b1​],[w2​,b2​],将其视作拓展后的矩阵W1′,W2′W'_1,W'_2W1′​,W2′​,存在给定超参数λ\lambdaλ,使得正则化项为:

s=λ2(∣∣W1′∣∣2+∣∣W2′∣∣2)s=\frac{\lambda}{2}(||W'_1||^2+||W'_2||^2)s=2λ​(∣∣W1′​∣∣2+∣∣W2′​∣∣2)

综合损失项和正则化项后,施加在模型上的最终损失为:

Lloss=l+sL_{loss} = l + sLloss​=l+s

这个从输入层到输出层的计算过程,就是多层感知机的前向传播过程。绘制前向传播的计算图,可以有助于对计算中操作符和变量关系的可视化,多层感知机的计算图可用下图表示:

image.png

二、反向传播

如果说前向传播是从输入层到输出层的过程,那顾名思义,反向传播就是从输出层反向向输入层传递计算值的过程,该方法根据微积分中的链式规则,按相反的顺序从输出层到输入层遍历网络。本质上,反向传播是一种求梯度的高效方法,可以理解为模型的 “学习” 过程。

image.png
前面在前向传播中提到,前向传播中产生的误差损失会在反向传播中使用。具体如下:

  1. 针对损失项和正则项分别计算损失函数L=l+sL=l+sL=l+s的梯度

    ∂L∂l=1,∂L∂s=1\frac{\partial L}{\partial l} = 1,\frac{\partial L}{\partial s} = 1∂l∂L​=1,∂s∂L​=1

  2. 根据链式法则,计算目标函数关于输出变量y^\hat{y}y^​的梯度,以及关于权重参数W2′W'_2W2′​的梯度

    ∂L∂y^=∂L∂l∂l∂y^=∂l∂y^\frac{\partial L}{\partial \hat{y}} = \frac{\partial L}{\partial l}\frac{\partial l}{\partial \hat{y}} = \frac{\partial l}{\partial \hat{y}}∂y^​∂L​=∂l∂L​∂y^​∂l​=∂y^​∂l​
    ∂y^∂W2′=h∂s∂W2′=λW2′\frac{\partial \hat{y}}{\partial W'_2}=h \quad \frac{\partial s}{\partial W'_2}=\lambda W'_2∂W2′​∂y^​​=h∂W2′​∂s​=λW2′​
    ∂L∂W2′=∂L∂l∂l∂y^∂y^∂W2′+∂L∂s∂s∂W2′=∂l∂y^⋅h+λW2′\frac{\partial L}{\partial W'_2} = \frac{\partial L}{\partial l}\frac{\partial l}{\partial \hat{y}} \frac{\partial \hat{y}}{\partial W'_2}+ \frac{\partial L}{\partial s}\frac{\partial s}{\partial W'_2} = \frac{\partial l}{\partial \hat{y}} \cdot h+\lambda W'_2∂W2′​∂L​=∂l∂L​∂y^​∂l​∂W2′​∂y^​​+∂s∂L​∂W2′​∂s​=∂y^​∂l​⋅h+λW2′​

  3. 继续沿梯度图向输入层方向移动,获得关于W1′W'_1W1′​的梯度

    ∂L∂h=∂L∂l∂l∂y^∂y^∂h=∂l∂y^⋅W2′\frac{\partial L}{\partial h}=\frac{\partial L}{\partial l}\frac{\partial l}{\partial \hat{y}}\frac{\partial \hat{y}}{\partial h} = \frac{\partial l}{\partial \hat{y}} \cdot W'_2∂h∂L​=∂l∂L​∂y^​∂l​∂h∂y^​​=∂y^​∂l​⋅W2′​
    ∂s∂W1′=λW1′\frac{\partial s}{\partial W'_1}=\lambda W'_1∂W1′​∂s​=λW1′​

    由于激活函数ReLU在计算时按元素对应进行计算,因此计算中间变量zzz时使用元素乘法⊙\odot⊙

    ∂L∂z=∂L∂h∂h∂z=∂L∂h⊙φ′(z)\frac{\partial L}{\partial z}=\frac{\partial L}{\partial h} \frac{\partial h}{\partial z}=\frac{\partial L}{\partial h} \odot \varphi'(z)∂z∂L​=∂h∂L​∂z∂h​=∂h∂L​⊙φ′(z)

    最终得到关于W1′W'_1W1′​的梯度:

    ∂L∂W1′=∂L∂z∂z∂W1′+∂L∂s∂s∂W1′=∂L∂z⋅x+λW1′\frac{\partial L}{\partial W'_1}=\frac{\partial L}{\partial z} \frac{\partial z}{\partial W'_1}+\frac{\partial L}{\partial s}\frac{\partial s}{\partial W'_1}=\frac{\partial L}{\partial z}\cdot x+\lambda W'_1∂W1′​∂L​=∂z∂L​∂W1′​∂z​+∂s∂L​∂W1′​∂s​=∂z∂L​⋅x+λW1′​

  4. 根据得到的梯度值对[W1′,W2′][W'_1,W'_2][W1′​,W2′​]进行更新,得到最新的权重矩阵W′^\hat{W'}W′^

    W′^=W′−η∂L∂W′\hat{W'}=W'-\eta \frac{\partial L}{\partial W'}W′^=W′−η∂W′∂L​

总结: 归根到底,正向传播与反向传播是一个学习参数,计算误差,然后求导对参数更新的过程。可以理解为一次作业的完成过程:写作业(前向传播)-> 老师审阅(计算误差)-> 打回修改(反向传播) -> 完成作业(训练完成)

深度学习(3)基础3 -- 前向传播与反向传播 目录 一、前向传播 前向传播过程 二、反向传播(梯度下降) 1、过程 2、门单元 一、前向传播 前向传播:从前往后,逐层计算。 前向传播过程 1、先得到得分 2、把得分的差异放大(差异化,e^x) 3、归一化,得到概率 4、计算损失值 拿到数据之后,先经过得分函数,并不是经过一次变换,而是多次的变换。 二、反向传播(梯度下降) 1、意义 从后往前,逐层求导,可以得到前一项的权重。 例如: 三个求偏导意义分别是:x、y、... 阅读详情

相关推荐

神经网络输出可视化

神经网络可视化经典的方法有两种,分别是反卷积和导向反向传播。反卷积和导向反向传播都是基于反向传播。下面我们来看反卷积和导向反向传播的特点以及例子: 上图为反卷积和导向反向传播在经过relu层时对梯度采取的不同的方法。 导向反向传播:通过修改RELU的梯度反传,使小于0的部分不反传,这样到达第一个conv层的梯度就是对后面relu激活起作用的梯度,对应的就是对网络起作用的区域。 以上的两种方法,我...

weixin_44428467的博客 2431

前向传播算法与反向传播算法

1.前向传播 如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。 举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点w的值怎么算呢?就是通过上一层的i,j,k等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如ReLu,sigmoid等函数,最后得到的结果就是本层结点w的输出。 最终不断的通过这种方法一层层的运算,得到输出层结果。 对于前向传播来说,不管维度多高,其过程都可以用如下公式表示:

weixin_45808737的博客 1783

动手学深度学习8.7. 通过时间反向传播-笔记&练习(PyTorch)

李沐老师《动手学深度学习(PyTorch版)》8.7. 通过时间反向传播-笔记&练习详解

scdifsn的博客 1525

深度学习神经网络基础知识(三)前向传播,反向传播和计算图

本文讲述神经网络基础知识,具体细节讲述前向传播,反向传播和计算图,同时讲解神经网络优化方法:权重衰减,Dropout等方法,最后进行Kaggle实战,具体用一个预测房价的例子使用上述方法。

qq_51957239的博客 1万+

《动手学深度学习》PyTorch版本

本项目对中文版《动手学深度学习》中的代码进行整理,并参考一些优秀的GitHub项目给出基于PyTorch的实现方法。为了方便阅读,本项目给出全书PyTorch版的PDF版本。欢迎大家Download,Star,Fork。除了原书内容外,我们还为每一章增加了本章附录,用于对该章节中用到的函数以及数学计算加以说明,除此之外还增加了语义分割网络(U-Net)的实现。

wzy628810的博客 9428

uniapp实现app版本发现新版本后,自动更新

app实现自动更新

oldolder的博客 1283

【动手学深度学习】4.7. 前向传播、反向传播和计算图

计算的顺序与前向传播中执行的顺序相反,因为我们需要从计算图的结果开始,并朝着参数的方向工作。因此,在训练神经网络时,在初始化模型参数后, 我们交替使用前向传播和反向传播,利用反向传播给出的梯度来更新模型参数。前向传播在神经网络定义的计算图中按顺序计算和存储中间变量,它的顺序是从输入层到输出层。反向传播按相反的顺序(从输出层到输入层)计算和存储神经网络的中间变量和参数的梯度。另一方面,反向传播期间参数的梯度计算, 取决于由前向传播给出的隐藏变量的当前值。在训练深度学习模型时,前向传播和反向传播是相互依赖的。

-- 1676

【SimPy系列博客之官方example学习与解读】—— Example 1: Bank Renege

Hello,优快云的各位小伙伴们,拖更了几年后,又重新开始记录这段时间准备学习的东西啦!最近博主在学习 SimPy 的相关知识,发现国内关于 SimPy 的介绍还是相对较少,且缺乏系统性,因此博主打算用1~2周的时间,边学边记,打算从 SimPy 官方给出的几个例子出发分析 SimPy 的使用场景和用法,希望能和大家互勉!那废话不多说,我们直接开始吧!今天要学习的例程是 Bank Renege。

凝望,划过星空的博客 2008

深度学习 精选笔记(7)前向传播、反向传播和计算图

前向传播用于计算模型的预测输出,反向传播用于根据预测输出和真实标签之间的误差来更新模型参数。前向传播(Forward Propagation):前向传播是指输入数据通过神经网络模型的各层,逐层进行计算并传递至输出层的过程。反向传播(Backpropagation):反向传播是指通过计算损失函数对模型参数的梯度,从输出层向输入层传播梯度的过程。

人生是一场修行 1966

VLP16:使用pointcloud_to_laserscan将三维点云转化为二维LaserScan

velodyne16线激光雷达 VLP16:使用pointcloud_to_laserscan将三维点云转化为二维LaserScan

NEUer_ljx的博客 4619

国产麒麟系统中的PaddleOCR离线绿色部署:高效安全的文字识别新纪元

摘要:本文详细介绍了PaddleOCR在银河麒麟V10SP1系统上的离线部署方案。通过Conda虚拟环境隔离依赖,采用离线包安装方式实现无网络部署,支持80+语言识别。重点讲解了模型量化剪枝优化、多线程处理等性能调优技巧,并提供了完整的OCR识别代码示例。该方案具有数据本地化处理的安全优势,适用于医疗票据数字化等对隐私要求严格的场景,同时解决了模型加载失败、内存不足等常见问题。

墨夶的博客 1227

【动手学深度学习PyTorch】前向传播、反向传播与计算图

前向传播(forward propagation或forward pass)指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。为了简单起见,我们假设输入样本是x∈Rd,并且我们的隐藏层不包括偏置项。zW1x其中W1∈Rh×d是隐藏层的权重参数。将中间变量z∈Rh通过激活函数ϕ后,我们得到长度为hhϕz隐藏变量h也是一个中间变量。假设输出层的参数只有权重W2∈Rq×h我们可以得到输出层变量,它是一个长度为qoW。

feizuiku0116的博客 1262

安卓风控对抗实战:如何用AOSP定制ROM绕过Momo、AIDA64等检测(从环境搭建到设备画像)

本文详细解析了如何通过定制AOSP ROM绕过Momo、AIDA64等安卓风控检测工具的设备指纹识别。从环境搭建到硬件参数修改,再到内核级特征混淆,提供了一套完整的底层对抗方案,显著提升设备伪装通过率。

weixin_30687051的博客 489

动手学深度学习4.7 前向传播、反向传播和计算图-笔记&练习(PyTorch)

李沐老师《动手学深度学习(Pytorch版)》4.7 前向传播、反向传播和计算图-笔记&练习详解

scdifsn的博客 2131

目标检测之Mask R-CNN(Pytorch):小白动手实现项目

目标检测之Mask R-CNN:小白动手实现项目Pytorch引言Mask R-CNN原理简述代码、注释及详细解释 引言 首先声明本项目的运行环境。操作系统为Windows,编写环境为Anaconda3 + Jupyter Notebook。Pytorch版本为 torch 1.7.1+cu110 、torchvision版本为 0.8.2+cu110,cuda版本为cu100,显卡为Nvidia 2060。 我是目标检测领域的小白,刚刚完成了Pytorch的相关入门学习任务,所以我认为学习本篇博客的基础

dzc_go的博客 1万+

华为OD机试 - 整型数组按照个位数排序(Java 双机位C卷 100分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 349

正向传播、反向传播和计算图

《动手学深度学习pytorch》部分学习笔记,仅用作自己复习。 正向传播、反向传播和计算图 在实现中,只提供模型正向传播(forward propagation)的计算,即对输⼊计算模型输出,然后通过 autograd 模块来调⽤用系统自动生成的 backward 函数计算梯度。 基于反向传播(back-propagation)算法的⾃动求梯度极大简化了深度学习模型训练算法的实现。本节我们将使⽤数学和计算图(computational graph)两个方式来描述正向传播和反向传播。具体来说,我们将以带

dujuancao11的博客 2678

使用NXP SBC插件开发FS26软件

FS26作为功能安全可达ASIL D的SBC,在配合NXP MCU的使用中非常广泛,本文介绍基于NXP官网的SBC代码包快速进行FS26软件的开发FS26使用过程中还有不少坑的地方,后面有空可以再介绍相关的功能。

赞的博客 648

动手学深度学习-多层感知机-7前向传播、反向传播和计算图

我们已经学习了如何用小批量随机梯度下降训练模型。然而当实现该算法时,我们只考虑了通过前向传播(forward propagation)所涉及的计算。在计算梯度时,我们只调用了深度学习框架提供的反向传播函数,而不知其所以然。梯度的自动计算(自动微分)大大简化了深度学习算法的实现。在自动微分之前,即使是对复杂模型的微小调整也需要手工重新计算复杂的导数, 学术论文也不得不分配大量页面来推导更新规则。本节将通过一些基本的数学和计算图, 深入探讨反向传播的细节。

像污秽一样的博客 1237

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

《动手学深度学习》学习笔记 第4章 多层感知机

书里为了让读者更好的理解,有大篇幅的描述性的文字,内容很多,笔记只保留主要内容,同时也是对之前知识的查漏补缺

weixin_42046845的博客 1393

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《动手学深度学习 Pytorch版》 4.7 前向传播、反向传播和计算图

整节理论,详见书本。

AncilunKiang的博客 693

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

初窥反向传播

对于反向传播的一些简单的理解

2501_93024006的博客 1578

【动手学深度学习】前向传播、反向传播和计算图

【动手学深度学习】前向传播、反向传播和计算图

weixin_45057858的博客 1179

动手学深度学习读书笔记-正向传播、反向传播和计算图

正向传播、反向传播和计算图 正向传播 正向传播是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。 为简单起见,假设输入是一个特征为x∈Rd\boldsymbol{x} \in \mathbb{R}^dx∈Rd的样本,且不考虑偏差项,那么中间变量 z=W(1)x,\boldsymbol{z} = \boldsymbol{W}^{(1)} \boldsymbol{x...

wxl1999的博客 621

动手学深度学习:3.14 正向传播、反向传播和计算图

3.14 正向传播、反向传播和计算图前面几节里我们使用了小批量随机梯度下降的优化算法来训练模型。在实现中,我们只提供了模型的正向传播(forward propagation)的计算,即对输入计算模型输出,然后通过autograd模块来调用系统自动生成的backward函数计算梯度。基于反向传播(back-propagation)算法的自动求梯度极大简化了深度学习模型训练算法的实现。本节我们将使用数学和计算图(computational graph)两个方式来描述正向传播和反向传播。[https://tang

qq_38888209的博客 422

动手学深度学习——矩阵求导之自动求导

深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。 实际中,根据我们设计的模型,系统会构建一个计算图(computational graph), 来跟踪计算是哪些数据通过哪些操作组合起来产生输出。 自动微分使系统能够随后反向传播梯度。 这里,反向传播(backpropagate)意味着跟踪整个计算图,填充关于每个参数的偏导数。

时生的博客 5460
上一篇: 动手学深度学习笔记---4.3 解决过拟合_权重衰减与Dropout
下一篇: 动手学深度学习笔记---4.5 数值稳定性与模型初始化
Aaaaaki
博客等级 码龄9年 884粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaaaaki

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值