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

程序流程图

对于一般多层感知器,设有h个隐层,按照前行顺序,各隐层的节点数分别为记为各隐层的输出分别为计为,各层权值矩阵分别记为,则各层的权值调整公式为:

输出层:

                                 

          

第h隐层:

                

;  

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

                                                             

         

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

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

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

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

BP网络的能力:

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

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

(2) 泛化能力

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

(3)容错能力

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

BP算法的局限性

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

根据下式我么可以看到,误差函数可调整参数的个数等于各权值数加上阈值数,即

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

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

(1)存在平坦区

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

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

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

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

2. 输出值始终接近0

3. 输出值始终接近于1

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

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

(2)存在多个极小点

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

(3)梯度消失问题

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

上图对应的神经网络的定义为,且  ,则表达式可为:

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

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

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

  1. 深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) By 李泽南2017年6月26日 15:57 本周一(6 月 19 日)机器之心发表文章《我的深度学习开发环境详解:Te

    深度学习开发环境调查结果公布,你的配置是这样吗?(附新环境配置) 机器之心 2017-06-25 12:27 阅读:108 摘要:参与:李泽南.李亚洲本周一(6月19日)机器之心发表文章<我的深 ...

  2. 从未看过如此详细的深度学习推荐系统应用详解,读它!

    作者丨gongyouliu 编辑丨zandy 来源 | 大数据与人工智能(ID:ai-big-data) [导读]2016年DeepMind开发的AlphaGo在围棋对决中战胜了韩国九段选手李世石,一 ...

  3. 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码

    粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...

  4. 深度学习 --- 随机神经网络详解(玻尔兹曼机学习算法、运行算法)

    BM网络的学习算法 (1)  学习过程 通过有导师学习,BM网络可以对训练集中各模式的概率分布进行模拟,从而实现联想记忆.学习的目的是通过调整网络权值使训练集中的模式在网络状态中以相同的概率再现.学习 ...

  5. 深度学习 --- Hopfield神经网络详解

    前面几节我们详细探讨了BP神经网络,基本上很全面深入的探讨了BP,BP属于前馈式类型,但是和BP同一时期的另外一个神经网络也很重要,那就是Hopfield神经网络,他是反馈式类型.这个网络比BP出现的 ...

  6. 深度学习 --- 玻尔兹曼分布详解

    上一节我们从Hopfield神经网络存在伪吸引子的问题出发,为了解决伪吸引子带来的问题,详细介绍了模拟退火算法,本节也是基础性的讲解,为了解决伪吸引子还需要引入另外一个重要概念即:玻尔兹曼分布.本篇将 ...

  7. 【深度学习】损失函数详解

    损失函数 什么是损失函数? 损失函数的分类 回归损失 L1 Loss L2 Loss Smooth L1 Loss IoU Loss IoU Loss vs Lx Loss GIoU Loss DIo ...

  8. 深度学习生态圈【详解深度学习工具Keras】

    文章目录: 1 CNTK 2 Tensorflow2.1 介绍2.2 安装2.3 简单例子 3 Keras3.1 介绍3.2 安装Keras3.3 使用Keras构建深度学习模型3.4 一个例子 4 ...

  9. 深度学习之优化详解:batch normalization

    摘要: 一项优化神经网络的技术,点进来了解一下? 认识上图这些人吗?这些人把自己叫做"The Myth Busters",为什么?在他们的启发下,我们才会在Paperspace做类 ...

  10. 深度学习基础-损失函数详解

    一,损失函数概述 大多数深度学习算法都会涉及某种形式的优化,所谓优化指的是改变 x x x 以最小化或最大化某个函数 f ( x ) f(x) f(x

最新文章

  1. ACM数学常用知识整理(持续更新ing)
  2. 201671030128+词频统计软件项目报告
  3. 7-28 超市贴花 (5 分)
  4. SpringCloud(三)之Feign实现负载均衡的使用
  5. 某大型银行深化系统之十四:技术架构
  6. 【XSY2774】学习 带花树
  7. Mac OS 下安装wget
  8. Linux服务器配置——安装CentOS以及源配置
  9. 一键切换网卡ip v1.0
  10. 罗技鼠标M330拆解
  11. The eighth of Word-Day
  12. Unity使用BMFont制作字体
  13. 如何下载没有水印的小咖秀和晃咖视频?教你个超级简单的方法
  14. 区块链毕设开题技术路线
  15. 测试前置条件及测试点
  16. python怎么实现打开摄像头_python开启摄像头以及深度学习实现目标检测方法
  17. Linux内核编译的选项 m,编译内核选项!~~
  18. 大型网络游戏服务器要具备什么条件
  19. PowerBI中的函数日期表
  20. 解决Invalid HTTP_HOST header: ‘xxx.xx.xxx.xxx:80‘. You may need to add ‘xxx.xx‘ to ALLOWED_HOSTS问题

热门文章

  1. 网页标题栏logo的实现
  2. bigemap瓦片数据MBTiles存储简介
  3. [附源码]Nodejs计算机毕业设计西安凯特物流订单管理系统Express(程序+LW)
  4. android 百度地图 addoverlay,百度地图 在调用 addOverlay 方法时闪图
  5. android Inflater
  6. MATLAB fmincon函数 进阶资料(磕盐记录)
  7. 2022-2028全球与中国塑料金属化服务市场现状及未来发展趋势
  8. 程序员如何提高打字速度和准确度
  9. 以verilog语言 inout类型赋值 为例深入理解wire线网数据类型
  10. 消息摘要、数字指纹、数字签名、数字时间戳技术