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

news2024/11/19 7:46:28

学习参考:

  • 动手学深度学习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)错误

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

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

相关文章

如何制作一款建材商城微信小程序

现在,微信小程序已经成为了很多企业和商家开展线上业务的重要渠道之一。对于建材商城而言,制作一款专属的微信小程序可以帮助企业更好地展示产品、提供服务,并增加销售额。下面将介绍如何制作一款建材商城微信小程序。 首先,登录【…

CSS-显示模式,背景,盒子模型

1. 元素显示模式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style…

接口测试实战--mock测试、日志模块

一、mock测试 在前后端分离项目中,当后端工程师还没有完成接口开发的时候,前端开发工程师利用Mock技术,自己用mock技术先调用一个虚拟的接口,模拟接口返回的数据,来完成前端页面的开发。 接口测试和前端开发有一个共同点,就是都需要用到后端工程师提供的接口。所以,当…

【LeetCode:124. 二叉树中的最大路径和 + 二叉树+递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【GAD】动态图的半监督异常检测

SAD: Semi-Supervised Anomaly Detection on Dynamic Graphs Limitations of existing semi-supervised methodsContributionRelated workMethodDeviation Networks with Memory BankContrastive Learning for Unlabeled Samples Experiments少样本评估2D t-SNE可视化消融实验 …

Machine Vision Technology:Lecture1 Introduction

Machine Vision Technology&#xff1a;Lecture1 Introduction What kind of information can we extract from an image?Syllabus organized fromRoadmap路线图 计算机视觉&#xff08;本科&#xff09; 北京邮电大学 鲁鹏 What kind of information can we extract from an …

一张图读懂人工智能

一、生成人工智能的概念和应用&#xff0c;以及如何使用大型语言模型进行聊天和创造原创内容。这项技术将会对人类和企业产生深远影响。 计算机获得学习、思考和交流的能力&#xff0c;被称为生成人工智能。生成人工智能可以立即获得人类所有知识的总和&#xff0c;并回答任何…

OSCP靶场--Shenzi

OSCP靶场–Shenzi 考点(1.目录扫描&#xff1a;可以尝试使用多个工具(扫描不出来任何东西&#xff0c;可以结合机器名拼接url 2.WP 目标插入webshell getshell 3.windows环境AlwaysInstallElevated提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- …

C++编译相关学习笔记

1.编译是什么&#xff1f; 简单的说&#xff0c;就是将文本文件转化为obj对象。详细的说包含以下三个步骤&#xff1a; &#xff08;1&#xff09;预处理代码。常用的预处理语句包含#include、if、ifdef、pragma。经过这一阶段 main.cpp变为main.i 这种文件里的内容就是在原文…

vue中使用prettier

前言&#xff1a;prettier是一款有态度的代码格式化工具&#xff0c;它可以集成在IDE中&#xff0c;如VS Code、Web Storm等&#xff0c;也可以安装到我们开发的项目里面。本文主要讲解在Vue中集成prettier的过程&#xff0c;可以便于代码检测和格式化。 prettier官网 从官网的…

树的括号表示法

1.括号表示法构造一棵树 下面的代码都使用下面的图测试&#xff1a; 这颗树的前序遍历是 [A,B,D,G,C,E,F,H] 为了程序的完整性&#xff0c;我想先构建一颗上述树&#xff0c;知识匮乏的我只能使用括号表示法构造: “A(B(,D(G,)),C(E,F(H,)))” 1.用一个类表示树的节点 …

高效降本|深度案例解读 Koupleless 在南京爱福路的落地实践

文&#xff5c;祁晓波 南京爱福路汽车科技基础设施负责人 主要研究微服务、可观测、稳定性、研发效能、Java 中间件等领域。 本文 4812 字 阅读 12 分钟 Koupleless&#xff08;原 SOFAServerless&#xff09;自 2023 年开源以来已经落地了若干企业&#xff0c;这些企业也见证了…

C++之标准库中string的底层实现方式

目录 1、Eager Copy(深拷贝) 2、COW(Copy-On-Write)写时复制 2.1写时复制的实现 3、SSO&#xff08;Short String Optimization)短字符串优化 4、最佳策略 5、线程安全性 我们都知道&#xff0c; std::string的一些基本功能和用法了&#xff0c;但它底层到底是如何实现的…

基于SSM SpringBoot vue物流配送人员管理系统

基于SSM SpringBoot vue物流配送人员管理系统 系统功能 登录注册 个人中心 员工管理 考勤信息管理 小区信息管理 打卡信息管理 出勤统计管理 派单信息管理 工资结算管理 任务统计管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或…

黑马c++ STL部分 笔记(3) deque容器

双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低&#xff08;每次头插&#xff0c;后面的元素就往后移&#xff09; deque相对而言&#xff0c;对头部的插入删除速…

Java Web(十)--jQuery

介绍 官网文档&#xff1a;jQuery 教程 jQuery API 中文文档 | jQuery API 中文在线手册 | jquery api 下载 | jquery api chm 下载地址&#xff1a;https://jquery.com/download/%20jQuery jQuery 是一个快速的&#xff0c;简洁的 javaScrip工具库&#xff0c;使用户能更方…

尝鲜18倍速大模型Groq和世界第二AI Mistral(Le Chat)

01 尝鲜 中午,一边吃饭,一边尝试一下最新的AI:Groq,它使用了重新设计的LPU,据说比英伟达的GPU快了18倍。 运行了开源的Mixtral-8x7b模型,屏幕上的文字回复几乎是瞬间的,那种速度感,让人心跳加速。 接着,我尝试了来自欧洲的新贵——Mistral AI的Le Chat。 这个三天前…

前端同时传递文件数据+非文件数据,前后端解决方案

之前录制视频《文件上传组件》的时候有位观众提了个问题&#xff0c;如果我没有理解错的话&#xff0c;应该就是前后同时传递文件数据 非文件数据&#xff0c;前后端数据该如何接收&#xff0c;这里我给出我自己的解决方案 tip:下文在编写前端代码的时候&#xff0c;用到了这篇…

基于SpringBoot的民宿租赁管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

生成voc格式数据集

数据集存放格式&#xff1a;&#xff08;Annotations文件夹放标注的xml文件&#xff0c;JPEGImages文件夹放标注的图片&#xff09; 运行代码&#xff1a; import os import random import xml.etree.ElementTree as ETimport numpy as npdef get_classes(classes_path):with …