BP神经网络

一、BP神经网络概述

BP神经网络由Rumelhard和McClelland于1986年提出的一种按照误差逆向传播算法训练的多层前馈神经网络。

从结构上讲,BP神经网络是一种典型的多层前向型神经网络,具有一个输入层input、数个隐含层hidden(可以是一层,也可以是多层)和一个输出层output,以及各层之间得权重weight。层与层之间采用全连接的方式,同一层的神经元之间不存在相互连接。

(理论上已经证明,具有一个隐含层的三层网络可以逼近任意非线性函数。)

BP算法是BP神经网络的核心学习算法。

1、输入层:信息的输入端。

2、隐藏层:信息的处理端,神经元多采用S型传递函数。

3、输出层:信息的输出端,神经元多采用线性传递函数。

4、权重:连接每层信息之间的参数

图1所示为一个典型的三层BP神经网络结构。

二、BP神经网络的流程

BP神经网络是一种多层的前馈神经网络,其主要的特点是:

信号是前向传播的,而误差是反向传播的。

BP神经网络的过程主要分为两个阶段:

第一阶段是信号的前向传播,从输入层经过隐含层,最后到达输出层;

第二阶段是误差的反向传播,从输出层到隐含层,最后到输入层,依次调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。

神经网络的基本组成单元是神经元。神经元的通用模型如图所示,其中常用的激活函数有阈值函数、sigmoid函数和双曲正切函数。

神经元的输出为:

神经网络是将多个神经元按一定规则联结在一起而形成的网络,例如:

一个神经网络包括输入层、隐含层(中间层)和输出层。输入层神经元个数与输入数据的维数相同,输出层神经元个数与需要拟合的数据个数相同,隐含层神经元个数与层数就需要设计者自己根据一些规则和目标来设定。

三、BP神经网络的相关概念

1、输入层

输入层:指的就是我们输入数据的种类数量,输入几类,输入层神经元就有几层。

是网络的第一层,负责接收外界输入的数据。输入层的节点数通常与问题的特征数量相匹配。

2、隐含层

隐含层:夹在输入层和输出层之间的神经元,数量可以自行设置,不过一般通过经验公式来确定:

h=\sqrt{m+n+a}         

其中:h为隐含层节点数目,输入层节点个数m,输出层节点个数n,a为1-10之间的调节。

它是网络中不直接与输入或输出层相连的层。一个BP神经网络可以包含一个或多个隐含层。隐含层的节点数可以根据问题的复杂性来调整。

3、输出层

输出层:指的就是我们相应得到的指标,一般就一个。

它是网络的最后一层,负责输出网络的最终结果。输出层的节点数通常与问题的输出类别数量相匹配。

4、权值(Weight)

权值是连接输入层、隐含层和输出层节点之间的权重。在训练过程中,这些权值会通过学习算法进行调整,以最小化预测误差。

5、阈值(Biases)

 阈值是加在每个节点输入上的一个常数,用于控制节点的激活。与权值一样,阈值也会在训练过程中被调整。

6、激活函数

激活函数在隐含层和输出层的神经元中使用的函数,用于引入非线性因素,使得神经网络能够学习和处理复杂的模式。它决定了节点在接收到输入后是否被激活。BP神经网络使用的激活函数是Sigmoid函数。此外常见的激活函数还有tanh函数、ReLU函数等,激活函数的选择对网络的性能有重要影响。

sigmoid 取值范围(0,1),这个性质让它适合用于将输入信号转化为(0,1)区间的输出信号,通常用于隐藏层和二分类的输出层。此外它还具有特性:单调连续,处处可微,一般用于隐藏层和二分类的输出层。 

Sigmod函数:

Sigmoid的导函数:

Sigmoid的函数图像:

激活函数由单个神经元的基本结构由线性单元和非线性单元两部分组成。z表示线性单元的输出,g(z)表示非线性单元的输出,函数g就是激活函数。激活函数的作用便是增加非线性因素,解决线性模型表达能力不足的缺陷。

四、梯度下降法

BP网络的梯度下降法‌是一种优化算法,用于调整神经网络的权重和偏置,以最小化损失函数。(目的:寻求最优解)

梯度下降法‌模拟了一个下山的过程,通过计算函数在当前位置的梯度(即函数在该点的变化率),然后沿着梯度的反方向(即函数值下降最快的方向)更新权重和偏置,从而逐步接近最小值。这个过程不断迭代,直到达到某个停止条件(如达到预设的迭代次数、损失值的变化小于某个阈值等)

