【深度学习】日常笔记13

news2024/11/26 20:25:57

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

绘制计算图有助于我们可视化计算中操作符和变量的依赖关系。下图是与上述简单⽹络相对应的计算图, 其中正⽅形表⽰变量,圆圈表⽰操作符。左下⻆表⽰输⼊,右上⻆表⽰输出。注意显⽰数据流的箭头⽅向主要是向右和向上的。

反向传播(backward propagation或backpropagation)指的是计算神经⽹络参数梯度的⽅法。简⾔之,该⽅法根据微积分中的链式规则,按相反的顺序从输出层到输⼊层遍历⽹络。

根据这个计算图,在计算图中的单隐藏层简单⽹络的参数是 W(1)和W(2)。反向传播的的是计算梯度∂J/W(1)和 ∂J/W(2)。为此,我们应⽤链式法则,依次计算每个中间变量和参数的梯度。计算的顺序 与前向传播中执⾏的顺序相反,因为我们需要从计算图的结果开始,并朝着参数的⽅向努⼒。

是计算 ⽬标函数J = L + s相对于损失项L和正则项s的梯度。

接下来,我们根据链式法则计算⽬标函数关于输出层变量o的梯度:

这里用到了第一步计算的结果。

prod 的全称是 "product",在数学和计算机科学中,它通常表示两个或多个数的乘积。例如,如果有两个数 a 和 b,那么它们的乘积可以表示为 a * b,也可以写成 prod(a, b)。在反向传播算法中,prod 是一个运算符,用于计算多个张量(或矩阵)的乘积。

例如,假设我们有两个张量 A 和 B:

A = [[1, 2], [3, 4]]

B = [[5, 6], [7, 8]]

   

那么 A * B 就是:

A * B = [[1*5+2*7, 1*6+2*8], [3*5+4*7, 3*6+4*8]]

= [[17, 26], [39, 50]]

在这个例子中,prod 运算符将两个二维张量相乘。

接下来,我们计算正则化项相对于两个参数的梯度:

现在我们可以计算最接近输出层的模型参数的梯度 ∂J/∂W(2) ∈ Rq×h,因为在计算图中W(2)比W(1)接近输出层o,所以W(2)说成最接近没错的,然后使⽤链式法则得出:

为了获得关于W(1)的梯度,我们需要继续沿着输出层到隐藏层反向传播。关于隐藏层输出的梯度∂J/∂h ∈ Rh由下式给出:

由于激活函数ϕ是按元素计算的,计算中间变量z的梯度∂J/∂z ∈ Rh 需要使⽤按元素乘法运算符,我们⽤⊙表示:

最后,我们可以得到最接近输⼊层的模型参数的梯度 ∂J/∂W(1) ∈ Rh×d。根据链式法则,我们得到:

因此,在训练神经⽹络时,在初始化模型参数后,我们交替使⽤前向传播和反向传播,利⽤反向传播给出的 梯度来更新模型参数。注意,反向传播重复利⽤前向传播中存储的中间值,以避免重复计算。我的理解是类似于高数里面的求导公式,f’(x)=lim…=某个带有x的公式,但是这个x是未知数,还得带入前向传播计算后存储的中间值x才能算出具体的导数值,也就是梯度值。带来的影响之⼀是我们需要保留中间值,直到反向传播完成。这也是训练⽐单纯的预测需要更多的内存(显存)的原因之⼀,因为预测只需要进行前向传播即可,我们不需要更新参数,因此也不需要进行反向传播。


p168练习

1. 假设⼀些标量函数X的输⼊X是n × m矩阵。f相对于X的梯度维数是多少?

答:对于一个标量函数f,相对于输入矩阵X的梯度维数应该是与X具有相同的维数,即n × m。

举个例子,假设我们有一个标量函数f,定义如下:

f(X) = sum(X)

其中,X是一个3×2的矩阵:

X = [[1, 2],
[3, 4],
[5, 6]]

将所有元素相加得到:

f(X) = 1 + 2 + 3 + 4 + 5 + 6 = 21

函数f计算输入矩阵X的所有元素的和。现在,我们将计算函数f相对于输入矩阵X的梯度。

由于函数f是对输入矩阵X的所有元素求和,f(X) 相对于X的梯度将是一个与X具有相同维度的矩阵,称为Jacobian矩阵。在这个例子中,梯度的维数是3×2的矩阵,与输入矩阵X相同:

∇f(X) = [[1, 1],
[1, 1],
[1, 1]]

每个元素都是1,表示在函数f的输出对每个输入元素的微小变化中,对应位置的偏导数。由于函数f对输入矩阵的每个元素都有相同的贡献,因此所有偏导数都是1

