深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性)

2023-05-16

上一节我们详细推倒了BP算法的来龙去脉,请把原理一定要搞懂,不懂的请好好理解BP算法详解,我们下面就直接把上一节推导出的权值调整公式拿过来,然后给出程序流程图,该流程图是严格按照上一节的权值更新过程写出的,因此称为标准的BP算法,标准的BP算法中,每输入一个样本,都要回传误差并调整权值,这种对每个样本轮回训练权值的调整方法称为单样本训练,下面先给出权值调整公式,然后给出流程图:

程序流程图

 对于一般多层感知器,设有h个隐层,按照前行顺序,各隐层的节点数分别为记为m_1,m_2,...,m_h,各隐层的输出分别为计为y^1,y^2,...,y^h,各层权值矩阵分别记为w^1,w^2,...,w^h,w^{h+1},则各层的权值调整公式为:

输出层:

                                \Delta w _{jk}^{h+1} = \eta \cdot err_k^{h+1}\cdot y_j^h = \eta \cdot (d_k-o_k)\cdot o_k\cdot (1-o_k)\cdot y_j^h                                 \left ( 27 \right )

                                j=0,1,2,...,m_h;          k = 0,1,2,3,...,l

第h隐层:

                                 \Delta w_{ij}^h =\eta \cdot err_j^h\cdot y_i^{h-1}= \eta \cdot (\sum_{k=1}^{l}\cdot err_k^o\cdot w_{jk}^{h+1})\cdot y_j^h\cdot (1-y_j^h)\cdot y_i^{h-1}                \left ( 28 \right )

                                   i = 0,1,2,3,...,m_{h-1};  j = 1,2,3,...,m_{h}

按照上面的规律,第一层的隐藏层的权值调整为:

                                  \Delta w _{pq}^1 = \eta \delta _q^1x_p = \eta (\sum_{r=1}^{m2}err_r^2w_{qr})y_q^1(1-y_q^1)x_p                                                             \left ( 29 \right )

                                   p = 0,1,2,3,...,n;         j = 1,2,3,...,m_1

在这里在此提醒,不理解的请好好理解,搞明白公式的符号代表什么意义,刚开始确实挺难的,但是一定要这样训练自己,到后面再去看比这里更复杂的公式你才能看出门道,强化学习和自然语言处理的数学公式比这里的复杂多了,所以请大家一定要培养自己阅读数学公式的素养,数学能说明一切。废话不多说,下面给出标准BP算法的流程图:

说明一下,因为是标准的BP流程图,因此属于单样本训练,假设总共有样本个数为P,其中第i个样本为p,训练次数用q表示,训练完成来源是设置的误差阈值和实际误差对比,达到要求时结束。具体过程就不细讲了,如深入理解了更新过程,一看就会明白。

 上面是标准BP的算法流程,权值调整方法是是基于单样本训练的,但是单样本训练遵循的是只顾眼前的这个数据产生的误差进行调节权值调整,这样的后果是当训练数据很多时,计算量就会急剧增加,导致收敛速度过慢。为了改变这些缺点,我们采用另外一种方法就是在所有样本输入以后,计算网络的总误差E_{all}:

然后根据总误差计算各层的误差信号并调整权值,这种累积的误差的批处理方式称为批(batch)训练或者(epoch)训练。由于批训练遵循了以减小全局误差为目标的“集体主义”原则也就是所有的训练样本。在保证总误差向减小方向变化时,即使训练样本很多,训练时的收敛速度也是很快的,具体流程如如下:

 BP网络的能力:

(1)非线性的映射能力。

       该能力主要表现在复杂的权值上,而权值的变化就是BP的学习过程,因此可以存储大量的输入输出模式映射关系   ,而无需给出给出具体的映射方程,现实中我们经常遇到这一类问题就是,有大量的输入输出的数据,去无法得到一个闭合的数学表达式来表达他们,此时BP神经网络就很有用处了,通过大量数据的训练,最后会拟合出数据输入输出的非线性关系,这一类问题有共同的特点:1.无法得到解析解,2.缺乏专家经验 3.能够表示和转化模式识别或非线性问题,对于这样性质的问题,BP具有很大的优势。

