【算法】反向传播算法
David Rumelhart 是人工智能领域的先驱之一,他与 James McClelland 等人在1986年通过其著作《Parallel Distributed Processing: Explorations in the Microstructure of Cognition》详细介绍了反向传播算法(Backpropagation),这一算法为多层神经网络的训练提供了有效的途径,是深度学习发展的重要里程碑之一。
反向传播算法的核心思想:
反向传播(Backpropagation)算法是基于梯度下降法的一种优化算法,用来训练多层感知器(MLP)等神经网络模型。它的主要思想是,通过逐层计算误差的梯度,并向网络的反方向传播这些误差,更新神经网络的权重,以最小化损失函数。
以下是反向传播算法的基本步骤及其对应的数学公式:
一、前向传播(Forward Propagation)
前向传播的目的是计算神经网络的输出。对于第 l 层的线性组合和激活值:
1. 线性组合:
这里,W(l) 是权重矩阵,a(l−1) 是第 l−1 层的激活值,b(l) 是偏置项。
2. 激活值:
然后通过激活函数 g,得到第 l 层的激活值:
二、 损失函数计算(Loss Function Calculation)
网络的输出和真实标签(目标值)之间的差异通过损失函数来度量。例如,对于回归问题常用均方误差(MSE),对于分类问题常用交叉熵损失(Cross Entropy)。假设损失函数为 L,我们的目标是最小化 L。
三、 反向传播(Backpropagation)
在反向传播阶段,我们通过链式法则计算损失函数对各层权重 W(l) 和偏置 b(l) 的梯度,即:
这些梯度表示每个权重和偏置对最终损失 L 的影响。它们通过链式法则逐层向前回传,详细步骤如下:
1. 损失相对于第 l 层输出的导数:
2. 损失相对于权重的导数:
前向传播中线性组合的公式,可以看到,z(l) 是由 W(l)和 a(l−1) 相乘得到的。因此,z(l) 对 W(l) 的导数为:
通过链式法则计算损失函数对权重 W(l) 的导数:
得到结果:
这里,a{(l-1)}T 是上一层的激活值的转置,目的是确保矩阵的维度正确。由于 W(l) 是一个矩阵,通常 a(l−1) 是一个列向量,因此 a{(l-1)}T 是一个行向量。
3. 损失相对于偏置的导数:
在线性组合公式中,偏置 b(l) 是直接加到每个神经元的线性组合 z(l) 中的。因此,z(l) 对 b(l) 的导数是 1:
通过链式法则,我们可以计算损失函数 L 对偏置 b(l) 的导数:
所以:
4. 损失相对于第 l−1层线性组合 z(l−1)的导数:
根据线性组合的公式,z(l) 对 a(l−1) 的导数是权重矩阵 W(l):
通过链式法则,损失函数对上一层激活值 a(l−1) 的导数可以表示为损失函数对当前层线性组合 z(l) 的导数乘以 z(l) 对 a(l−1) 的导数:
代入前面推导出的公式:
为了保持一致性,我们通常将 W(l) 转置,使得矩阵运算中的维度保持一致:
因为每一层的激活值 a(l−1) 是通过激活函数 g(z(l−1)) 得到的:
所以:
即:
⊙ 表示逐元素相乘(Hadamard 乘积),激活函数是逐元素应用到每个神经元输出的,而不是对整个向量进行操作。因此,第 l 层的每个神经元在反向传播时都会依赖于其对应的激活函数导数。
四、 权重和偏置更新(Weight and Bias Update)
使用梯度下降法,根据反向传播计算得到的梯度更新权重和偏置。
1. 权重更新公式:
对于第 l 层的权重 W(l),更新公式为:
其中:
- η 是学习率。
- ∂W(l)∂E=δ(l)(a(l−1))T 是损失函数对第 l 层权重的梯度。
2. 偏置更新公式:
类似地,第 l 层的偏置 b(l) 更新公式为:
五、 循环迭代
通过多次迭代(通常称为训练迭代(epochs)),重复进行前向传播、损失函数计算、反向传播以及权重和偏置的更新,直到网络收敛,即损失函数的值不再显著下降,或者达到了预设的迭代次数。
Rumelhart 对反向传播算法的贡献:
David Rumelhart 及其同事的主要贡献在于:
- 他们系统化地提出了反向传播算法,使得该算法可以有效应用于多层神经网络的训练,解决了之前单层感知器模型的局限性。
- 他们展示了如何通过反向传播算法训练深层网络,使得网络能够从数据中学习复杂的模式表示。这为后来的深度学习发展奠定了基础。
反向传播的意义与局限:
反向传播算法是现代深度学习的核心之一,它使得多层神经网络能够成功训练,解决了许多复杂的任务(如图像识别、语音识别等)。但是,它也有一些局限性,例如:
- 梯度消失问题(vanishing gradient):在深层神经网络中,反向传播的梯度逐渐减小,导致前几层权重更新非常缓慢。
- 训练时间长:当网络层数增加或数据集规模扩大时,训练时间可能会变得非常长。
尽管如此,反向传播算法依然是当今神经网络训练的基础,配合现代改进的优化方法(如Adam、RMSprop等)和技术(如Batch Normalization、Dropout等),反向传播已经极大地提升了神经网络的学习效率和表现。
相关文章:

【算法】反向传播算法
David Rumelhart 是人工智能领域的先驱之一,他与 James McClelland 等人在1986年通过其著作《Parallel Distributed Processing: Explorations in the Microstructure of Cognition》详细介绍了反向传播算法(Backpropagation),这一…...

外贸非洲市场要如何开发
刚不久前中非合作峰会论坛之后,取消了非洲33国的进口关税,中非贸易一直以来都还不错,这次应该会更上一个台阶。今天就来给大家分享一下,关于非洲市场的一些分析和开发方法。 一、非洲市场情况 非洲是一个广阔的大陆,由…...

python去除空格join()
sinput().split() print( .join(s)) input().split()的作用: split()是字符串对象的方法。当对一个字符串调用split()方法时,它会根据指定的分隔符将字符串分割成多个子字符串,并将这些子字符串以列表的形式返回。如果不指定分隔符…...

git push错误:Out of memory, malloc failed (tried toallocate 947912704 bytes)
目录 一、错误截图 二、解决办法 一、错误截图 因项目文件过大,http.postBuffer设置的内存不够,所以报错。 二、解决办法 打开cmd窗口,执行如下命令即可 git config --global http.postBuffer 1024000000 如图所示 执行完成以后&#…...

web平台搭建-LAMP(CentOS-7)
一. 准备工作 环境要求: 操作系统:CentOS 7.X 64位 网络配置:nmtui字符终端图形管理工具或者直接编辑配置文件 关闭SELinux和firewalld防火墙 防火墙: 临时关闭:systemctl stop firewalld 永久关闭:systemc…...

2024.9.21 Python与C++的面试八股文整理,类与对象,内存规划,默认函数,虚函数,封装继承多态
1.什么是类,什么是面向对象 (1)类是一种蓝图或者模板,用于定义对象的属性和行为,类通常包括:属性,也就是静态特征,方法,也就是动态特征。属性描述对象的特征,…...

2024 vue3入门教程:02 我的第一个vue页面
1.打开src下的App.vue,删除所有的默认代码 2.更换为自己写的代码, 变量msg:可以自定义为其他(建议不要使用vue的关键字) 我的的第一个vue:可以更换为其他自定义文字 3.运行命令两步走 下载依赖 cnpm i…...

[go] 状态模式
状态模式 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 模型说明 上下文 (Context) 保存了对于一个具体状态对象的引用, 并会将所有与该状态相关的工作委派给它。 上下文通过状态接口与状态对象交互&…...