4. 假设想计算⼆阶导数。计算图发⽣了什么?预计计算需要多⻓时间?

答:当计算模型的二阶导数时,计算图会发生以下变化:

  1. 在正向传播过程中,需要保留一阶导数的中间结果。这些中间结果将在反向传播过程中用于计算二阶导数。
  2. 在反向传播过程中,需要计算一阶导数的梯度以及二阶导数的梯度。具体而言,需要计算二阶导数对于模型参数的梯度、二阶导数对于一阶导数的梯度。

预计计算二阶导数需要更多的计算量和内存消耗,因为需要保留和计算更多的中间结果。

时间开销方面,计算二阶导数的时间会比计算一阶导数更长。具体时间将取决于模型的结构和参数数量、样本数量以及所用的计算设备性能。由于计算二阶导数涉及更多的计算和内存操作,可能需要更长的时间。

需要注意的是,计算二阶导数可能会导致计算资源的需求增加,尤其是在参数量大、模型复杂度高的情况下。在实际应用中,评估计算时间和内存消耗是很重要的,可以考虑使用近似方法或优化技术来降低计算二阶导数的成本。

综上所述,计算二阶导数需要更多的计算量和内存消耗,预计会比计算一阶导数花费更长的时间。具体的时间和内存消耗取决于模型和计算设备的特性。

5. . 假设计算图对当前拥有的GPU来说太⼤了。

1. 请试着把它划分到多个GPU上。

2. 与⼩批量训练相⽐,有哪些优点和缺点?

答:

  1. 划分计算图到多个GPU上:
    •  在划分计算图到多个GPU上时,一种常见的方法是使用数据并行ism,即将数据划分为多个小批量,每个小批量分配到不同的GPU上进行计算。
    •  每个GPU上的计算图副本可以执行前向传播和反向传播,并将计算结果传递给主GPU,主GPU则负责聚合各个GPU的计算结果以更新模型参数。

2. 与小批量训练相比,划分计算图到多个GPU上有以下一些优点和缺点:

优点:

  • 并行计算:多个GPU可以同时执行计算,加速整体计算过程,尤其是在大型模型和大规模数据集上。
  • 内存消耗减小:将计算图分散到多个GPU上,可以减小单个GPU的内存需求,使得可以处理更大规模的模型和数据。
  • 分布式训练:通过多个GPU并行计算,可以实现分布式训练,提高训练效率和扩展性。

缺点:

  • 通信开销:在多个GPU之间传输数据和计算结果需要一定的通信开销,可能会导致一些额外的延迟。
  • 实现复杂性:划分计算图和实现多GPU的并行计算需要一些额外的编程和调试工作,相对于单GPU训练,实现复杂性较高。
  • GPU资源需求:多个GPU的使用需要具备多个GPU的硬件资源,如果可用的GPU资源有限,则可能无法充分利用这种并行计算的优势。

综上所述,划分计算图到多个GPU上可以加速计算过程和扩展训练规模,但需要权衡计算和通信开销以及可用的GPU资源。适用于大规模模型和数据集以及具备足够GPU资源的情况。

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

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

相关文章

【C语言】深入了解分支和循环语句

🍁 博客主页:江池俊的博客 🍁收录专栏:C语言——探索高效编程的基石 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 💫“每一天都是一个全新的机会…

【优选算法题练习】day7

文章目录 一、35. 搜索插入位置1.题目简介2.解题思路3.代码4.运行结果 二、69. x 的平方根1.题目简介2.解题思路3.代码4.运行结果 三、852. 山脉数组的峰顶索引1.题目简介2.解题思路3.代码4.运行结果 总结 一、35. 搜索插入位置 1.题目简介 35. 搜索插入位置 给定一个排序数组…

浅谈自动化测试工具 Appium

目录 前言: 一、简单介绍 (一)测试对象 (二)支持平台及语言 (三)工作原理 (四)安装工具 二、环境搭建 (一)安装 Android SDK &#xff0…

08 - 线性表的类型定义 - 循环双向链表

双向链表可以分为普通双向链表(前面我们已经学习过了)与循环双向链表。 循环双向链表的定义 循环双向链表就是在双向链表的基础之上,头结点的Prev指向尾结点,尾结点的Next指针则指向头结点,从而形成闭环结构。 内存中的结构 双向链表与循环双向链表的区别 双向链表 …

Vue项目中你是如何解决跨域的呢?

