【神经网络 基础知识整理】前向传播 反向传播

神经网络 基础知识整理

  • 前向传播
    • 前向传播
    • pytorch中的forward函数
  • 反向传播

顾名思义,前向传播是从前往后传播的,从input层到output层的方向:前面一层的输出传入后一层作为输入,再对数据进行相应的处理,继续传下去,直到输出层;反向传播是从后往前传播的,从output层到input层的方向:目标函数(对应的损失函数)对某权重or某偏置(即神经网络中可训练的参数)求偏导,根据链式法则,从后往前计算偏导

前向传播

前向传播

我们以多层感知机(MLP)为例子,来看看前向传播的过程:神经网络分为3层(输入层、中间层=隐藏层、输出层),数据分别用X、A、Y表示,输入是1*3的向量,中间层有4个神经元节点,输出有2个神经元(比如二分类任务)。X输入然后经过线性变换+非线性变换(激活函数)得到A,A再经过线性变换+非线性变换得到Y,Y经过非线性变换得到最终的输出,整个过程就是前向传播的过程。
在这里插入图片描述
我们来看看a1、a2、a3、a4具体的计算式子,用W表示权重,B表示偏置,表示成矩阵运算即A=f(WX+B),其中A是1*4的向量,W是4*3的矩阵,4对应着输出节点数量,3对应着输入节点数量【权重矩阵W的维度表示成m*n的话,m对应着i+1层网络层的维度,n对应着i层网络层的维度】,f是激活函数:
在这里插入图片描述
最后输出Y的计算式子:
在这里插入图片描述

pytorch中的forward函数

首先说说python中的__call__()方法,这个方法使得一个类(假设是MyClass)的实例化对象(myclass)可以直接用myclass()调用__call__()方法,而不需要myclass.__call__()这样显示调用。以下代码的输出是调用了__call__函数, 其中age=23, name=Eliy,可见myclass()等于myclass.__call__():

class MyClass:def __call__(self, age, name) -> Any:print(f"调用了__call__函数, 其中age={age}, name={name}")if __name__ == '__main__':mycalss = MyClass()# 观察是否会调用__call__()mycalss(age=23, name= 'Eliy')

pytorch中自定义的网络结构都需要继承nn.Module类,这个类里面有self.forward()函数,自定义类需要重写这个函数,具体内容是实现前向传播。用resnet网络为例,forward函数内容如此:

    def forward(self, x):# 忽略每一层的具体结构,观察输入x的流向# 前向传播就是output = model(input)的数据处理过程out = F.relu(self.bn1(self.conv1(x)))out = self.layer1(out)out = self.layer2(out)out = self.layer3(out)out = self.layer4(out)out = F.avg_pool2d(out, 4)out = out.view(out.size(0), -1)out = self.fc(out)return out

需要注意的是,在nn.Module类中的__call__()方法里面,会去调用nn.Module的forward()方法,因此要得到自己model的输出,不必显式调用model.forward(input),直接model(input),此时会调用__call__(),进一步调用forward()。

反向传播

反向传播算法(back propagation),全称是误差反向传播算法,这里的误差实际就是目标函数/损失函数,即模型的输出y’与真实标签y之间的误差。反向传播算法通过使用链式法则,从网络的输出层开始,沿着网络的连接逐层向后计算梯度。这个过程实际上就是计算损失函数对于每个参数的偏导数,然后将这些偏导数整合成梯度。这些梯度随后可以被用于梯度下降等优化算法中,来更新网络参数以最小化损失函数。 反向传播算法与梯度下降算法结合使用,用于训练神经网络模型,具体来说是,反向传播算法计算梯度下降算法所需要的梯度。

因为模型中有很多可训练参数(假设用W表示),因此损失函数E是关于W的多元函数,高等数学学习了多元函数求偏导的方法,以及符合函数求导的链式法则,反向传播求梯度需要用到这些知识。 假设y=f(u(x)),求关于x的导数,如下:
在这里插入图片描述
我们按照第一张图片给出的三层神经网络,以MSE作为损失函数(假设这里是二分类用softmax作为激活函数的话,输出是(y1,y2)这样的向量,计算MSE就逐元素相减,再平方再相加),具体以反向传播计算w1_11的偏导为例:
在这里插入图片描述

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

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

相关文章

力扣Lc17--- 345.反转字符串中的元音字母(java版)-2024年3月18日

1.题目 2.知识点 注1: indexOf() 是 Java 中 String 类的方法之一,它用于查找指定字符或字符串在字符串中第一次出现的位置。如果找到了该字符或字符串,则返回它在字符串中的索引位置(从0开始),如果没有找…

03、判断和循环

三、判断与循环 文章目录 三、判断与循环顺序结构分支结构If语句在程序中就是用来判断的switch 循环结构forwhiledo while 顺序结构 顺序结构是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行。 分支结构 If语句在程序中就是用来判断的 …

C语言 实用调试技巧

我们的博客已经更新到了数据结构,但是当我在深耕数据结构时我发现我在C语言是遗漏了一个重要的东西,那就是C语言的使用调试技巧。这篇博客对数据结构非常重要,请大家耐心观看。 1. 什么是bug? 第一次被发现的导致计算机错误的飞蛾…

Vue2 基础三组件化开发

代码下载 组件 (Component) 是 Vue.js 最强大的功能之一,组件可以扩展 HTML 元素,封装可重用的代码。 组件注册 全局注册: Vue.component(组件名称, {data: 组件数据,template: 组件模板内容});// 全局组件Vue.component(button-counter, …