(2) 泛化能力         

       BP网络训练过程(学习过程)就是权值调整过程 ,他从数据中提取非线性映射关系存储在权值矩阵中,在其后的工作阶段,当向网络输入训练时未曾见过的非样本数据时,网络也能完成由输入空间到输出空间的正确映射,这种能力称为多层感知器的泛化能力。

(3)容错能力

        BP网络的魅力还在于,允许输入样本中带有较大误差甚至个别错误。因为输入输出是通过大量的权值进行决定的,反映正确规律的知识来自全样本,个别样本的误差对整体影响不大,因此具有很好的容错能力。

BP算法的局限性

       BP网络的误差是各层权值和输入样本对的函数,因此我们可写为如下表达式:

                                                              E = F(X^p,W,V,d^p)

      根据下式我么可以看到,误差函数可调整参数的个数n_w等于各权值数加上阈值数,即n_w = m\times (n+1)+l\times (m+1)

                                                              E= \frac{1}{2}\sum_{k=1}^{l}\left \{ \right.d_k-f[\sum_{j=0}^{m}w_{jk}f(ne)]\left. \right \}^2

                                                                    = \frac{1}{2}\sum_{k=1}^{l}\left \{ \right.d_k-f[\sum_{j=0}^{m}w_{jk}f(\sum_{i=0}^{n}v_{ij}x_i)]\left. \right \}^2 

         所以,误差E是n_w+1维空间的一个形状极为复杂的曲面,该曲面的每个点的高度对应一个误差值,每个点的坐标向量对应着n_w个权值,因此这里的空间称为误差的权空间,如下图所示:

以二维的权值向量为例,我们看看误差权值的特点:

(1)存在平坦区

              从上图我们可以看到,误差曲面有些区域是比较平坦的,在这些区域中,误差的梯度变化很小,即使权值调整很大,误差任然下降很慢,造成这种情况的原因和各节点的净输入有关,

                                                        \frac{\partial E}{\partial x} = -err _k^oy_j

              根据上式,我们知道梯度小意味着err _k^o接近0,而err _k^o的表达式为:

                                         err_k^o= -\frac{\partial E}{\partial o_k}f'(net_k) = (d_k-o_k)o_k(1-o_k)

               从上式可以看出,err _k^o接近0有三种可能情况:

                                      1. 输出值o_k和期望值d_k很接近,也就是说此时,已经达到谷底了。

                                       2. 输出值o_k始终接近0

                                       3. 输出值o_k始终接近于1

我们知道后两种情况误差E可以是任意值,但梯度很小就是上图的平坦区了。然而o_k接近0和1的原因在于Sigmoid转移函数具有饱和性,我们来详细看看Sigmoid函数:

                                                          \large f(x)=\frac{1}{1+e^{-x}}

  从上图我们发现,当输入|x|> 3时就趋近1或者0了,也就是饱和区。因此这就是平坦的原因,在平坦区即使 (d_k-o_k) 很大,但是由于误差梯度小,训练只能以缓慢的速度进行,只要调整方向正确,训练时间足够长,总会到达谷底的,然而这样的做法效率低,下节我们将介绍如何提高训练速度。

(2)存在多个极小点

在权值空间图我们可以看到,存在平坦区,也存在谷底区,但是谷底并不是一个,而是多个,因此这些谷底就是局部最优点,不是全局最优的,如上图w1a、w1b、w1c都是解,但前两个是局部最优解,第三个才是全局最优解,因此梯度下降所有这样的情况,局部最优点当然不是我们想要的,因此怎么解决呢?下一篇将详细解决两个问题,一是训练缓慢,而是如何跳出局部最优点。