梯度下降法的基本思想可以通过下山的过程来形象地类比,以下是详细的类比过程:

  1. 山顶与山谷

    在这个类比中,山的高度代表损失函数的值,山顶(最高点)代表高损失,而山谷(最低点)代表低损失。我们的目标是找到山谷的位置,也就是损失函数的最小值。
  2. 登山者的位置

    登山者(优化算法)开始时站在山的某个位置(初始参数)。这个位置可能是山顶,也可能是山谷,还可能是山腰。
  3. 寻找下山方向

    登山者想要下到山谷,他会观察周围,找到最陡峭的下山路径。在梯度下降法中,这相当于计算损失函数相对于参数的梯度。梯度指向损失增加最快的方向,因此它的反方向就是最陡的下山方向。
  4. 下山步伐

    登山者决定下山的步伐大小(学习率)。步伐太小,下山过程会很慢;步伐太大,可能会越过山谷,甚至滑倒或跳跃到另一个山坡上。
  5. 迭代移动

    登山者沿着最陡的下山方向迈出一步。在梯度下降中,这意味着按照梯度的反方向更新参数。每次迭代后,都希望损失函数的值有所下降。
  6. 避免局部最小值

    山上可能有多个山谷,有些山谷可能只是局部最低点,而不是我们想要找的全局最低点。在优化中,这对应于局部最小值。选择适当的学习率和算法可以帮助避免陷入局部最小值。
  7. 收敛

    如果登山者成功,他会到达一个山谷,并且发现四周没有更陡的下山路径。在梯度下降法中,这意味着梯度接近于零,算法找到了损失函数的一个最小值。
  8. 可能的挑战

    • 如果山势太过陡峭或者有悬崖,登山者可能会遇到危险。在优化中,这可能对应于梯度爆炸或者梯度消失的问题。
    • 如果山区被雾气笼罩,登山者可能看不清下山的方向。在优化中,这可能对应于梯度非常小,导致难以确定下一步的移动方向。

可以理解梯度下降法的基本过程(如何通过迭代过程来最小化损失函数)为:

从一个随机点开始,通过不断迭代,逐步逼近最优解(每一步都是朝着减少损失的方向前进)直到找到一个最小值为止。

梯度下降法的基本思想可以用数学公式表示为:  

θ₁=θ₀−αΔJ(θ)
其中,θ表示需要优化的参数(权重和偏置),J(θ)是损失函数,α是学习率,控制每一步更新的步长。这个公式表明,每一次迭代,参数都会根据损失函数在当前位置的梯度进行调整,逐步向最小值靠近。

此公式的意义是: J(θ)是关于  θ的一个函数,我们当前所处的位置为θ₀点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是 α,走完这个段步长,就到达了θ₁这个点!

具体解释一下,  α在梯度下降算法中被称作为学习率或者步长, 意味着我们可以通过 α来控制每一步走的距离, 以保证不要步子跨的太大,其实就是不要走太快, 错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下.所以 α的选择在梯度下降法中往往是很重要的!α设置的过小时,收敛过程将变得十分缓慢。而当学习率 设置的过大时,梯度可能会在最小值附近来回震荡,甚至可能无法收敛。

五、BP神经网络的训练过程

简单来说神经网络的训练过程可分为两个阶段:

  1. 通过前向传播算法计算得到预测值,将预测值和真实值作对比,得出两者之间的差距(损失函数)。
  2. 通过反向传播算法计算损失函数对每一个参数的梯度,再根据梯度和学习率使用梯度下降算法更新每一个参数。

1、前向传播

输入数据从输入层经过隐含层传递到输出层,每一层的输出都是下一层的输入。

具体来说,输入层的信号经过加权和运算后传递给隐藏层,隐藏层的神经元接收来自前一层的信号,经过激活函数处理后再传递给下一层,直到最终到达输出层。每一层的输出都是下一层输入的来源。

在前向传播过程中,神经元的输出计算方式通常为:

其中,yi​表示当前神经元的输出,f(⋅)为激活函数,wij​为从神经元j到神经元i的连接权重,xj​为前一层的输入(或神经元j的输出),bi​为神经元i的偏置项。

2、损失计算

计算输出层的结果与真实值之间的差异,通常使用均方误差或其他损失函数来衡量。

损失值衡量了网络预测的准确性。

3、反向传播

根据损失函数,计算损失对每个权值和阈值的梯度,然后更新这些参数以减少损失。

反向传播是误差从输出层向输入层反向传播的过程,用于调整网络中的连接权重和偏置项,以减小网络输出与期望输出之间的误差。

首先,计算网络输出与期望输出之间的误差,常用的误差函数为均方误差(Mean Squared Error, MSE):

其中,dk为期望输出,ok为实际输出。

然后,利用链式法则计算误差关于各层权重的梯度,即误差信号在各层之间的反向传播。梯度表示了权重变化对误差减少的影响程度,通过梯度下降法更新权重,使误差逐步减小。