一、跨域是什么 跨域本质是浏览器基于同源策略的一种安全手段 同源策略(Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能 所谓同源(即指在同一个域)具有以下三个相同点 协议相同&…

微信小程序开发入门指南

微信小程序商城是一种方便快捷的电商平台,让商家能够在微信平台上展示和销售自己的商品。本文将详细介绍如何使用乔拓云平台创建自己的小程序商城。即使是对编程没有任何基础的小白用户,也可以轻松创建自己的微信小程序商城。 第一步,登录乔拓…

上门服务小程序|上门家政小程序开发

随着现代生活节奏的加快和人们对便利性的追求,上门家政服务逐渐成为了许多家庭的首选。然而,传统的家政服务存在着信息不透明、服务质量不稳定等问题,给用户带来了困扰。为了解决这些问题,上门家政小程序应运而生。上门家政小程序…

拓数派荣获 “2023 年杭州市企业高新技术研究开发中心” 认定

近日,拓数派上榜由杭州市科学技术局公布的 “2023 年杭州市企业高新技术研究开发中心名单”,通过专业的技术研发、成果转化和高新技术产业化成绩,获得 “杭州市拓数派数据计算企业高新技术研究开发中心” 认定。 图为:“杭州市拓数…

spring boot 多模块项目非启动模块的bean无法注入(问题记录)

之前有说我搭了一个多模块项目,往微服务升级,注入的依赖在zuodou-bean模块中,入jwt拦截, Knife4j ,分页插件等等,但是启动类在system中,看网上说在启动类上加SpringBootApplication注解默认扫描范围为自己…

【HTML】:超文本标记语言的基础入门元素

目录 1️⃣前言2️⃣概述🌱什么是HTML?🌱初步认识HTML 3️⃣了解概念✨基本结构✔️元素🔋 标签💡属性 4️⃣基本内容学习标签特殊字符属性图像标签的属性超链接标签的属性 5️⃣锚点链接6️⃣表格表格标签表格标签的属…

(ceph)资源池poll管理

资源池 Pool 管理 前面的文章中我们已经完成了 Ceph 集群的部署(ceph部署: 传送门),但是我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解…

oracle 如何连同空表一起导出成dmp的方法

1、oracle导出dmp文件的时候,经常会出现一些空表,没有一并被导出的情况。 执行sql select alter table ||table_name|| allocate extent; from user_tables where num_rows0 or num_rows is null; 新建一个sql窗口,把查询结果的sql&#…

MySQL-DQL-案例

案例 案例1 根据需求完成员工管理的条件分页查询 具体代码 -- 案例1:按需求完成员工管理的条件分页查询 - 根据输入条件,查询第一页数据,每页展示10条记录 -- 输入条件: -- 姓名:张 -- 性别:男 -- 入职时间…

深入解析5G承载网:驱动下一代通信技术的支柱

移动通信技术的不断演进,使得5G承载网成为驱动下一代通信技术发展的关键组成部分。在这个数字化时代,了解5G承载网的作用和特点对于理解现代通信网络的架构至关重要。 1.5G承载网的组成和功能 5G承载网由核心网和边缘计算组成。 其中,核心网…

Python实现HBA混合蝙蝠智能算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法…

一款好用的被动式信息泄漏检测插件

插件介绍 FindSomething由陌陌安全残笑老哥开发的浏览器扩展,是一款优秀的被动式信息收集工具,用于展示浏览器打开的页面相关的网站资产和敏感信息。 关注【Hack分享吧】公众号,回复关键字【230629】获取下载链接 支持收集的信息类型如下&am…

瑞吉外卖总结

瑞吉外卖总结笔记 环境 SpringBoot、Mybatis-Plus 注意:使用Mybatis-Plus时,属性值要与数据库中的列名一致 静态映射 当将使用SpringBoot整合前端html项目时,需要使用静态资源的映射,否则会出现html页面部分效果无法展示 解…

F#奇妙游(15):优雅的WPF程序

WPF but F# 上一篇,写了一个F#的WPF,所有的东西都是随手写出来的,没有经过详细考虑和设计。就是吧,一点也不优雅……咋们虽然头发不多,但是优雅永不过时! 实际上能用的开源UI库(F#&#xff0c…

【NLP】多头注意力概念(02)

接上文: 【NLP】多头注意力概念(01) 五、计算注意力 将 Q、K 和 V 拆分为它们的头部后,现在可以计算 Q 和 K 的缩放点积。上面的等式表明,第一步是执行张量乘法。但是,必须先转置 K。 展望未来,每个张量的seq_length形状将通过其各自的张量来识别,以确保清晰…

2023年知识库软件爆火的有哪些?

2023年知识库软件爆火的可能性有很多,以下是一些可能的候选者: 一、Baklib:Baklib是一款新兴的知识库软件,它提供了强大的知识管理和组织功能。它能够帮助用户收集、整理和共享知识,并提供智能搜索和推荐引擎&#xf…