BP算法-即误差反向传播法简介

BP算法-即误差反向传播法简介

1986年
反向传播算法(back propagation,简称BP模型)是1986年由Rumelhart、Hinton和Williams为首的科学家提出的概念,是用于多层神经网络训练的著名算法,有理论依据坚实、推导过程严谨、概念清楚、通用性强等优点。该方法到今天仍然很流行。

解决了神经网络在引入隐层节点后的学习 (或 训 练 )问题后,已经发展了许多的改进学习算法,如快速下降法 、共轭梯度法 、一维搜 索 法 及 Ievenberg—Marquardt法 等 ,其收敛速度很快,能满 足实时性要求,但也存在着一些问题 。

学习误差反向传播法有两种方式:

一是基于计算式,
这种方法严密且简洁,但是对数学功底要求比较高;

二是基于计算图(Computational graph),比较直观,易于理解。

目前各大深度学习框架如Tensorflow、PyTorch、Theano、百度飞桨PaddlePaddle等都以计算图作为描述反向传播算法的基础。本章我们将基于计算图来介绍误差反向传播法。

百度飞桨PaddlePaddle深度学习平台简介

百度飞桨(PaddlePaddle)是一个深度学习平台,其反向传播(Backpropagation)过程是基于计算图(Computation Graph)模式实现的。

在计算图模式中,深度学习模型的前向传播过程被表示为一个计算图,图中的节点表示变量或操作,边表示数据依赖关系。当模型进行前向传播时,数据从输入层流向输出层,并在计算图中生成中间结果和最终输出。

在反向传播过程中,飞桨会根据计算图自动计算梯度并更新模型参数。具体来说,它会从输出层开始,沿着计算图反向遍历,计算每个节点的梯度,并将梯度传播回前一层,直到达到输入层。这样,模型就可以根据计算出的梯度来更新参数,以优化模型的性能。

因此,可以说百度飞桨的反向传播是基于计算图模式实现的,而不是简单的计算式。这种计算图模式使得飞桨能够高效地处理复杂的深度学习模型,并支持多种不同的硬件平台。

计算图概述

计算图将计算过程用图形来表示。这里说的图形是数据结构图,通过多个节点和边表示(连接节点的直线称为“边”)。

在这里插入图片描述

计算图的优点是,可以通过正向传播和反向传播高效地计算各个变量的导数值。

计算图的反向传播
在这里插入图片描述
复合函数求导的链式法则和计算图
在这里插入图片描述

各种节点的反向传播(求导)
加法节点
乘法节点
ReLU层
Sigmoid层
除法节点
exp节点
Softmax-with-Loss层

卷积层、池化层和全连接层都是线性的,
激活函数是用来引入非线性因素的。
激活函数有如:激活函数ReLU,Sigmoid函数,Softmax-with-Loss层的反向传播等

激活函数一般具有以下性质:

非线性: 线性模型的不足我们前边已经提到。
处处可导:反向传播时需要计算激活函数的偏导数,所以要求激活函数除个别点外,处处可导。
单调性:当激活函数是单调的时候,单层网络能够保证是凸函数。
输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方***更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate.

激活函数ReLU=max(0,x)
在这里插入图片描述

Sigmoid函数=1/(1+e^-x)
在这里插入图片描述
Softmax-with-Loss层(即包含交叉熵损失函数)
在这里插入图片描述
Softmax层的反向传播得到了(y1 − t1, y2 − t2, y3 − t3)这样“漂亮”的结果。由于(y1, y2, y3)是Softmax层的输出,(t1, t2, t3)是监督数据,所以(y1 − t1, y2 − t2, y3 − t3)是Softmax层的输出和监督标签的差。
反向传播得到( y1 − t1, y2 − t2, y3 − t3)这样“漂亮”的结果。实际上,这样“漂亮” 的结果并不是偶然的,而是为了得到这样的结果,特意设计了交叉熵误差函数。

误差反向传播法的优点
误差反向传播算法可以计算输出目标函数 f 对所有的参数 w 的偏微分,这样就可以得到 f 相对于网络参数的梯度 delta f ,有了这个梯度,我们就可以使用梯度下降法对网络进行训练,即每次沿着梯度的负方向(-delta f)移动一小步,不断重复,直到网络输出误差最小。

实际上,反向传播算法就是追踪权重(和偏置)的这种微小的变化是如何影响到损失函数的技术。

反向传播算法的特点是效率高

反向传播可以同时计算所有的偏导数,仅仅使用一次前向传播,加上一次后向传播。假设对一个节点求偏导需要的时间为单位时间,运算时间呈线性关系,那么网络的时间复杂度如下式所示:O(Network Size)=O(V+E),V为节点数、E为连接边数。为了提高反向传播算法的效率,我们通过高度并行的向量,利用GPU进行计算。

本blog地址:https://blog.csdn.net/hsg77

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java spring 07 createBean()(加载class文件,重写方法,实例化前)和doCreateBean()

