深入浅出BP神经网络算法的原理

2023-11-17

相信每位刚接触神经网络的时候都会先碰到BP算法的问题,如何形象快速地理解BP神经网络就是我们学习的高级乐趣了(画外音:乐趣?你在跟我谈乐趣?)

本篇博文就是要简单粗暴地帮助各位童鞋快速入门采取BP算法的神经网络。

BP神经网络是怎样的一种定义?看这句话:一种按“误差逆传播算法训练”的多层前馈网络。

        BP的思想就是:利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层误差,如此获取所有各层误差估计。这里的误差估计可以理解为某种偏导数,我们就是根据这种偏导数来调整各层的连接权值,再用调整后的连接权值重新计算输出误差。直到输出的误差达到符合的要求或者迭代次数溢出设定值。

说来说去,“误差”这个词说的很多嘛,说明这个算法是不是跟误差有很大的关系?

没错,BP的传播对象就是“误差”,传播目的就是得到所有层的估计误差。

它的学习规则是:使用最速下降法,通过反向传播(就是一层一层往前传)不断调整网络的权值和阈值,最后使全局误差系数最小。

它的学习本质就是:对各连接权值的动态调整。

          

拓扑结构如上图:输入层(input),隐藏层(hide layer),输出层(output)

BP网络的优势就是能学习和储存大量的输入输出的关系,而不用事先指出这种数学关系。那么它是如何学习的?

BP利用处处可导的激活函数来描述该层输入与该层输出的关系,常用S型函数δ来当作激活函数。

              

我们现在开始有监督的BP神经网络学习算法:

1、正向传播得到输出层误差e

=>输入层输入样本=>各隐藏层=>输出层

2、判断是否反向传播

=>若输出层误差与期望不符=>反向传播

3、误差反向传播

=>误差在各层显示=>修正各层单元的权值,直到误差减少到可接受程度

    算法阐述起来比较简单,接下来通过数学公式来认识BP的真实面目。

    假设我们的网络结构是一个含有N个神经元的输入层,含有P个神经元的隐层,含有Q个神经元的输出层。




      这些变量分别如下:


认识好以上变量后,开始计算:

一、用(-1,1)内的随机数初始化误差函数,并设定精度ε,最多迭代次数M

二、随机选取第k个输入样本及对应的期望输出(表示训练的样本共m个,每次样本代入都要反向修正参数。)


重复以下步骤至误差达到要求:

三、计算隐含层各神经元的输入和输出


四、计算误差函数e对输出层各神经元的偏导数,根据输出层期望输出和实际输出以及输出层输入等参数计算。


五、计算误差函数对隐藏层各神经元的偏导数,根据后一层(这里即输出层)的灵敏度(稍后介绍灵敏度)δo(k),后一层连接权值w,以及该层的输入值等参数计算

六、利用第四步中的偏导数来修正输出层连接权值


七、利用第五步中的偏导数来修正隐藏层连接权值


八、计算全局误差(m个样本,q个类别)


比较具体的计算方法介绍好了,接下来用比较简洁的数学公式来大致地概括这个过程,相信看完上述的详细步骤都会有些了解和领悟。

假设我们的神经网络是这样的,此时有两个隐藏层。

我们先来理解灵敏度是什么?

看下面一个公式:


这个公式是误差对b的一个偏导数,这个b是怎么?它是一个基,灵敏度δ就是误差对基的变化率,也就是导数。

因为∂u/∂b=1,所以∂E/∂b=∂E/∂u=δ,也就是说bias基的灵敏度∂E/∂b=δ等于误差E对一个节点全部输入u的导数∂E/∂u

也可以认为这里的灵敏度等于误差E对该层输入的导数,注意了,这里的输入是上图U级别的输入,即已经完成层与层权值计算后的输入。

每一个隐藏层第l层的灵敏度为:

这里的“◦”表示每个元素相乘,不懂的可与上面详细公式对比理解

而输出层的灵敏度计算方法不同,为:


而最后的修正权值为灵敏度乘以该层的输入值,注意了,这里的输入可是未曾乘以权值的输入,即上图的Xi级别。

对于每一个权值(W)ij都有一个特定的学习率ηIj,由算法学习完成。

参考文献1

参考文献2


关于收敛:

收敛和迭代算法有关。
反向传播算法是定义一个误差er(往往是输出结果与预想结果之间的某个范数),然后求出满足误差极小的权向量。如果把误差看成一个连续函数(泛函)的话,求对权向量各分量的偏导为0即可,但是实际上它是离散的,所以我们需要用迭代来求最小梯度。
如果是新定义算法的话理论上的收敛要证明,可以证明它在迭代次数趋近无穷的时候等于某一解,也可以证明它满足李普希兹条件(就是带有完备范数和李普希兹常数的那个),这种情形下我们叫做收敛,要是用已有算法或者干脆就是BP算法的时候不需要你证明。理论上不收敛的情况是这样,当迭代次数趋近无穷的时候,权向量的解不唯一。
实际上的收敛是这样,给定一个最大迭代次数n,一个误差限erl,反向传播算法应该很容易找,我不往上写了,每一步权值修正都会使er减小,直观的看就是权向量的分量沿着梯度减小的方向在前进,虽然理论上样本足够大并且n趋于无穷的时候会收敛,但是实际上有可能出现当迭代到第n次,误差er依然大于误差限erl的情况,也就是说我们没有解出来满足要求的权向量,所以网络训练失败,叫做不收敛。当然,也可以使用梯度限来作为迭代终止的条件,这种情况下不收敛就是梯度在迭代了n次以后没有小于某一值,从而没有求出满足要求的权向量;收敛就是求出了满足梯度限的权向量。
关于迭代的问题:
        并不是输入一个样本就反向迭代一次,而是把P个行本都考虑进去,求出全局误差,然后再反向迭代。