uniapp沉浸式导航栏+自定义导航栏组件
在 UniApp 中实现沉浸式导航栏并结合自定义导航栏组件 一、沉浸式导航栏设置 在pages.json中配置页面样式 在需要设置沉浸式导航栏的页面的style选项中进行如下配置: {"pages": [{"path": "pages/pageName/pageName","style&qu…...

光伏仿真:排布设计如何优化用户体验?
1、屋顶绘制精准 光伏系统的性能直接受到屋顶结构的影响,因此,屋顶绘制的精准性是光伏仿真设计的首要任务。现代光伏仿真软件通过直观的界面和强大的图形编辑功能,使得用户能够轻松导入或绘制出待安装光伏系统的屋顶形状。无论是平面屋顶、斜…...

Vue使用axios二次封装、解决跨域问题
1、什么是 axios 在实际开发过程中,浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后,官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的详细介…...

鸿萌数据恢复:如何降低 RAM 故障风险,以避免数据丢失?
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 RAM 可能因多种原因而发生故障,并将设备和数据置…...

使用java实现ffmpeg的各种操作
以实现如下功能 1、支持音频文件转mp3;2、支持视频文件转mp4;3、支持视频提取音频;4、支持视频中提取缩略图;5、支持按时长拆分音频文件; 1、工具类 由于部分原因,没有将FfmpegUtil中的静态的命令行与Ty…...

【ArcGIS微课1000例】0122:经纬网、方里网、参考格网绘制案例教程
文章目录 一、ArcGIS格网类型二、绘制经纬网三、绘制方里网四、绘制参考格网五、注意事项一、ArcGIS格网类型 在ArcMap中,可以创建三种类型的格网: 经纬网——将地图分割为经线和纬线。经纬网是用来标识准确地理位置的方式,由经线和纬线构成,相对于经纬线,分别有的经度和…...

电路板上电子元件检测系统源码分享
电路板上电子元件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…...

综合体第三题(DHCP报文分析)
DHCP工作流程(一般情况下) 例二(无忧/22) 下图为DHCP客户机获取IP地址等配置信息时,使用Wareshark软件捕获报文中编号为2〜5的4条报文,图中对编号为3的报文进行了解析。分析图中的信息并补全图中①〜⑤处的…...

企业级-pdf预览-前后端
作者:fyupeng 技术专栏:☞ https://github.com/fyupeng 项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api 留给读者 本文 一、介绍 对于PDF预览,有很多开发者都遇到过头疼的难题,今天给大家介绍…...

为什么 qt 成为 c++ 界面编程的第一选择?
一、前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C界面都是基于MFC,也做过5年左右。当时为什么会从MFC转到QT,主要原因是MFC开发界面想做得好看一些十分困难,引用第…...

Day1-顺序表
1. 数据结构-基本概念 数据之间的相互关系,包括三种关系:逻辑结构:表示数据元素之间的抽象关系(如邻接关系、从属关系等)。有四种基本的逻辑结构:集合结构、线性结构、树形结构、图状结构存储结构:数据的逻辑结构在计算…...

PostgreSQL - pgvector 插件构建向量数据库并进行相似度查询
在现代的机器学习和人工智能应用中,向量相似度检索是一个非常重要的技术,尤其是在文本、图像或其他类型的嵌入向量的操作中。本文将介绍如何在 PostgreSQL 中安装 pgvector 插件,用于存储和检索向量数据,并展示如何通过 Python 脚…...

UR机器人坐标系转化
UR机器人读取上来的坐标系是旋转矢量,每次都要查一下怎么转换,在这里记录以下...

【每日一题】LeetCode 2306.公司命名(位运算、数组、哈希表、字符串、枚举)
【每日一题】LeetCode 2306.公司命名(位运算、数组、哈希表、字符串、枚举) 题目描述 给定一个字符串数组 ideas,表示在公司命名过程中使用的名字列表。我们需要从 ideas 中选择两个不同的名字,称为 ideaA 和 ideaB。然后交换 i…...

240922-chromadb的基本使用
A. 背景介绍 ChromaDB 是一个较新的开源向量数据库,专为高效的嵌入存储和检索而设计。与其他向量数据库相比,ChromaDB 更加专注于轻量化、简单性和与机器学习模型的无缝集成。它的核心目标是帮助开发者轻松管理和使用高维嵌入向量,特别是与生…...

工厂模式和抽象工厂模式的实验报告
1. 实验结果: 记录并附上不同模型对象(例如:士兵、机器人、骑士)的展示效果截图。 2. 性能分析: 记录并比较抽象工厂模式与直接实例化的性能测试结果,分析它们在不同数量级对象创建时的开销与效益。 2.1…...

C标准库<string.h>-str、strn开头的函数
char *strcat(char *dest, const char *src) 函数功能 strcat 函数用于将一个字符串追加到另一个字符串的尾部。 参数解释 dest:指向目标字符串的指针,这个字符串的尾部将被追加 src 字符串的内容。src:指向源字符串的指针,其…...

Anaconda/Miniconda的删除和安装
要在 MacBook 上删除 Anaconda 或 Miniconda,并重新安装它,您可以按照以下步骤进行操作。 删除 Anaconda/Miniconda 1. 删除 Anaconda/Miniconda 文件和目录 打开 终端 并运行以下命令来删除安装目录。 对于 Anaconda,通常安装在 ~/anaconda3: rm -rf ~/anaconda3对于…...

【Harmony】轮播图特效,持续更新中。。。。
效果预览 swiper官网例子 Swiper 高度可变化 两边等长露出,跟随手指滑动 Swiper 指示器导航点位于 Swiper 下方 卡片楼层层叠一 一、官网 例子 参考代码: // xxx.ets class MyDataSource implements IDataSource {private list: number[] []cons…...

Go 并发模式:管道的妙用
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在编写程序时,我们通常不会一口气写出一个冗长的函数。相反,我们通过构建函数、结构体和方法等抽象来简化代码。这不仅有助于隐藏不重要的细节,还使我们能够专注于某一部分代码,而不必担心影响其他部分。然而…...

CAN通信详解
1、CAN介绍 1.1、什么是CAN? CAN(Controller Area Network) 即控制器局域网,是ISO国际标准化的串行通信协议。 开发目的:为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”…...

52 文本预处理_by《李沐:动手学深度学习v2》pytorch版
系列文章目录 例如:第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录一、理论部分二、代码读取数据集词元化词表整合所有功能小结练习 一、理论部分 对于序列数据处理问题,我们在序列处理中评估了所需的统计工具和预测时面临的挑战。 …...