01.createBean方法 protected Object createBean(String beanName, RootBeanDefinition mbd, Nullable Object[] args)throws BeanCreationException {if (logger.isTraceEnabled()) {logger.trace("Creating instance of bean " beanName "");}RootBea…

面试算法题精讲:最长公共子序列

面试算法题精讲:最长公共子序列 题面 题目来源:1143. 最长公共子序列 题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列(LCS)的长度。如果不存在公共子序列 ,返回…

C++ ─── 匿名对象+变量的创建顺序

目录 1. 匿名对象(临时对象) 2. 编译器的优化 3.变量的创建与销毁 1. 匿名对象(临时对象) 我们先来看有名对象的创建 Date d1; Date d2(2024,4,27);匿名对象的创建 Date(2024,56,1); 生成了一个匿名对象,执行完Da…

MySQL之binlog归档日志

binlog(二进制归档日志) binlog 二进制日志记录保存所有执行过的修改操作语句,不保存查询操作。如果 MySQL 服务意外停止,可通过二进制日志文件排查,用户操作或表结构操作,从而来恢复数据库数据。启动 bin…

Vue的安装及使用教程【超详细图文教程】

一、安装Node.js 安装步骤详细见Node.js下载安装及环境配置 》https://blog.csdn.net/WHF__/article/details/129362462 二、安装vue ①安装 vue.js: npm install vue -g // -g为全局安装 注意:要以管理员身份运行cmd命令窗口!&#xf…

深入浅出MySQL-02-【MySQL支持的数据类型】

文章目录 前言1.数值类型2.日期时间类型3.字符串类型3.1.CHAR和VARCHAR类型3.2.ENUM类型3.3.SET类型 4.JSON类型 前言 环境: Windows11MySQL-8.0.35 1.数值类型 MySQL中的数值类型,如下: 整数类型字节最小值最大值TINYINT1有符号 -128无…

从 Apache Doris 到 SelectDB Cloud:云原生架构下的弹性能力揭秘

随着云时代的到来,越来越多企业开始在公有云、私有云乃至 K8s 容器平台构建实时数据平台。云计算基础设施的革新,促使着数据仓库朝着云原生的方向发展。而用户日益复杂的业务负载和降本增效的需求,对于系统资源的精细化管理和成本效益等方面提…

64、二分-搜索二维矩阵

思路: 通过使用二分方式,对于每行进行二分,因为每行的最后一个数小于下一行的第一个数,我们就可以依次二分。首先取出行数N,然后从0-N进行二分,如果mid最后一个数小于目标值说明0-mid中没有,舍弃…

36 线程概念

本章重点 1.了解线程概念,理解线程与进程的区别与联系 2.学会现充控制,线程创建,线程终止,线程等待 3.了解现场分离与线程安全 4.学会线程同步 5.学会使用互斥量,条件变量,posix信号量,以及读写…

cnpm安装

npm install -g cnpm --registryhttps://registry.npmmirror.com # 注册模块镜像 npm set registry https://registry.npmmirror.com // node-gyp 编译依赖的 node 源码镜像 npm set disturl https://npmmirror.com/dist // 清空缓存 npm cache clean --force // 安装c…

Linux中的yum和gcc/g++

一、快速认识yum(简单介绍) 在Linux中,我们也要进行工具/指令/程序、安装、检查、卸载等等,需要使用到yum 在Linux中安装软件的方式: 源代码安装——交叉编译的工作rpm包直接安装yum/apt-get yum:yum是我们Linux预…

Androd SharedPreferences 存取key-value键值对的用法小结

文章目录 一、存储数据二、读取数据三、删除数据3.1 删除指定KEY的数据3.2 删除所有数据 四、测试4.1 查找数据文件4.2 查看数据的存储 在开发一个简单Launcher,点击APP按钮后,如无APP绑定,则弹出一个APP选择列表,选择后进行绑定&…

STL--string详解

STL基本内容 string是什么 string实质上是一个对象 string可看作一个串,类似字符数组 可以扩容,可以增删查改 可用下表访问操作符[]引用,修改某值 构造函数 默认构造 拷贝构造:参数为(string 或 char*) 求string对象的长度不…

AI预测体彩排列3第2套算法实战化测试第5弹2024年4月27日第5次测试

今天继续进行新算法的测试,今天是第5次测试。好了,废话不多说了,直接上图上结果。 2024年4月27日体彩排3预测结果 6码定位方案如下: 百位:6、2、1、7、8、9 十位:8、9、4、3、1、0 个位:3、7、8…

【C++】学习笔记——类和对象5

文章目录 二、类和对象14. 日期类的实现15. const成员16. 取地址重载17. 再谈构造函数初始化列表 18. explicit关键字19. static成员 未完待续 二、类和对象 14. 日期类的实现 上一篇我们已经大致将日期类的重要功能都给实现了,这节将会对日期类进行完善&#xff…

在Windows10上安全弹出U盘的三种方法,总有一种适合你

序言 为了避免数据丢失,你有必要学习如何在使用完外部硬盘或U盘后安全地将其从计算机中取出。如果在断开U盘之前不弹出,你可能会面临数据损坏的问题。所以不要懒惰。那么,如何从计算机中弹出外部硬盘驱动器或U盘?看看这里。这篇文…

强化训练:day5(游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)

文章目录 前言1. 游游的you1.1 题目描述1.2 解题思路1.3 代码实现 2. 腐烂的苹果2.1 题目描述2.2 解题思路2.3 代码实现 3. 孩子们的游戏(圆圈中最后剩下的数)3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 本章内容:游游的you、腐烂的苹果、孩子们的游戏(圆圈中…

【03】JAVASE-分支语句【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture:波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。…

Redis 服务等过期策略和内存淘汰策略解析

redis服务是基于内存运行的,所以很多数据都存放在内存中,但是内存又不是无限的,所以redis就引出了key的过期和淘汰策略。 一、Redis的过期策略: 我们在set key的时候,可以给它设置一个过期时间,比如expire …

Autosar MCAL-RH850P1HC Fls配置

文章目录 FlsFlsGeneralFlsAcLoadOnJobStartFlsBaseAddressFlsBlankCheckApiFlsCancelApiFlsCompareApiFlsCopySupportedFlsCriticalSectionProtectionFlsDevErrorDetectFlsDeviceNameFlsDriverIndexFlsFaciEccCheckFlsGetJobResultApiFlsGetStatusApiFlsLoopCountFlsReadImmed…
最新文章