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

学习参考:

  • 动手学深度学习2.0
  • Deep-Learning-with-TensorFlow-book
  • pytorchlightning

①如有冒犯、请联系侵删。
②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。
③非常推荐上面(学习参考)的前两个教程,在网上是开源免费的,写的很棒,不管是开始学还是复习巩固都很不错的。

深度学习回顾,专栏内容来源多个书籍笔记、在线笔记、以及自己的感想、想法,佛系更新。争取内容全面而不失重点。完结时间到了也会一直更新下去,已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。所有文章涉及的教程都会写在开头、一起学习一起进步。

前向传播用于计算模型的预测输出,反向传播用于根据预测输出和真实标签之间的误差来更新模型参数。

前向传播和反向传播是神经网络训练中的核心步骤,通过这两个过程,神经网络能够学习如何更好地拟合数据,提高预测准确性。

一、计算图

计算图(Computational Graph)是一种图形化表示方法,用于描述数学表达式中各个变量之间的依赖关系和计算流程。在深度学习和机器学习领域,计算图常用于可视化复杂的数学运算和函数计算过程,尤其是在反向传播算法中的梯度计算过程中被广泛应用。

计算图通常包括两种节点:

  • 计算节点(Compute Nodes):这些节点表示数学运算,如加法、乘法等。计算节点接受输入,并产生输出。
  • 数据节点(Data Nodes):这些节点表示数据或变量,如输入数据、权重、偏置等。

通过连接计算节点和数据节点的边,构建了一个有向图,其中每个节点表示一个操作,边表示数据流向。计算图可以帮助理解复杂的计算过程,特别是在深度学习中涉及大量参数和运算的情况下。

二、前向传播

前向传播(forward propagation或forward pass) 指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。

前向传播(Forward Propagation):

  • 定义:前向传播是指输入数据通过神经网络模型的各层,逐层进行计算并传递至输出层的过程。
  • 作用:在前向传播过程中,输入数据经过神经网络的权重和激活函数的计算,最终得到模型的预测输出。
  • 目的:前向传播的目的是计算模型对输入数据的预测值,为后续的损失函数计算和反向传播提供基础。

1.前向传播的计算图

假设单隐藏层神经网络中,输入样本是 𝐱∈ℝ d, 并且隐藏层不包括偏置项。 这里的中间变量是:
在这里插入图片描述
其中 𝐖(1)∈ℝℎ×𝑑 是隐藏层的权重参数。 将中间变量 𝐳∈ℝℎ 通过激活函数 𝜙 后, 得到长度为 ℎ 的隐藏激活向量是:
在这里插入图片描述
隐藏变量 𝐡也是一个中间变量。 假设输出层的参数只有权重 𝐖(2)∈ℝ𝑞×ℎ, 可以得到输出层变量,它是一个长度为 𝑞 的向量:
在这里插入图片描述
假设损失函数为 𝑙,样本标签为 𝑦,可以计算单个数据样本的损失项,
在这里插入图片描述
根据 𝐿2 正则化的定义,给定超参数 𝜆 ,正则化项为
在这里插入图片描述
其中矩阵的Frobenius范数是将矩阵展平为向量后应用的 𝐿2范数。 最后,模型在给定数据样本上的正则化损失为:
在这里插入图片描述
该函数J就是目标函数。

绘制计算图有助于可视化计算中操作符和变量的依赖关系。

与上述简单网络相对应的计算图, 其中正方形表示变量,圆圈表示操作符。 左下角表示输入,右上角表示输出。 注意显示数据流的箭头方向主要是向右和向上的。
在这里插入图片描述

三、反向传播

反向传播(Backpropagation):

  • 定义:反向传播是指通过计算损失函数对模型参数的梯度(梯度是一个由偏导数组成的向量,表示函数在某一点处的变化率或者斜率方向、也就是在每个自变量方向上的偏导数),从输出层向输入层传播梯度的过程。
  • 作用:在反向传播过程中,根据损失函数计算模型参数的梯度,然后利用梯度下降等优化算法更新模型参数,以减小损失函数的值。
  • 目的:反向传播的目的是根据模型预测与真实标签的误差,调整神经网络中每个参数的值,使模型能够更好地拟合训练数据,并提高在新数据上的泛化能力。

反向传播(backward propagation或backpropagation)指的是计算神经网络参数梯度的方法。 简言之,该方法根据微积分中的链式规则,按相反的顺序从输出层到输入层遍历网络。 该算法存储了计算某些参数梯度时所需的任何中间变量(偏导数)。 假设有函数 𝖸=𝑓(𝖷) 和 𝖹=𝑔(𝖸) , 其中输入和输出 𝖷,𝖸,𝖹 是任意形状的张量。 利用链式法则,可以计算 𝖹 关于 𝖷 的导数:

在这里插入图片描述
使用 prod 运算符在执行必要的操作(如换位和交换输入位置)后将其参数相乘。 对于向量,这很简单,它只是矩阵-矩阵乘法。

在前向传播的计算图中,单隐藏层简单网络的参数是 𝐖(1) 和 𝐖(2) 。 反向传播的目的是计算梯度 ∂𝐽/∂𝐖(1)∂𝐽/∂𝐖(2) 。为此,应用链式法则,依次计算每个中间变量和参数的梯度。 计算的顺序与前向传播中执行的顺序相反,因为需要从计算图的结果开始,并朝着参数的方向努力。第一步是计算目标函数 𝐽=𝐿+𝑠 相对于损失项 𝐿 和正则项 𝑠 的梯度。

这里为什么等于1?因为单隐藏层简单网络的最后一层上面是
在这里插入图片描述
根据链式法则计算目标函数关于输出层变量 𝐨 的梯度:
在这里插入图片描述
计算正则化项相对于两个参数的梯度:

在这里插入图片描述
计算最接近输出层的模型参数的梯度 ∂𝐽/∂𝐖(2)∈ℝ𝑞×ℎ 。 使用链式法则得出:

在这里插入图片描述
为了获得关于 𝐖(1)的梯度,需要继续沿着输出层到隐藏层反向传播。 关于隐藏层输出的梯度 ∂𝐽/∂𝐡∈ℝℎ 由下式给出:
在这里插入图片描述
由于激活函数 𝜙 是按元素计算的, 计算中间变量 𝐳的梯度 ∂𝐽/∂𝐳∈ℝℎ 需要使用按元素乘法运算符,用 表示:
在这里插入图片描述
最后,可以得到最接近输入层的模型参数的梯度 ∂𝐽/∂𝐖(1)∈ℝℎ×𝑑 。 根据链式法则,我们得到:
在这里插入图片描述

四、训练神经网络

在训练神经网络时,前向传播和反向传播相互依赖。

对于前向传播,沿着依赖的方向遍历计算图并计算其路径上的所有变量。 然后将这些用于反向传播,其中计算顺序与计算图的相反。

以上述简单网络为例:
正则项:

在这里插入图片描述
反向传播中计算J对W(2)的梯度公式:
在这里插入图片描述
反向传播中计算J对W(1)的梯度公式:
在这里插入图片描述
一方面,在前向传播期间计算正则项取决于模型参数𝐖(1)和 𝐖(2)的当前值。 它们是由优化算法根据最近迭代的反向传播给出的。 另一方面,反向传播期间参数的梯度计算, 取决于由前向传播给出的隐藏变量𝐡的当前值。

因此,在训练神经网络时,在初始化模型参数后, 交替使用前向传播和反向传播,利用反向传播给出的梯度来更新模型参数。

注意,反向传播重复利用前向传播中存储的中间值,以避免重复计算。 带来的影响之一是需要保留中间值,直到反向传播完成。 这也是训练比单纯的预测需要更多的内存(显存)的原因之一。 此外,这些中间值的大小与网络层的数量和批量的大小大致成正比。 因此,使用更大的批量来训练更深层次的网络更容易导致内存不足(out of memory)错误

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

当无人机飞手真的有前途吗?无人机工作怎么找,感觉找不到太难了?无人机飞手未来的出路在哪里?

无人机飞手这个职业的前途很大程度上取决于市场需求和行业发展趋势。随着无人机技术的不断进步和应用领域的扩大,无人机飞手的需求量也在逐渐增加。然而,这个职业的发展也受到政策法规、技术更新换代等因素的影响,因此需要不断学习新技术和适…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章,文章中引入注目的是利用条件限制条件,不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题,其实如果单独去使用一些关键词去搜索&a…

python 小游戏《2048》字符版非图形界面

参考链接: 闲谈2048小游戏和数组的旋转及翻转和转置 目录 2048 一、方阵类 二、随机插入1或2 三、 合并和递增 四、 判断和移动 五、 键盘控制 完整源代码 玩法过程 2048 上回说到2048小游戏中数组的各种旋转、翻转的方法,就是为代码编程作准…

单词规律00