原文地址:http://blog.csdn.net/lzhalan2016/article/details/52332657

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入浅出BP神经网络算法的原理 的相关文章

随机推荐

  • synchronized 怎么使用

    文章目录 前言 通过一系列的例子 了解synchronized 使用 总结 前言 上一篇了解了synchronized 但是呢光懂理论没用 关键是要会用 用demo的形式写一下各种使用场景 这么一来 就会对synchronized的使用更加
  • 遗传算法训练人工神经网络 MATLAB实现

    参考 遗传算法优化BP神经网络 写在前面 为了完成建模课的作业 找了很久才找到可以使用的一个源码和这个很好的博客 在此记录一下 这是一个利用遗传算法实现BP人工神经网络的matlab代码 可用于实现2层 隐藏层数 1 不计输入层 则共2层
  • 用jsp实现登录,登录成功则跳转到登录成功页面,失败则跳转到失败页面

    login jsp
  • 码云实战(二)——新增仓库和删除仓库

    文章目录 前言 一 创建仓库 1 新增仓库 2 填写仓库的相关信息 3 创建效果 二 删除仓库 总结 前言 本系列文章主要记录日常使用中碰到的码云的相关问题 一 创建仓库 1 新增仓库 在gitee网站右上角的 点击 新建仓库 2 填写仓库
  • Python深度学习篇一《什么是深度学习》

    在过去的几年里 人工智能 AI 一直是媒体大肆炒作的热点话题 机器学习 深度学习 和人工智能都出现在不计其数的文章中 而这些文章通常都发表于非技术出版物 我们的未来被描绘成拥有智能聊天机器人 自动驾驶汽车和虚拟助手 这一未来有时被渲染成可怕
  • Linux怎么使用U盘

    方案一 Linux不像Windows一样 接上新硬件后可以自动识别 在Linux下无法自动识别新硬件的 需要手动去识别 USB移动存储设备通常被识别为sda1 具体可以通过fdisk l命令查询 在使用U盘前 我们先要为外挂点新建一个子目录
  • 《动手学深度学习 Pytorch版》 6.5 汇聚层

    import torch from torch import nn from d2l import torch as d2l 6 5 1 最大汇聚和平均汇聚 汇聚层和卷积层类似 区别在于汇聚层不带包含参数 汇聚操作是确定性的 通常计算汇聚窗
  • [Unity踩坑记录] 从屏幕坐标系转换到世界坐标系

    问题描述 调试需要 想从摄像机发出一条射向鼠标指向位置的射线 于是写了如下代码 void Update Vector3 mouseScreenPos Input mousePosition Vector3 mouseWorldPos Cam
  • JS力扣刷题26. 删除有序数组中的重复项

    var removeDuplicates function nums len表示nums修改后得长度 let len nums length for let i 0 i lt len 1 i if nums i nums i 1 for l
  • Android开发精典案例60个

    实例简介 Android开发精典案例60个 文件 url80 ctfile com f 25127180 740794786 4b13cf p 551685 访问密码 551685 核心代码 2 1 Activity生命周期 3 1 But
  • 区块链结合物联网可研究方向

    文献来源 H Dai Z Zheng and Y Zhang Blockchain for Internet of Things A Survey in IEEE Internet of Things Journal vol 6 no 5
  • js怎么实现数组里的数据相加_JS数组求和的常用方法总结【5种方法】

    本文实例总结了JS数组求和的常用方法 分享给大家供大家参考 具体如下 题目描述 计算给定数组 arr 中所有元素的总和 输入描述 数组中的元素均为 Number 类型 输入例子 sum 1 2 3 4 输出例子 10 方法1 不考虑算法复杂
  • Powershell如何查询目录所有文件和文件夹的名称

    Powershell如何查询目录所有文件和文件夹的名称 获取文件名称 修改时间等 Get ChildItem Name设置可仅获取文件名称 Get ChildItem Name 输入 Get ChildItem 如图 输入 Get Chil
  • hdu 1007 Quoit Design

    Quoit Design Time Limit 10000 5000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 10498 Accept
  • MFC 菜单操作

    1 菜单是窗口框架的组成部分 如果我们要导入自定义的菜单 可以通过以下语句实现 在CMainFrame OnCreate的函数中添加如下代码段 SetMenu NULL 将原本的菜单项去除 CMenu menu 新定义一个菜单对象 menu
  • 计算机网络 --- DNS协议

    计算机网络 DNS协议 什么是DNS DNS工作原理 Overview Three Classes of DNS servers 1 Root servers 2 top level domain DNS servers 3 authori
  • Java学习(java基础)-韩顺平老师

    一 简单介绍 1 jdk jre 2 Java代码规范 a 类 方法的注释 要以javadoc的方式来写 author 楠小弟 version 1 0 public class Hello public static void main S
  • JDBC中典型的五种查询方式

    第一种查询方式 返回一个ArrayList集合 集合里面的数据类型只能为Empinfo类类型 public ArrayList
  • YOLOV5代码general.py文件解读

    YOLOV5源码的下载 git clone https github com ultralytics yolov5 git YOLOV5代码general py文件解读 import glob import logging import o
  • 深入浅出BP神经网络算法的原理

    相信每位刚接触神经网络的时候都会先碰到BP算法的问题 如何形象快速地理解BP神经网络就是我们学习的高级乐趣了 画外音 乐趣 你在跟我谈乐趣 本篇博文就是要简单粗暴地帮助各位童鞋快速入门采取BP算法的神经网络 BP神经网络是怎样的一种定义 看