015: 深度学习之正向传播和反向传播

news2025/1/17 23:40:54

本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。

合集完整版请参考这里。

上一节介绍了训练和推理的概念,这一节接着训练和推理的概念讲一下,神经网络的正向传播和反向传播。

正反向传播

其实单看正向传播和反向传播这两个概念,很好理解。

正向传播(Forward Propagation)是指数据从神经网络的第一层(也叫输入层)到最后一层(也叫输出层)的数据流动过程。

而反向传播(Backpropagation)是指数据从输出层到输入层的反向流动过程。

正常情况下,利用神经网络推理一张图像。图像数据从神经网络的输入层一直流到输出层就可以得到推理的结果,这是典型的正向传播过程,因此在推理时只有正向传播。

那反向传播是用在什么地方呢?没错,是训练。

上一节举了个例子,训练的过程就好像我们在初中高中学习课本知识一样,不断的校正我们大脑中对于知识的理解。

因此训练的过程需要有一个不断反馈、不断校正的过程,在神经网络中被校正的参数被称为神经网络的权重(或权值)。

还记得之前在介绍传统计算机视觉的时候提到的均值滤波器吗?均值滤波器中的参数都是1,可以完成对噪声的均匀滤除。

在这里插入图片描述

而神经网络中很多算法的参数是不确定的,我们没有办法来进行设计,只能让神经网络自己去学习,自己不断的去调整这些。

因此科学家们设计了一个反向传播机制,专门用来调整这个参数,下面用通俗的语言来介绍训练过程,以及反向传播是如何运行的。

训练和反向传播的模拟介绍

首先,在神经网络最后的输出层后面,都会有一个损失函数,该函数用来评判神经网络输出的结果与真实结果的接近程度。预测结果与真实结果越接近,那么损失函数的输出值就越低,如果损失函数输出值为0,那么说明预测结果和输出结果完全一致。

假设,AI模型在第一次训练时,神经网络里的参数权重都是随机值(实际情况也是这样),那么基本上第一次的预测结果与真实结果差着十万八千里。

比如真实值是10,而预测结果是1000,此时预测结果比真实结果高了很多,那我们就希望模型的参数进行调整,使得预测的结果继续变小。

这里就要用到神经网络的反向传播过程。

它会把本次预测结果与真实结果之间的差距(这里是1000 -10 = 990)反向传给神经网络的每一层,神经网络的每一层拿到后面传过来的 990 的变化量之后就会知道,本次预测高了,神经网络就会把自己的权重进行调整,调整的方向是使下一次的预测变得低一些。
在这里插入图片描述

若是下一次预测的结果是 800,结果还是偏高,会继续把这一次的变化量 (800-10=790) 再次进行反向传播,然后每一层继续往下调整参数,直到网络输出的结果为10。

学习率

上面描述的是一个大致的过程。在实际模型训练中,损失函数的输出是有波动的。

比如某一次预测值为 20,这是高于真实值的,我们希望继续往下调,下一次的预测值可能会变成0,此时又低于真实值,模型需要再继续调整参数使输出变得大一些,此时可能输出又变成了 20,这样反复调整会使得预测结果在真实的结果10之间上下波动,但是不收敛到10。

这是因为每次反向传播时,调整的幅度过大,在这个时候可以适当的将调整的幅度降低。

这个幅度,可以通过配置学习率来控制。学习率是神经网络模型的一个超参数,我们可以在训练模型时配置这个参数。

学习率降低后,假设输出可以做到每次调整的变化量为 5,这样结果就在5和15之间波动,如果在继续降低学习率,调整成0.1,那么预测值就在9.9和10.1之间波动,基本上就可以认为模型收敛到10了。

在真实的训练过程中,刚开始可以将学习率设置的大一些,到了后期将学习率设置的小一些,从而实现前期快速收敛、后期精度微调的效果。

以上便是训练的大致过程,反向传播在其中发挥了巨大的作用。

具体而言,反向传播在实际神经网络中计算的过程如下(了解即可):

根据预测结果和真实标签计算损失函数,输出损失值。

计算损失值对权重的偏导数(得到反向传播的梯度)。

通过链式法则依次计算前一层的梯度。

使用梯度下降法或其他优化算法,更新网络参数,使损失函数的输出值最小化。

正向传播和反向传播是神经网络中的核心概念,通过这两个过程,神经网络可以通过大量样本的训练来调整模型的权重,从而使模型逐渐优化并具备较好的泛化能力。

后面会有一个实战:在笔记本上训练一个图像识别的小模型。

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

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

相关文章

梁山派入门指南2——滴答定时器位带操作按键输入(包括GPIO中断)

梁山派入门指南2——滴答定时器&位带操作&按键输入 1. 滴答定时器1.1 滴答定时器简介1.2 相关寄存器1.3 固件库函数 2. 位带操作2.1 位带操作介绍2.2 位带操作的优势2.3 支持位带操作的内存地址2.4 位带别名区地址的计算方式2.5 位带操作使用示例 3 按键输入3.1 独立按…

安全类脚本:拒绝ssh暴力破解

要求如下: 一个小时内,连续密码错误4次。 Linux lastb 命令用于列出登入系统失败的用户相关信息。 实验过程如下: 1. 创建两个IP地址不同的干净环境,分别是:192.168.46.101 Rocky 2 和 192.168.46.120 openEuler 2. 2.…

HugeGraph集群部署

部署HugeGraph集群 最近工作中,需要部署一个HugeGraph的多副本集群,要求一个主节点,两个从节点。由于HugeGraph官网并没有完整的搭建集群实例,所以这里写一篇文章记录自己搭建集群的过程,供自己和大家学习和参考。 注…

