反向传播(Back Propagation)

news2024/12/23 5:06:48

目录

  • 回归
    • 简单模型的梯度计算
  • 反向传播
    • 计算图
    • 链式求导
      • 链式法则定理:
    • Forward 前馈计算
    • 反向传播Back Propagation
    • 例子
    • 线性模型的计算图计算
      • 前馈过程
      • 反向传播过程(逆向求导)
    • 练习
  • Pytorch中的前馈过程和反向传播过程
    • Tensor

回归

简单模型的梯度计算

最简单的线性模型可以简化为y=wx,x是输入,w是参数,是模型需要计算出来的,y是预测值,*可以看成网络中的计算。
在这里插入图片描述
其实这就可以是一个简单的神经元模型。w需要不断更新:计算损失函数loss对w的导数
在这里插入图片描述
在这里插入图片描述
那么对于复杂的神经网络该怎么样进行梯度计算,进行参数的更新呢?
在这里插入图片描述

分析:假设输入x1~x5,经过多层神经元最后得到y1-y5。每个神经元都有一个权重w需要计算,如何计算损失函数对每一个输入的微分呢?
如果按照之前的梯度下降,根据链式求导法则,那么需要计算的微分公式非常长,计算非常复杂。

在这里插入图片描述
那么有没有一种方式能够比较方便的计算这种复杂的神经网络的梯度呢?
反向传播!

反向传播

计算图

在这里插入图片描述
一个神经元:输入X和权重W先进行矩阵乘法,再进行矩阵加法。(所有输入、输出、参数都是向量或者矩阵)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

图中绿色部分表示运算:
MM:矩阵乘法,ADD:加法。
两种运算的求导方法不一样哟!

对这两层神经元计算公式进行展开,我们会发现:不管有多少层神经元,最终都可以表示成一个形式: W X + B WX+B WX+B。这个计算式是可以展开的,这样计算量是完全没有变化的!
在这里插入图片描述
于是!我们可以在每层神经元之后加一个非线性激活函数!比如说Sigmoid函数,这样函数就没法再展开了。
在这里插入图片描述

链式求导

链式法则定理:

假如 y = f (u)是一个u的可微函数,u = g (x)是一个x 的可微函数,则 y = f (g(x)) 是一个x 的可微函数,并且:
在这里插入图片描述
即y 对x 的导数,等于y 对u 的导数,乘以u 对x 的导数。
或者,写成等价形式:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Forward 前馈计算

Forward 前馈计算:就是从输入x一步步往后计算 Z = f ( x , w ) Z=f(x,w) Z=f(x,w),得到最后Loss的过程。

  • 在这个过程中能够很容易计算出Z对x、w的偏导数。
    在这里插入图片描述
    求得Loss以后,就可以很容易得到Loss对Z偏的导数:
    在这里插入图片描述

反向传播Back Propagation

然后就可以反向利用链式求导法则计算:Loss对x、w的偏导数(我们最终要求的结果!这就是更新阐述w所需要的梯度)这就是反向传播
在这里插入图片描述

其实这个Back Propagation 过程就算一个逆向的Forward过程。

例子

假设:𝑓 = 𝑥 ∙ 𝜔, 𝑥 = 2, 𝜔 = 3
前馈过如下,一层层计算最后可以得到Z,然后计算出Loss。
在这里插入图片描述
假设Loss对Z的偏导数为5(可以根据损失函数计算出来),反向传播过程计算如下:
在这里插入图片描述
反向传播的目的是进行梯度计算,即:计算Loss对w的偏微分

线性模型的计算图计算

前馈过程

已知:x=1,y=2;设置w的初始值为1.
则:y_hat=1,y_hat-y=1,loss=1
则:可以求出y_hat 对 w的偏导数:x=1;r=y_hat-y,求出r对y_hat的偏导数:1;求出loss对r的偏导数:2r=-2
在这里插入图片描述

反向传播过程(逆向求导)

已知:loss对r的偏导数:-2 、r对y_hat偏导数:1、y_hat对w偏导数:1
求得:loss对w的偏导数:根据链式求导法则,相乘就可以得到啦!
在这里插入图片描述

练习

  1. 假设:𝑓 = 𝑥 ∙ 𝜔, 𝑥 = 2, 𝜔 = 1,
    请根据上述计算图的过程,计算出梯度(loss对w的偏微分)
    在这里插入图片描述
  2. 假设:𝑓 = 𝑥 ∗ 𝜔 + 𝑏,𝑥 = 1, 𝜔 = 1,𝑏=2
    请根据上述计算图的过程,计算出梯度(loss对w、b的偏微分)
    在这里插入图片描述
    丑丑的计算过程:
    在这里插入图片描述

Pytorch中的前馈过程和反向传播过程

Tensor

Tensor(张量):可以是标量、向量、矩阵、多维向量… 包含两个属性:

  • data:存储参数w数据
  • grad:存储梯度:loss对w的偏导数
    在这里插入图片描述

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

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

相关文章

C#基础:通过QQ邮件发送验证码到指定邮箱

