文章目录

  • 前言:
  • 一、BP 神经网络概述
  • 二、神经网络的前馈过程
  • 三、逆向误差传播 (BP过程)
  • 四、模型的损失函数
  • 五、基于梯度下降的逆向传播过程 (关于损失函数的逆向求导)
  • 六、举例子直观了解BackPropagation
  • 七、BP反向传播的详细推导

前言:

上一篇博客,从感知机到人工神经网络大体的概括了人工神经网络,本篇博客旨在介绍BP神经网络,网上关于BP神经网络的相关知识以及数不胜数,本文在别人博客的基础上整理的知识点,便于自己理解,以后复习也可以常看看。

我们要训练多层网络的时候,最后关键的部分就是求梯度啦。纯数学方法几乎是不可能的,那么反向传播算法就是用来求梯度的,用了一个很巧妙的方法。

反向传播算法应该是神经网络最基本最需要弄懂的方法了,要是反向传播方法不懂,后面基本上进行不下去。

非常推荐的是How the backpropagation algorithm works

首先,需要记住两点:

  • 1.反向传播算法告诉我们当我们改变权值(weights)和偏置(biases)的时候,损失函数改变的速度。
  • 2.反向传播也告诉我们如何改变权值和偏置以改变神经网络的整体表现。

一、BP 神经网络概述

​BP 神经网络是一类基于误差逆向传播 (BackPropagation, 简称 BP) 算法的多层前馈神经网络,BP算法是迄今最成功的神经网络学习算法。现实任务中使用神经网络时,大多是在使用 BP 算法进行训练。值得指出的是,BP算法不仅可用于多层前馈神经网络,还可以用于其他类型的神经网络,例如训练递归神经网络。但我们通常说 “BP 网络” 时,一般是指用 BP 算法训练的多层前馈神经网络。

二、神经网络的前馈过程

假设我们构造一个经典的神经网络,如下图,该网络可接收输入数据xxx,包含两个属性 x1,x2x_1,x_2x1​,x2​,包含一个隐含层,隐含层的每个神经元首先通过 w[1]w^{[1]}w[1]和 b1b_1b1​(b 为偏置项) 将输入参数进行线性组合得到 z[1]z^{[1]}z[1],然后将z[1]z^{[1]}z[1] 带入激活函数 (activation function) σ(z)σ(z)σ(z) ,得到隐含层的一组输出a[1]a^{[1]}a[1] 。接下来,将这组 a[1]a^{[1]}a[1] 通过 w[2]w^{[2]}w[2]和 b2b_2b2​ 进行第二次线性组合,得到 z[1]z^{[1]}z[1] ,再带入激活函数 σ(z)σ(z)σ(z) ,得到最终的输出值a[2]a^{[2]}a[2] ,该值即为学习器 (广义上看,神经网络属于学习器的一种类型) 的推测结果 yhaty^{hat}yhat。

上述过程,即为该神经网络的前馈 (forward propagation) 过程,前馈过程也非常容易理解,符合人正常的逻辑,具体的矩阵计算表达如下:

三、逆向误差传播 (BP过程)

四、模型的损失函数

为了达到这个目标,这也就转换为了一个优化过程,对于任何优化问题,总是会有一个目标函数 (objective function),在机器学习的问题中,通常我们称此类函数为:损失函数 (loss function),具体来说,损失函数表达了推测值与真实值之间的误差。抽象来看,如果把模型的推测以函数形式表达为 (这里的函数字母使用 h 是源于“假设 hypothesis“ 这一单词),对于有个 mmm 训练样本的输入数据而言,其损失函数则可表达为:

​那么在该问题中的损失函数是什么样的呢?抛开线性组合函数,我们先着眼于最终的激活函数,也就是a[2]a^{[2]}a[2]的值,由于 sigmoid 函数具有很好的函数性质,其值域介于 0 到 1 之间,当自变量很大时,趋向于 1,很小时趋向于 0,因此,该模型的损失函数可以定义如下:

不难发现,由于是分类问题,真实值只有取 0 或 1 两种情况,当真实值为 1 时,输出值aaa越接近 1,则 loss 越小;当真实值为 0 时,输出值越接近于 0,则 损失函数越小 (可自己手画一下 −ln(x)-ln(x)−ln(x)函数的曲线)。因此,可将该分段函数整合为如下函数,也就是得到我们的交叉熵损失函数,对于这个概念不太了解的,可以查看交叉熵的理解:

该函数与上述分段函数等价。如果你了解 Logistic Regression 模型 的基本原理,那么损失函数这一部分与其完全是一致的,现在,我们已经确定了模型的损失函数关于输出量 [公式] 的函数形式,接下来的问题自然就是:如何根据该损失函数来优化模型的参数。

五、基于梯度下降的逆向传播过程 (关于损失函数的逆向求导)

这里需要一些先修知识,主要是需要懂得 梯度下降 (gradient descent) 这一优化算法的原理,由于如果将神经网络的损失函数完全展开将会极为繁琐,这里我们先根据上面得到的关于输出量a 的损失函数来进行一步步的推导。




至此,我们已经完成了整个逆向传播 BP 的过程。

六、举例子直观了解BackPropagation

定义两层的神经网络,输入层(0层),隐藏层(1层),输出层(2层)。此处省略每个结点的偏置(有偏置的原理一样),激活函数为sigmoid函数(不同激活函数,求导不同)。
对应网络如下:


对应矩阵如下:

首先正向传播

则:

同理可得:

最终的损失为:

我们最终也就是希望损失越小越好,这就是我们为什要进行训练,调节参数,使损失最小,这就用到了我们的反向传播算法,实际上反向传播就是梯度下降算法中链式法则的使用。

下面我们看如何反向传播

根据公式,我们有:

这个时候我们需要求出C对w的骗到,则根据链式法则有:

同理有:

到此我们已经算出了最后一层的参数偏导了,我们继续往前面链式推导:
我们现在还需要求

下面给出一个推导,其他全都类似:

同理可得其他几个式子:
则最终的结果为

在按照这个权重参数进行一遍正向传播得出来的Error为0.165

而这个值比原来的0.19要小,则继续迭代,不断修正权值,使得代价函数越来越小,预测值不断逼近0.5。我迭代了100次的结果,Error为5.92944818e-07(已经很小了,说明预测值与真实值非常接近了),最后的权值为:

BP过程差不多就是这样了。

七、BP反向传播的详细推导

请查看我的下一篇博客BP反向传播的详细推导

参考:

[1] https://www.zhihu.com/question/27239198/answer/140093887

[2] https://www.zhihu.com/question/27239198/answer/140093887

[3] https://blog.csdn.net/u014303046/article/details/78200010

BP神经网络的初步介绍相关推荐

  1. BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)

    BP神经网络原理简单介绍以及公式推导 标签(空格分隔): 神经网络 \def\net(#1){net^{(#1)}} \def\Y(#1){Y^{(#1)}} \def\part(#1){\parti ...

  2. MATLAB神经网络——BP神经网络训练过程介绍(newff)

    1.newff网络的详细解释 设置前馈长度 ff_zeros=zeros(1,ff_TDL); 设置神经网络输入数据,此处input表示输入数据 training_input=input_ANN([f ...

  3. BP神经网络公式推导及实现(MNIST)

    BP神经网络的基础介绍见:http://blog.csdn.net/fengbingchun/article/details/50274471,这里主要以公式推导为主. BP神经网络又称为误差反向传播 ...

  4. MATLAB中BP神经网络用于回归拟合算法实现(另附GRNN代码)

    BP神经网络:是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络.神经网络是把生活中的常见情节推 ...

  5. BP神经网络的MATLAB实现

    算法流程 关于BP神经网络的公式推导,上一篇博文<BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式) >已经做了详细的说明.接下来,我们利用MATLAB对BP神经网络进行实现.我们 ...

  6. BP神经网络——matlab具体解决实际问题

    MATLAB中BP神经网络的重要函数和基本功能 这里是BP神经网络的具体介绍,以及博主自编写的神经网络算法 newff() 功能:建立一个前向BP网络 格式:net = newff(PR,[S1,S2 ...

  7. BP神经网络在期货价格预测中的应用

    摘 要 BP网络通过对以往历史数据的学习,找出期货市场发展的内在规律,并将其存储在网络具体的权值.阀值中,用以预测未来的走势.文章在深入分析期货市场预测面临的关键问题的基础上,探讨利用BP(Back ...

  8. bp神经网络_BP神经网络的原理介绍

    神经网络是深度学习的基础,在机器学习和深度学习中应用比较广泛,如函数逼近,模式识别,分类模型,图像分类.基于深度学习的CTR预估,数据压缩,数据挖掘等都离不开神经网络.下面主要介绍BP神经网络的原理. ...

  9. 风机桨叶故障诊断(三) 识别桨叶——初步构建BP神经网络

    风机桨叶故障诊断(三)  识别桨叶--初步构建BP神经网络 新的一天,希望有好的运气.今天开始着手系统的第一个模块,从一幅图像中寻找到桨叶所在的位置.第一直觉我们的识别任务属于难度比较大,干扰因素多的 ...

最新文章

  1. 【图像分割模型】全局特征与局部特征的交响曲—ParseNet
  2. java远程监控服务器配置_JAVA VirtualVM远程监控配置
  3. python list增删改查_Python 基础list 增删改查 解析
  4. echarts 动态设置标题_echart动态生成标题
  5. 特朗普社交应用登苹果App Store下载量榜首
  6. SpringMVC框架----SpringMVC入门程序中的组件介绍
  7. OpenTSDB安装
  8. java stax_浅谈stax
  9. android手机网络Ping测试
  10. 安装axure插件以便打开原型文件
  11. 视频教程-QQ机器人--基于酷Q开发7精讲-C/C++
  12. Linux——缺少ld-linux.so.2,lbiz.so.1库文件
  13. <C++>文件操作基础详解,快来写出你的第一个文件吧
  14. 06CookieSession-12. HttpSession的钝化和活化
  15. 欧冠 欧洲杯免费直播平台
  16. 测试分析报告(GB8567——88)基于协同的在线表格forture-sheet
  17. linux中 likely与unlikely
  18. VR失重太空舱游乐设备|航空航天VR体验|VR航天航空体验馆
  19. 腾讯云cos html,腾讯云对象存储(COS)插件安装设置图文教程
  20. Excel如何间隔插入空白列

热门文章

  1. LZW压缩算法(数据无损压缩)
  2. 量子计算机 叉院,清华团队首次实现量子GAN 准确率98.8%
  3. Share Your Music - HTML5 Music Web App
  4. python的文件操作:文件定位读写,重命名,删除等操作
  5. OpenCV可以识别文字吗?
  6. java txt文件追加_java如何追加写入txt文件
  7. VS2017编写汇编并调用c库函数(msvcrt.lib)
  8. 记录在APIO2019前
  9. js小学生图区_多种方式实现js图片预览
  10. 表示自己从头开始的句子_从头开始励志的句子