SqlSugar连接达梦数据库集群超时或异常缓慢

《SqlSugar配置连接达梦数据库集群》文章中介绍SqlSugar连接达梦数据库集群,只需按下图所示位置添加dm_svc.conf文件,并在SqlSugar的连接字符串中指定服务名即可。   但在使用过程中发现,基于.net 6开发的WebApi,编译为ANYCPU&…

Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)

在开发跨进程应用程序时,进程间通信(IPC)是一个关键问题。Qt 框架提供了多种 IPC 技术,其中 QSharedMemory 是一种高效的共享内存方式,可以实现多个进程之间快速交换数据。本文将详细讲解 QSharedMemory 的概念、用法及…

STM32的集成开发环境STM32CubeIDE安装

STM32CubeIDE - STM32的集成开发环境 - 意法半导体STMicroelectronics

NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能

Sipeed推出了NanoKVM,简直是没有BMC的台式机和工作站的福音。有了这个就可以轻松实现以往服务器才有的远程管理功能。 NanoKVM 简介 Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品,继承了 LicheeRV Nano 的极致体积 和 强大功能。 NanoKVM 包含…

唐刘:TiDB 的 2024 - Cloud、SaaS 与 AI

2024 年已经过去,在去年我也写过两篇类似的文章,TiDB in 2023 - 一次简单的回顾和 TiDB Cloud in 2023 - 一次简单的回顾,这一次,我准备将 TiDB 和 cloud 一起写,一方面原因是我懒了,另外一个更重要的原因在…

Web端实时播放RTSP视频流(监控)

一、安装ffmpeg: 1、官网下载FFmpeg: Download FFmpeg 2、点击Windows图标,选第一个:Windows builds from gyan.dev 3、跳转到下载页面: 4、下载后放到合适的位置,不用安装,解压即可: 5、配置path 复制解压后的\bin路径,配置环境变量如图: <

Excel 技巧10 - 如何检查输入重复数据(★★)

本文讲了如何在Excel中通过COUNTIF来检查输入重复数据。 当输入重复数据时&#xff0c;显示错误提示。 1&#xff0c;通过COUNTIF来检查输入重复数据 比如下面是想检查不要输入重复的学号。 选中C列&#xff0c;点 Menu > 数据 > 数据验证 在数据验证页面&#xff0c…

IEC103 转 ModbusTCP 网关

一、产品概述 IEC103 转 ModbusTCP 网关型号 SG-TCP-IEC103 &#xff0c;是三格电子推出的工业级网关&#xff08;以下简 称网关&#xff09;&#xff0c;主要用于 IEC103 数据采集、 DLT645-1997/2007 数据采集&#xff0c; IEC103 支持遥测和遥 信&#xff0c;可接…

Unity3d 实时天气系统基于UniStorm插件和xx天气API实现(含源码)

前言 实时天气在Unity3d三维数字沙盘中的作用非常重要&#xff0c;它能够增强虚拟环境的真实感和互动性&#xff0c;实时天气数据的应用可以提供更为精准和直观的天气信息支持&#xff0c;如果真实的数据加上特效、声音和模型反馈会提高产品档次&#xff0c;提高真实感。 目前…

Linux命令行工具-使用方法

参考资料 Linux网络命令&#xff1a;网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…

【Flink系列】9. Flink容错机制

9. 容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 9.1 检查点&#xff08;Checkpoint&#xff09; 9.1.1 检查点的保存 1&#xff09;周期性的触发保存 “随时存档”确实恢复起来方便&#xff0c;可是需要我…

【深度学习】关键技术-激活函数(Activation Functions)

激活函数&#xff08;Activation Functions&#xff09; 激活函数是神经网络的重要组成部分&#xff0c;它的作用是将神经元的输入信号映射到输出信号&#xff0c;同时引入非线性特性&#xff0c;使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…

20.<Spring图书管理系统①(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

【Sql递归查询】Mysql、Oracle、SQL Server、PostgreSQL 实现递归查询的区别与案例(详解)

文章目录 Mysql 5.7 递归查询Mysql 8 实现递归查询Oracle递归示例SQL Server 递归查询示例PostgreSQL 递归查询示例 更多相关内容可查看 Mysql 5.7 递归查询 MySQL 5.7 本身不直接支持标准 SQL 中的递归查询语法&#xff08;如 WITH RECURSIVE 这种常见的递归查询方式&#xf…

vue2修改表单只提交被修改的数据的字段传给后端接口

效果&#xff1a; 步骤一、 vue2修改表单提交的时候&#xff0c;只将修改的数据的字段传给后端接口&#xff0c;没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性&#xff0c;用于存储初始表单数据的副本&#xff0c;与当前表单数据进行比较&#xff0c;找出哪些…

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程(配套案例数据)》专栏上线了

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程》全新上线了&#xff0c;欢迎广大GISer朋友关注&#xff0c;一起探索GIS奥秘&#xff0c;分享GIS价值&#xff01; 本专栏以实战案例的形式&#xff0c;深入浅出地介绍了GRASS GIS的基本使用方法&#xff0c;用一个个实例讲…

纯命令 git使用

首先我们到一个新的公司 要添加一个新的git仓库的权限 我们应该现拉去代码 配置git的仓库信息 第一 先添加权限 第二 如果不是自己电脑 需要配置信息 配置基础信息 查看本地git账号git config --global user.name git config --global user.email修改本地账号git co…