(3)梯度消失问题

    梯度消失问题在神经网络层数相对较多的时会遇到,,梯度消失原因是链式求导,导致梯度逐层递减,我们BP第一节推倒公式时就是通过链式求导把各层连接起来的,但是因为激活函数是sigmod函数,取值在1和-1之间,因此每次求导都会比原来小,当层次较多时,就会导致求导结果也就是梯度接近于0。具体如下所示:

        上图对应的神经网络的定义为y_i = sigmod(z_i),且z_i = w_ix_i+b_i  ,则表达式可为:

        又因为sigmod'(x) = x(1-x),因此最大值才为0.25,随着网络的加深,,总体的值越小,因此会发生梯度消失问题,一般解决方法是需要从激活函数或者网络层次着手,如激活函数考虑ReLU函数代替sigmod函数。

与梯度消失相反的现象称为梯度爆炸,即反向传播中,每层都是大于1,导致最后累乘会很大,梯度爆炸容易解决,一般设定阈值就可以解决,但是梯度消失不好解决,在后面的神经网络就是在考虑如何解决梯度消失问题,因此会引出玻尔兹曼机和受限玻尔兹曼机,进而引入深度信念网络,紧接着就是CNN和RNN了,因此后面我们会详细探讨,好,本节到这里结束,下一节我们说说改进的BP网络。     

 

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

深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性) 的相关文章