权重更新公式为:

其中,η为学习率,决定了权重更新的步长。

4、迭代优化

重复前向传播和反向传播的过程,直到网络的性能达到满意的水平或达到预定的迭代次数。

六、建立一个BP神经网络步骤

  1. 定义输入和输出:明确你输入的特征/数据是什么,输出是你希望神经网络预测/分类的目标。
  2. 设计网络结构:确定输入层的节点数量(与输入特征数相同)、输出层的节点数量(与输出维度相同),以及中间的隐藏层的数量和节点数量。层数的增加只可能是隐含层的增加。
  3. 初始化权值和阈值:这两个值一般会被初始化为随机值
  4. 前向传播(Forward Propagation):数据从输入层传到输出层,每个神经元中,输入值乘以权重加上阈值,通过激活函数计算神经元的输出。直到累计产生最终预测结果。
  5. 计算损失(Loss):损失函数用于衡量神经网络的预测输出与实际输出之间的误差。常见的损失函数包括包括均方误差和交叉熵损失等。目标是通过训练来最小化损失,使得神经网络的输出尽可能接近真实值。
  6. 反向传播(Back Propagation):反向传播是训练神经网络的核心步骤,通过比较预测输出和实际输出,计算损失函数对权值和阈值的梯度,然后,使用优化算法(如梯度下降法)来根据这些梯度逐渐调整权值和阈值,使损失函数减小。
  7. 重复训练
  8. 验证测试
  9. 模型应用

七、BP算法概述

BP算法,全称为Back Propagation,即误差反向传播算法,是一种用于训练多层前馈神经网络的学习算法。它的基本思想是通过计算预测值与实际值之间的误差,并将这个误差反向传播到网络的各个层级,通过调整神经元之间的连接权值和阈值,使得网络的预测误差最小化。这种通过反向传播误差来调整网络参数的方法,是BP算法的核心。

  BP算法的思想就是:通过梯度下降来搜索可能的值的假设空间,以找到最佳的拟合样本的权值。具体而言,即利用损失函数,每次向损失函数负梯度方向移动,直到损失函数取得最小值。也可以这么理解,反向传播算法,是根据损失函数,求出损失函数关于每一层的权值及偏置项的偏导数,也称为梯度,用该值更新初始的权值和偏置项,一直更新到损失函数取得最小值或是设置的迭代次数完成为止。以此来计算神经网络中的最佳的参数。

八、BP算法手写推导

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

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

相关文章

【高级数据结构】树状数组