题目链接 单词规律 题目描述 注意点 pattern只包含小写英文字母s只包含小写英文字母和 ’ ’s不包含任何前导或尾随对空格s中每个单词都被 单个空格 分隔 解答思路 本题与上一次同构字符串类似,思路可以参照同构字符串 代码 class Solution {public boolean …

C++——内存管理(new和delete)详解

目录 C/C内存管理 案例:变量在内存中到底会在哪? New和delete Operator new和operator delete函数 New和delete的原理 对内置类型 对自定义类型 定位new New/delete和malloc/free的区别 C/C内存管理 C/C内存管理分布图:(从…

C语言while 语句的基本格式是什么?

一、问题 C语⾔中有三种循环语句,while 语句是其中的⼀个,它的基本格式是怎样的呢? 二、解答 while 语句的⼀般形式为: while(表达式) 语句; 其中,表达式是循环条件,语句为循环体。 注意: …

uni-app 微信小程序:启用组件按需注入

原文地址:uni-app 微信小程序:启用组件按需注入 - 掘金 只需添加以下代码"lazyCodeLoading": "requiredComponents"

养娃到大学毕业要68万?不算不知道一算要起跳!

最近看到的新话题,第一反映就是养一个娃要这么多费用吗? 以我马上就要上大学的娃家长身份,索性粗针大线的做了一个预估,让我们一起来探讨一下吧: 现正在考虑娃是可以读国内正常的公办大学还是能读国内的合作办学大学…

【机器学习实战1】泰坦尼克号:灾难中的机器学习(一)数据预处理

🌸博主主页:釉色清风🌸文章专栏:机器学习实战🌸今日语录:不要一直责怪过去的自己,她曾经站在雾里也很迷茫。 🌼实战项目简介 本次项目是kaggle上的一个入门比赛 :Titani…

护眼灯到底有用吗知乎?5大超强实力护眼台灯测评推荐!

护眼台灯无疑是每个学子必备的学习用具,那到底有没有用呢?其实真正好的护眼灯在一定程度上对保护学生的眼睛来说肯定是有用的。当然前提是要选购到优质的护眼台灯,保障各项性能都是合格的,使用起来才安全放心。 一、护眼台灯是如何…

Python web框架fastapi数据库操作ORM(一)

文章目录 Fastapi ORM操作1、创建模型2、创建数据库连接配置文件3、启动项目4、根据模型类创建数据库表1. 初始化配置,只需要使用一次2. 初始化数据库,一般情况下只用一次3. 更新模型并进行迁移4. 重新执行迁移,写入数据库5. 回到上一个版本6…

uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端开发:vue 语言:pythonjavanode.jsphp均支持 运行软件:idea/eclip…

【Javascript编程实操01】判断最大数、奇偶数、是否成年

目录 前言 1、求两个数的最大数 代码: 实现效果: 2、判断一个整数是偶数还是奇数 代码: 实现效果: 3、判断一个人的年龄是否满18岁 代码: 实现效果: 总结 前言 从今天开始正式进入了Web前端第二…

GitLab--Merge Request 权限管理

场景 团队在日常开发工作中需要进行分支管理,通常使用feature分支进行开发,然后依次合并到dev分支、release分支,整个代码合并过程不仅仅是代码合并还需要对代码进行审核,如果在线下进行审核合并,这样操作无法保留痕迹…

反射详解-获取构造方法-动态代理

反射是Java语言中的一个关键特性,它允许程序在运行时访问类、接口、字段和方法的信息,并且可以动态地调用方法或改变字段值。 以下是关于Java反射的一些主要方面: 类加载器(Class Loader): Java反射开始于…

内网穿透 nas/树莓派+ipv4服务器 (ipv6)

nas 1.有个服务器 2.有个nas https://github.com/snail007/goproxy/blob/master/README_ZH.md https://github.com/snail007/proxy_admin_free/blob/master/README_ZH.md 2个官网一个是程序,一个是网站 手册 https://snail007.host900.com/goproxy/manual/zh/#/?i…

Tiktok矩阵系统搭建的逻辑和源代码!

很多和我一样从事外贸工具开发的朋友都清楚,TikTok矩阵系统不仅确保了平台的高效运行,还为用户提供了个性化的内容推荐,从而大大提升了用户黏性,因此很多人都乐意去开发类似的工具,下面我们就来说说Tiktok矩阵系统搭建…

Vue3 在SCSS中使用v-bind

template 先创建一个通用的页面结构 <template><div class"v-bubble-bg"></div> </template>js 在JS中先对需要用的数据进行定义&#xff1a; 可以是参数&#xff0c;也可以是data <script setup>const props defineProps({bgCol…

[万字长文] 从 Vue 3 的项目模板学习 tsconfig 配置

文章目录 一、tsconfig.json 的作用二、基本介绍三、Vue 3 的 tsconfig.json 的结构分析1. 总配置 tsconfig.json2. Web 侧 tsconfig.app.jsona. 继承基础配置b. 包含和排除的文件c. 编译器选项 3. 测试 tsconfig.vitest.jsona. 继承的基础配置b. 包含和排除的文件c. 编译器选项…

Swiper实现轮播效果

swiper官网&#xff1a;https://3.swiper.com.cn/ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&…