随机推荐

  • linux cmakelist工程编译,使用CMake构建复杂工程

    0 什么是CMake CMake是一个跨平台的编译 安装 测试以及打包工具 xff1b CMake不直接编译软件 xff0c 而是结合原生构建系统来构建软件 CMake配置文件是CMakeList txt文件 每个源码文件夹下都要有一个 x
  • 仿真——衬底电压的改变对NMOSD的开启电压的影响

    1 搭建电路 xff0c 并测得开启电压 开启电压大约为0 8V 2 在衬底处加上一个0 5V的偏压 xff0c lt 0 测得开启电压下降到0 66V 3 在衬底处加上一个 0 5V的偏压 xff0c gt 0 测得开启电压上升到0 9V
  • 在Airsim环境下实现Kerloud自驾仪硬件在环仿真

    背景 云讷科技致力于向用户提供长期稳定支持的飞行控制器方案 xff0c 并注重提升用户在相关软件社区的使用体验 xff0c 包括人工智能 xff0c ROS和集群等领域 本文用以说明我们设计的Kerloud飞控系列对Airsim仿真库的支持
  • 路由器的作用和特点

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是路由器的作用和特点 一 作用 xff1a 作为网络互联的一种关键设备 xff0c 路由器是伴随着Internet和网络行业发展起来的
  • datax 模板_DataX从Mysql到Mysql

    在某一个阳光明媚的上午 xff0c 万里无云 xff0c 天空一片蔚蓝 我的老大迈着矫健的步伐来到我的工位 xff0c 来 xff0c 过来 xff0c 帮我个忙 我意识到这可能是一个不简单的 交易 老大说 xff1a 我给你一个Navic
  • 串口服务器 linux,基于Linux的串口服务器设计与实现

    随着互联网的迅猛发展 xff0c 在使用计算机进行网络互联的同时 xff0c 各种家电设备 仪器仪表以及工业生产中的数据采集和控制设备也在逐步地走向网络化 xff0c 以便共享网络资源 所以 xff0c 在电子设备日趋网络化的今天 xff0
  • linux模拟http返回值,Linux命令模拟Http的get或post请求

    Http请求指的是客户端向服务器的请求消息 xff0c Http请求主要分为get或post两种 xff0c 在Linux系统下可以用curl和wget命令来模拟Http的请求 get请求 xff1a 1 使用curl命令 xff1a cu
  • Kerloud Uno开源LTS飞控发布

    继2019年云讷科技发布第一款飞控产品Kerloud mini以来 xff0c 我们云讷科技以服务行业客户为宗旨 xff0c 坚持产品创新 xff0c 建立了Kerloud教育机器人产品矩阵 开源飞控作为px4社区的内核 xff0c 在过去
  • host ntrip 千寻rtk_手把手教你怎样使用瑞得R90T RTK连接千寻cors账号

    瑞得RTK是南方测绘旗下的RTK品牌之一 xff0c 不过相比于南方旗下其他品牌的RTK xff0c 瑞得RTK在操作使用方面以及普及度方面相对来说没有那么高 xff0c 因此很多人对于瑞得RTK连接千寻cors账号的操作比较陌生 xff0
  • linux大小端转换程序,linux字节序大小端转化程序

    一 前因 在项目开发遇到一个问题 xff1a 读取flash的所有数据到文件 xff0c 然后用烧录器去烧写到新的flash xff0c 烧录后机子起不来 后面发现是从flash读出的数据需要经过字节序转换之后才能用烧录器烧录 于是 xff
  • idea登录页面ajax验证,IDEA如何实现登录注册页面 IDEA实现登录注册页面代码示例...

    IDEA如何实现登录注册页面 xff1f 本篇文章小编给大家分享一下IDEA实现登录注册页面代码示例 xff0c 文章代码介绍的很详细 xff0c 小编觉得挺不错的 xff0c 现在分享给大家供大家参考 xff0c 有需要的小伙伴们可以来看
  • halcon中相似变换、仿射变换、投影变换的区别以及应用方式和例程

    在机器视觉系统中 xff0c 镜头是重要成像部件之一 xff0c 而基于小孔成像原理的工业镜头往往会产生透视畸变现象 xff0c 如何校正畸变是进行图像分析的前提 xff0c 这其中就会用到投影变换 xff0c 也是几何变换的一种 除此之外
  • CenterNet原理详解

    CenterNet是在2019年论文Objects as points中提出 xff0c 相比yolo xff0c ssd xff0c faster rcnn依靠大量anchor的检测网络 xff0c CenterNet是一种anchor
  • cmake使用教(三)构建动态库、静态库和安装共享库

    前两节简单的介绍了 xff0c cmake的简单使用和install的过程 xff0c 本节将详细介绍构建动态库和静态库 xff0c 以及共享动态库和静态库的过程 文件存放方式 xff1a 创建test根目录 xff0c 然后创建lib和b
  • 语音信号的梅尔频率倒谱系数(MFCC)的原理讲解及python实现

    梅尔倒谱系数 xff08 Mel scale FrequencyCepstral Coefficients xff0c 简称MFCC xff09 依据人的听觉实验结果来分析语音的频谱 xff0c MFCC分析依据的听觉机理有两个 第一梅尔刻
  • VINS-Mono跑Kitti数据集

    参考文章 xff1a VINS Mono KITT00 测试 知乎 如何在kitti raw data上跑起vins mono 知乎 实际上我参考的是LIO SAM里将KITTI转化为bag的方法 Debug https blog csdn
  • c/c++子函数内使用malloc或者new申请一块内存供外部使用

    当指针作为函数的形参时 xff0c 不要用该指针去申请动态内存 网上有下面的例子 xff1a void GetMemory char p int num p 61 char malloc sizeof char num void Test
  • pt文件转onnx确定不同的输入宽高如何转换?

    现实中训练好的模型部署时经常会有这样的需求 xff0c 就是模型的输入需要改变 xff0c 不使用训练时的输入大小 xff0c 如yolo系列的模型训练时一般都是输入的图片是640x640 xff0c 但是部署时我希望输入到模型的分辨率是1
  • 最大类间方差法(大津法OTSU)原理

    算法介绍 最大类间方差法是1979年由日本学者大津提出的 xff0c 是一种自适应阈值确定的方法 xff0c 又叫大津法 xff0c 简称OTSU xff0c 是一种基于全局的二值化算法 xff0c 它是根据图像的灰度特性 将图像分为前景和
  • 深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性)

    上一节我们详细推倒了BP算法的来龙去脉 xff0c 请把原理一定要搞懂 xff0c 不懂的请好好理解BP算法详解 xff0c 我们下面就直接把上一节推导出的权值调整公式拿过来 xff0c 然后给出程序流程图 xff0c 该流程图是严格按照上