一、树状数组的介绍 1.思维导引 树状数组 ( B i n a r y I n d e x e d T r e e , B I T ) (Binary Indexed Tree,BIT) (BinaryIndexedTree,BIT)是利用数的二进制特征进行检索的一种树状的结构。 如何利用二分的思想高效地求前缀和? 如图 4.7 4.7 4.7所示, 以 A A A [ a …

C++初阶学习——探索STL奥秘——模拟实现list类

1、基本框架 list 由三个类构建而成: 节点类:每个节点必须的三部分(指向前一个节点的指针、指向后一个节点的指针、当前节点存储的数据) 迭代器类:此时的迭代器为双向迭代器,比较特殊,需要对其进行封装,如 it并非使迭代器单纯向后移动&…

BLE 设备丢包理解

前言 个人邮箱:zhangyixu02gmail.com在学习 BLE 过程中,总能听到 “丢包” 一词,但是我查阅资料又发现,有大佬说,ATT所有命令都是“必达”的,不存在所谓的“丢包”。而且我发现,在宣传 BLE 产品…

【如何在 Windows 10 主机上通过 VMware 安装 Windows 11 虚拟机,并共享主机网络】

环境说明 主机操作系统:Windows 10虚拟机操作系统:Windows 11虚拟机软件:VMware 步骤一:确保主机(Windows 10)网络连接正常 启动网络加速软件:在主机上启动软件,确保主机可以正常访…

分布式锁优化之 防死锁 及 过期时间的原子性保证(优化之设置锁的过期时间)

文章目录 1、AlbumInfoApiController --》testLock()2、AlbumInfoServiceImpl --》testLock()3、问题:可能会释放其他服务器的锁。 在Redis中设置一个名为lock的键,值为111,并且只有在该键不存在时才设置(即获取锁)。同…

Mistral AI 又又又开源了闭源企业级模型——Mistral-Small-Instruct-2409

就在不久前,Mistral 公司在开源了 Pixtral 12B 视觉多模态大模型之后,又开源了自家的企业级小型模型 Mistral-Small-Instruct-2409 (22B),这是 Mistral AI 最新的企业级小型模型,是 Mistral Small v24.02 的…

【路径规划】自动泊车的 Simulink 模型

摘要 本文介绍了一个用于自主机器人路径规划和导航的 Simulink 模型,该模型结合了路径跟踪算法(如 Pure Pursuit)和动态机器人模型,实现了复杂环境中的路径跟随和导航控制。实验结果表明,模型能够在给定路径上精确控制…

QT快速安装使用指南

在Ubuntu 16.04上安装Qt可以通过多种方式进行。以下是使用Qt在线安装程序和apt包管理器的两种常见方法: 方法一:使用Qt在线安装程序 下载Qt在线安装程序 访问Qt官方网站:Try Qt | Develop Applications and Embedded Systems | Qt找到并下载…

初识ZYNQ——FPGA学习笔记15

一、ZYNQ简介 ZYNQ:Zynq-7000 All Programmable SoC(APSoC),赛灵思公司(AMD Xilinx)推出的新一代全可编程片上系统 PS:Processing System,处理系统 PL:Program Logic&…

Linux:路径末尾加/和不加/的区别

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 普通文件操作 首先说明这个问题只会出现在目录和符号链接中,因为如果想要索引普通文件但却在路径末尾加/则会出现错误,如例1所示。 # 例1 zhang…

Zotero(7.0.5)+123云盘同步空间+Z-library=无限存储文献pdf/epub电子书等资料

选择123云盘作为存储介质的原因 原因1: zotero个人免费空间大小:300M,如果zotero云端也保存文献pdf资料则远远不够 原因2: 百度网盘同步文件空间大小:1G123云盘同步文件空间大小:10G 第一台电脑实施步骤…

Hadoop的一些高频面试题 --- hdfs、mapreduce以及yarn的面试题

文章目录 一、HDFS1、Hadoop的三大组成部分2、本地模式和伪分布模式的区别是什么3、什么是HDFS4、如何单独启动namenode5、hdfs的写入流程6、hdfs的读取流程7、hdfs为什么不能存储小文件8、secondaryNameNode的运行原理9、hadoop集群启动后离开安全模式的条件10、hdfs集群的开机…

如何导入一个Vue并成功运行

注意1:要确保自己已经成功创建了一个Vue项目,创建项目教程在如何创建Vue项目 注意2:以下操作均在VS Code,教程在VS Code安装教程 一、Vue项目导入VS Code 1.点击文件,然后点击将文件添加到工作区 2. 选择自己的vue项…

有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳

有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳 时代背景女生有点作怎么办?大商家族的爱情观 时代背景 一块钱的东西,赋予俩块钱的意义,三块钱卖出去。 用商…

企业急于采用人工智能,忽视了安全强化

对主要云提供商基础设施上托管的资产的安全分析显示,许多公司为了急于构建和部署 AI 应用程序而打开安全漏洞。常见的发现包括对 AI 相关服务使用默认且可能不安全的设置、部署易受攻击的 AI 软件包以及不遵循安全强化指南。 这项分析由 Orca Security 的研究人员进…

Python爬虫使用实例-umei

优美图库 www.umei.cc BV1Ag41137re 1/获取资源 查看网站资源结构 多页,每个item只有一张图 多页,每个item都是一个图集 最大页码 内外层图集均有若干page。 通过尾页按钮确定pageNum: 2/发送请求 response requests.get(urlurl, header…

蓝桥杯【物联网】零基础到国奖之路:十. OLED

蓝桥杯【物联网】零基础到国奖之路:十.OLED 第一节 硬件解读第二节 MDK配置 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fa7660b81be9407aa19c603561553db0.png)第三节 代码 第一节 硬件解读 OLED硬件知识: 第二节 MDK配置 第三节 代码 include头文件。 编…

Vue3 中组件传递 + css 变量的组合

文章目录 需求效果如下图所示代码逻辑代码参考 需求 开发一个箭头组件&#xff0c;根据父组件传递的 props 来修改 css 的颜色 效果如下图所示 代码逻辑 代码 父组件&#xff1a; <Arrow color"red" />子组件&#xff1a; <template><div class&…

VM-Ubantu中使用vscode头文件报错——解决办法

问题 系统中头文件明明存在但是却报错 解决方法 在报错的文件中点击&#xff0c;shift ctrl p选择Edit Configurations(JSON) 修改文件内容 原文件内容 修改之后的内容 {"configurations": [{"name": "Linux","includePath":…

https加密原理

以为http的数据都是以明文传送&#xff0c;会有很大的安全问题&#xff0c;所以出现的https协议。https就是在http协议的基础上增加了一个安全层&#xff0c;可以对数据进行加密和解密(例如SSL、TLS等)。 https加密解密的原理&#xff1a;证书非对称加密对称加密 在讲解原理前…