BP算法

news/2025/3/18 21:48:33/文章来源:https://www.cnblogs.com/zxd1999/p/18779823

反向传播算法,简称BP算法,是多层神经元网络常用的学习算法之一,它建立在梯度下降算法的基础上。BP算法的完整学习过程由正向传播过程和反向传播过程组成。反向传播的过程是利用梯度下降算法,最小化代价函数 的过程。假设使用如图2.1所示的神经网络,该网络有一个输出层、两个隐藏层和一个输入层。在网络的前向传播过程中,神经元的计算如公式(2-1)和公式(2-2)所示。

式中为来自神经网络第l层的输入,w为权重矩阵,b为第l层的偏置项,f为激活函数,这里选择sigmoid激活函数,z为在第 +1层第i个位置的输出。经过类似的多层神经网络,可以得到最终的输出 ,L指代网络的输出层。
接着需要计算样本实际值和输出值之间的误差,这里使用的损失函数为softmax损失函数,如公式(2-3)和公式(2-4)所示。

其中公式(2-3)为softmax激活函数,a为第i个输出值,N为训练时batch的大小,n为样本的类别数,a为输出值,y为真实值,一般而言log函数的底值为e。通过公式(2-3)和公式(2-4),可以计算出最终的代价J,并利用代价函数来优化权重参数。
反向传播的过程是利用梯度下降算法,使代价函数 最小或者达到预期值的过程。反向传播的过程需要计算损失 对各个神经元权重的偏导数,将这些偏导数作为代价函数对权重的梯度,并利用这些梯度来修改权重。首先我们需要计算J关于输出值a的偏导数,这个偏导数可以作为预测值和实际值的误差δ。求导过程可以分解为公式(2-5),其中f为softmax函数,a为输出值,y为真实值。

计算softmax函数关于 的偏导数,需要分开讨论。

当k=i时,偏导数结果如公式(2-6)所示;当k≠ i时,偏导数结果如公式(2-7)所示。最终偏导数的结果为,记为,即第i个输出值与实际值的误差。接着我们可以通过链式求导法则逐层推导神经网络的偏导数。求代价函数关于a的偏导数的公式如(2-8)所示。

其中,偏导数第一部分求出,即关于第(l+1)层元素的偏导数。偏导数的第二部分为sigmoid函数关于z的偏导数,如果第(l+1)层没有使用激活函数,则该部分可以舍去,sigmoid函数关于z的偏导数计算公式为,a为第(l+1)层的输出。第三部分记为对应的权重参数。进而可以得到公式(2-9)。
像这样,我们可以求出代价函数关于所有层元素的偏导数。使用同样的方法,可以求出关于权重的偏导数,如公式(2-10)所示。

为第(l+1)层第i个输出值 和第(l)层第j个输出值a之间的权重,最后可以使用求得的偏导数更新权重,如公式(2-11)所示,其中n为学习率。

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

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

相关文章

基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真

1.程序功能描述 基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真。主要是为了实现桥梁静载试验自动化布载(确定车辆位置使得满足加载效率ηq的要求,0.95≤ηq≤1.05),总体要求是ηq尽量靠近1,所用的加载车辆尽量少,进行布载耗时越少越好。 2.测试软件版本以及运…

攻防世界 guess_num WriteUp

WriteUp 题目信息 来源:攻防世界 名称:guess_num 分类:Pwn 描述:菜鸡在玩一个猜数字的游戏,但他无论如何都银不了,你能帮助他么题目链接: https://adworld.xctf.org.cn/challenges/list解题思路 首先使用DIE对文件进行查壳,发现这是一个无壳的64位ELF文件。于是直接使用…

第一次结对项目

问题 内容这个作业属于哪个课程 班级的链接这个作业要求在哪里 作业要求的链接这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序姓名 朱江学号 3123004770GitHub仓库文件夹链接 第一次编程作业链接姓名 杨思程学号 3123004761GitHub仓库文件夹链接 第一次编程作业…

使用 EchoAPI 实现 API 断言的全面指南

API 断言是 API 测试中的一个关键部分。通过执行 API 断言,您可以验证 API 响应数据的准确性,从而增强 API 的可靠性和稳定性。在本文中,我们将介绍 API 断言的基础知识,并演示如何通过用户友好的 API 测试工具 Apipost 来轻松执行响应断言。 什么是 API 断言?API 断言是指…

变量与执行

目录变量变量命名规则变量的类型变量的赋值python代码的执行 变量 Python 是一种动态类型语言,这意味着你不需要显式地声明变量的类型,Python 会根据你赋给变量的值自动推断其类型。 变量命名规则 1、字母、数字、下划线:变量名可以包含字母(a-z, A-Z)、数字(0-9)和下划…

结构化程序设计——系统设计思想(输入输出)

一、结构化程序设计概述 结构化程序设计(Structured Programming)是由计算机科学家 Edsger W. Dijkstra 于 20 世纪 60 年代提出的编程方法论。其核心思想是通过 顺序结构、选择结构 和 循环结构 三种基本控制结构,构建出逻辑清晰、易于理解和维护的程序。结构化程序设计强调…

20244111 2024-2025-2 《Python程序设计》实验一报告

20244111 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2441 姓名: 韩金婕 学号:20244111 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容熟悉Python开发环境;练习Python运行、调试技能;编写程序,练习变量和类型…

20244226 实验一《Python程序设计》实验报告

20244226 2024-2025-2 《Python程序设计》实验一报告 1.实验内容 课程:《Python程序设计》 班级: 2442 姓名: 张毓格 学号:20244226 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编…

2025“钉耙编程”中国大学生算法设计春季联赛(2)(2 4 5,补3 6 8)

2025“钉耙编程”中国大学生算法设计春季联赛(2)(2 4 5,补3 6 8) 1002:烂人方法 #include<bits/stdc++.h> #define N 1005 #define mod 998244353 using namespace std; typedef long long ll; string a[] = {"jia","yi","bing",&quo…

.NET周刊【3月第2期 2025-03-09】

国内文章 记一次.NET内存居高不下排查解决与启示 https://www.cnblogs.com/huangsheng/p/18731382 本文讲述了一个ASP.NET Core gRPC服务迁移到Kubernetes后的内存管理问题。服务在K8s上遇到了高内存占用与副本扩展的问题,经过排查发现服务的内存请求设置正确,但未设定上限。…

Agent 智能体创作大赛+参赛小分队召集

与大家分享一个 agent 比赛「智能体全球创作大赛」。你可以用任何趁手的工具打造一个 agent,分享你对人机协作未来的畅想。大赛公告发布出去后,不少社区伙伴都表示有兴趣参与,所以我们决定建一个「RTE 参赛小分队」微信群 ,愿意一起分享想法和讨论技术,一起赶 deadline(3…