在AI创业热潮下,如何抓住AI赚钱机会,实现人生逆袭

随着人工智能技术的迅猛发展,AI创业热潮正席卷全球。这不仅为科技领域的专业人士提供了无限的商机,也为普通人开辟了全新的赚钱途径。本文将为您揭示在AI创业热潮下,普通人如何抓住AI赚钱机会,实现人生逆袭,同时探讨哪些行业适合应用AI技术。 一、普通人如何抓住AI赚钱机…

前端基础篇-快速了解 Vue 前端框架(Vue 指令)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Vue 概述 2.0 Vue 指令 2.1 指令 - v-bind 2.2 指令 - v-model 2.3 指令 - v-on 2.4 指令 - v-if、v-else-if、v-else 2.5 指令 - v-show 2.6 指令 - v-for 3.0 生…

es文档操作命令

文档操作 documents 创建数据(put) 向 user 索引下创建3条数据 PUT /user/_doc/1 {"name":"zhangsan","age":18,"sex":"男","info":"一顿操作猛如虎,一看工资2500"…

码云简化版使用教程

码云简化版使用教程 ①创建本地项目 ②在本地项目根目录下创建git相关目录及文件 ③在码云上创建新的仓库 ④在本地项目中配置仓库地址,提交项目内容 下面直接从第二步开始讲解 在本地项目根目录下创建git相关目录及文件 1、打开项目根目录,进入cmd界…

Linux应用 线程同步之互斥锁

1、概念 1.1 定义 互斥锁(Mutex),又称互斥型信号量,是一种特殊的二值性信号量,主要用于实现对共享资源的独占式处理。任意时刻,互斥锁的状态只有两种:开锁或闭锁。当有任务持有时,…

旧衣服回收小程序开发,“互联网+”模式下巨大收益

近年来,在人们生活水平的提高下,旧衣物随之增加,如何处理旧衣服成为了当下大众所困扰的问题。 当下,旧衣回收行业已经成为了一个新的热门行业,我国人口众多,旧衣物的市场规模也在不断扩大,市场…

基于springboot+vue的房屋交易平台

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Greetings

Problem - 1915F - Codeforces 题意 给一些(l,r)找到所有能够包含(l,r)的数目 引入 也就是找逆序对个数 要用到归并排序中的思想&#xff1a; //https://www.luogu.com.cn/problem/P1216 #include<iostream> #include<cstdio> #include<stack> #include…

python面向对像之第二次笔记

python面向对像 一、面向对象的三大特性面向对象包含3大主要特性&#xff1a;封装私有成员继承复写 pass关键字多态 总结 一、面向对象的三大特性 面向对象包含3大主要特性&#xff1a; 封装 封装是面向对象编程中的一个重要概念&#xff0c;它指的是将数据&#xff08;属性&a…

STM32信息安全 1.2 课程架构介绍:芯片生命周期管理与安全调试

STM32信息安全 1.2 课程架构介绍&#xff1a;STM32H5 芯片生命周期管理与安全调试 下面开始学习课程的第二节&#xff0c;简单介绍下STM32H5芯片的生命周期和安全调试&#xff0c;具体课程大家可以观看STM32官方录制的课程&#xff0c;链接&#xff1a;1.2. 课程架构介绍&…

记一些有关Element Plus的样式修改

先记一个放着&#xff0c;后续慢慢补充。。。 一个 Vue 3 UI 框架 | Element Plus Radio 单选框 1、去除radio的圆圈 .box-radio {/deep/ .el-radio__input {display: none;} }

【QT入门】VS2019和QT Creator如何添加第三方模块

声明&#xff1a;该专栏为本人学习Qt知识点时候的笔记汇总&#xff0c;希望能给初学的朋友们一点帮助(加油&#xff01;) 往期回顾&#xff1a; 【QT入门】什么是qt&#xff0c;发展历史&#xff0c;特征&#xff0c;应用&#xff0c;QtCreator-CSDN博客 【QT入门】Windows平台…

模方信创版正式上线!支持水面一键修复、道路置平、纹理编辑...

现在国家大力推进信创国产化软硬件替代的政策背景下&#xff0c;大势智慧重磅发布模方信创版&#xff0c;以满足用户对在信创环境下进行实景三维模型修饰与编辑的需求。 模方信创版与重建大师信创版、DasViewer信创版一道&#xff0c;构筑起三维重建信创生态的“铁三角”&…

Unity PS5开发 天坑篇 之 DEVKit环境部署与系统升级02

上一篇各位大神们已经收到了SONY官方免费寄送的PS5开发机与测试机&#xff0c;恭喜大家成为SONY的开发者, 本篇继续PS5开发机的部署与开发套件使用。 一, PC安装PS5 SDK与系统升级 1. PC/PS5 SDK Manager下载安装包 登录开发者账号后&#xff0c;Development->Resources&a…

挑战杯 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域&#xff0c;在无人驾驶领域中机器学习的各种算法随处可见&#xff0c;今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂&#xff0c;看上去无从下手。那么面对这样极其…

Linux系统——测试磁盘IOPS性能

目录 引言 一、IOPS指标受到的影响因素 二、提高IOPS性能的措施 三、测试IOPS性能命令 1.fio工具 2.ioping工具 引言 磁盘IOPS是指磁盘每秒钟可以完成的输入/输出操作数。它是衡量磁盘性能的一个重要指标&#xff0c;尤其对于需要处理大量随机读写操作的应用程序&…