【算法】反向传播算法
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 脚…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...