一、控制台程序 using System; using System.Net; using System.Net.Mail;public class EmailSender {public void SendEmail(string toAddress, string subject, string body){// 设置发件人邮箱地址以及授权码string fromAddress "xxxxxqq.com";string password …

LORA的基本原理

本文将介绍如下内容: 什么是Lora高效微调的基本原理LORA的实现方式LORA为何有效? 一、什么是LoRA LoRA 通常是指低秩分解(Low-Rank Decomposition)算法,是一种低资源微调大模型方法,论文如下: LoRA: Low…

【漏洞复现】优卡特脸爱云一脸通智慧管理平台文件上传漏洞

Nx01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大,运行稳定,操作简单方便,用户界面美观,轻松统计数据的一脸通系统。无需安装,只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管…

智慧校园实验室安全综合管理平台如何保障实验室安全?

一、建设思路 实验室安全综合管理平台是基于以实验室安全,用现代化管理思想与人工智能、大数据、互联网技术、物联网技术、云计算技术、人体感应技术、语音技术、生物识别技术、手机APP、自动化仪器分析技术有机结合,通过建立以实验室为中心的管理体系&…

局域网的好哥们——广域网

广域网(Wide Area Network,WAN)是一种覆盖范围广泛的网络,它连接了不同地理位置的计算机和网络设备,并允许它们进行数据通信和资源共享。本文将介绍广域网的基本概念,包括定义、特点、构成要素以及应用场景…

思维导图制作MindNode 2023中文

MindNode 2023是一款思维导图应用程序,专为创意和组织思维而设计。它通过直观的界面和强大的功能,帮助用户创建、编辑和分享思维导图。MindNode 2023支持多种主题和节点,允许用户自定义图标、颜色和形状,使思维导图更加清晰、有条…

策略模式-实践

俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出 旅游时可以选择多种不同的出行方式,如骑自行车、坐汽车、坐火车或者坐飞机,可根据实 际情况(目的地、旅游预算、旅游时间…

Linux第26步_在虚拟机中安装stm32wrapper4dbg工具

在Ubuntu下编译TF-A 或者 Uboot时,我们需要用到ST公司提供的stm32wrapper4dbg工具。stm32wrapper4dbg工具的源码下载地址为: GitHub - STMicroelectronics/stm32wrapper4dbg 记得我们在前面已经创建过的目录如下: 1)、在根目录下&#xf…

螺纹钢负公差轧制中的测径仪应用

1、负公差轧制意义 为了满足生产使用要求,并根据轧制水平,在产品标准冲规定钢材尺寸的波动范围,允许钢材的实际尺寸与公称尺之间有一定的偏差,这个偏差一般称公差,公差分正、负公差,钢材按负公差轧制时&…

TS 36.331 V12.0.0-过程(4)-测量

​本文的内容主要涉及TS 36.331,版本是C00,也就是V12.0.0。

【检索稳定】第三届新能源、储能与电力工程国际学术会议(NESP 2024)

第三届新能源、储能与电力工程国际学术会议(NESP 2024) 2024 3rd International Conference on New Energy, Energy Storage and Power Engineering (NESP 2024) 近几十年来,全球能源消耗迅速增加,因此寻找和开发性能优良的环保…

试试这个开源神器 55K star! 开箱即用

还记得以前工作上遇到困难,会申请开发大神远程帮忙,那时候用的都是TeamViewer,但是随着TeamViewer的收费,这些都已成为过往。 今天我们推荐的开源项目就是让你可以轻松平替TeamViewer,一款远程桌面神器,本…

Kotlin程序设计(一)基础语法

Kotlin程序设计初级篇 **注意:**在开始学习之前,推荐各位小伙伴有一定的编程语言基础,前置课程:《JavaSE 教程》或《C 语言程序设计》如果没有其他语言的基础,在学习Kotlin时会非常吃力,这门语言语法糖多到…

基于C++的ORM框架sqlpp11入门介绍(附MySQL运行实例)

基本介绍 sqlpp11 是 C 的类型安全的 SQL 模版库。 Sqlpp11的官方下载地址是, GitHub - rbock/sqlpp11: A type safe SQL template library for C 在这里,可以找到官方的详细介绍文档, https://github.com/rbock/sqlpp11/tree/main/docs…

解锁Python库中操作系统级别模块psutil

目录 一、psutil库简介 二、安装psutil库 三、获取系统信息 1、获取CPU信息: 2、获取内存信息: 3、获取磁盘信息: 4、获取网络信息: 四、进程管理 五、系统信息和监控 六、总结 随着Python的普及,越来越多的…

nuxt pm2使用、启动、问题解决方案

pm2简介 pm2是一个进程管理工具,可以用它来管理node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能,在前端和nodejs的世界中用的很多 pm2安装 安装pm2: $ npm install -g pm2查看pm2的安装…

iPad Pro如何使用SSH远程连接服务器云端编程开发【内网穿透】

文章目录 1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 …

JavaScript 增加数组中指定元素(5种方法)

、 文章目录 目录 文章目录 前言 一、数组是什么? 二、数组增步骤 总结 前言 在现代的Web开发中,JavaScript是一种不可或缺的编程语言。它具有强大的功能和灵活的语法,使得开发人员能够轻松地处理各种任务。其中,处理数组是JavaS…

基于JavaWeb+BS架构+SpringBoot+Vue基于web的多媒体素材管理系统的设计和实现

基于JavaWebBS架构SpringBootVue基于web的多媒体素材管理系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 1 绪 论 1 1.1选题背景与意义 1 1.1 研究背景 1 1.2 研究意义…

Python办公自动化 – 数据预处理和数据校验

Python办公自动化 – 数据预处理和数据校验 以下是往期的文章目录,需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动化 – 对Ex…