说到神经网络,大家看到这个图应该不陌生:

  这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层,我们现在手里有一堆数据{x1,x2,x3,...,xn},输出也是一堆数据{y1,y2,y3,...,yn},现在要他们在隐含层做某种变换,让你把数据灌进去后得到你期望的输出。如果你希望你的输出和原始输入一样,那么就是最常见的自编码模型(Auto-Encoder)。可能有人会问,为什么要输入输出都一样呢?有什么用啊?其实应用挺广的,在图像识别,文本分类等等都会用到,我会专门再写一篇Auto-Encoder的文章来说明,包括一些变种之类的。如果你的输出和原始输入不一样,那么就是很常见的人工神经网络了,相当于让原始数据通过一个映射来得到我们想要的输出数据,也就是我们今天要讲的话题。

  本文直接举一个例子,带入数值演示反向传播法的过程,公式的推导等到下次写Auto-Encoder的时候再写,其实也很简单,感兴趣的同学可以自己推导下试试:)(注:本文假设你已经懂得基本的神经网络构成,如果完全不懂,可以参考Poll写的笔记:[Mechine Learning & Algorithm] 神经网络基础 )

  假设,你有这样一个网络层:

  第一层是输入层,包含两个神经元i1,i2,和截距项b1;第二层是隐含层,包含两个神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层与层之间连接的权重,激活函数我们默认为sigmoid函数。

  现在对他们赋上初值,如下图:

  其中,输入数据  i1=0.05,i2=0.10;

     输出数据 o1=0.01,o2=0.99;

     初始权重  w1=0.15,w2=0.20,w3=0.25,w4=0.30;

           w5=0.40,w6=0.45,w7=0.50,w8=0.55

  目标:给出输入数据i1,i2(0.05和0.10),使输出尽可能与原始输出o1,o2(0.01和0.99)接近。

  Step 1 前向传播

  1.输入层---->隐含层:

  计算神经元h1的输入加权和:

神经元h1的输出o1:(此处用到激活函数为sigmoid函数):

  同理,可计算出神经元h2的输出o2:

  

  2.隐含层---->输出层:

  计算输出层神经元o1和o2的值:

  

这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。

Step 2 反向传播

1.计算总误差

总误差:(square error)

但是有两个输出,所以分别计算o1和o2的误差,总误差为两者之和:

2.隐含层---->输出层的权值更新:

以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则)

下面的图可以更直观的看清楚误差是怎样反向传播的:

现在我们来分别计算每个式子的值:

计算

计算

(这一步实际上就是对sigmoid函数求导,比较简单,可以自己推导一下)

计算

最后三者相乘:

这样我们就计算出整体误差E(total)对w5的偏导值。

回过头来再看看上面的公式,我们发现:

为了表达方便,用来表示输出层的误差:

因此,整体误差E(total)对w5的偏导公式可以写成:

如果输出层误差计为负的话,也可以写成:

最后我们来更新w5的值:

(其中,是学习速率,这里我们取0.5)

同理,可更新w6,w7,w8:

3.隐含层---->隐含层的权值更新:

 方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

计算

先计算

同理,计算出:

          

两者相加得到总值:

再计算

再计算

最后,三者相乘:

为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

最后,更新w1的权值:

同理,额可更新w2,w3,w4的权值:

  这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99]),证明效果还是不错的。

原文与作者:Charlotte77

http://www.cnblogs.com/charlotte77/p/5629865.html

转载于:https://www.cnblogs.com/gczr/p/7500269.html

实例分解神经网络反向传播算法(转)相关推荐

  1. 【机器学习笔记】神经网络反向传播算法 推导

    神经网络反向传播算法 推导 (一) 概念及基本思想 (二)信息的前向传播 (三)误差反向传播 (1)输出层的权重参数更新 (2)隐藏层的权重参数更新 (3)输出层与隐藏层的偏置参数更新 (4)反向传播 ...

  2. BP神经网络(反向传播算法原理、推导过程、计算步骤)

    BP神经网络 1.反向传播算法的原理 2.反向传播算法参数学习的推导 3.反向传播算法参数更新案例 3.1 反向传播的具体计算步骤 3.1.1 计算输出层的误差 3.1.2 计算隐藏层误差 3.1.3 ...

  3. 吴恩达机器学习:神经网络 | 反向传播算法

    上一周我们学习了 神经网络 | 多分类问题.我们分别使用 逻辑回归 和 神经网络 来解决多分类问题,并了解到在特征数非常多的情况下,神经网络是更为有效的方法.这周的课程会给出训练 神经网络 所使用的 ...

  4. 神经网络-反向传播算法

    一.前言 这是一场以误差(Error)为主导的反向传播(Back Propagation)运动,旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去. 前向传递输入信号直至输出产生 ...

  5. 神经网络反向传播算法原理笔记

    神经网络是一种是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型.该模型以并行分布的处理能力. ...

  6. 反向传播算法的理论基础,神经网络反向传播算法

    1.如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法.其 ...

  7. 神经网络——反向传播算法

    一.多元分类 之前讨论的神经网络都是以二元分类为目的进行介绍的. 当我们有不止两种分类时(也就是y=1,2,3-.y=1,2,3-.y=1,2,3-.),比如以下这种情况,该怎么办?如果我们要训练一个 ...

  8. 神经网络反向传播算法推导

    反向传播是多数神经网络进行参数更新的基本方法,它的本质是巧妙利用了高数中的链式法则,下面对这一方法进行推导: (1)符号说明 :神经元的激活函数 :神经网络的权重向量 :神经网络的偏置向量 :某层的输 ...

  9. 神经网络反向传播算法

    假设 神经网络是3层的. 输入层是D维,也即D个神经单元,中间层(隐藏层)是H(hidden)个神经单元,输出层是C(class)个神经单元,代表的是分类,即输出层中的哪个单元输出的值最大,就归为哪一 ...

最新文章

  1. 区块链,数字资产货币开发
  2. 为你写诗:3 步搭建 Serverless AI 应用
  3. 对话系统(三)- 优化方法
  4. android view stop,android – onDestroyView片段永远不会在onStop之后调用
  5. Nagios监控ActiveMQ插件开发和部署注意事项
  6. 【Kafka】kafka方式消息不丢失的一些参数设置
  7. 社保在广东十三年,在长沙五年,现要退休到哪里办工资多一点?
  8. 相机标定(四)—— 仿射变换和透视变换
  9. linux上设置tomcat下web项目只需要ip地址访问省略端口和项目名称
  10. 访问javaweb服务器sessionid存放问题
  11. Laravel框架和TP框架区别
  12. OgreSDK_Android_v1-9-0RC1 --Android 环境搭建
  13. 新书《算法竞赛》已出版
  14. Undefined function or variable. The first assignment to a local variable determin its class.
  15. win32 API函数大全
  16. 视觉设计师提升自己能力的17条经验(上)
  17. Java 近期新闻:Grail 5.0、Spring、Hibernate、WildFly 及 Kotlin Multik 开发库更新
  18. 百度地图 由起点和终点 获取中间路线的坐标集
  19. javaIO流详解--读取,写入文件的所有类与方法
  20. 图神经网络论文阅读(九) Break the Ceiling: Stronger Multi-scale Deep Graph Convolutional Networks,NeurIPS2019

热门文章

  1. extJS 中 ext.data 介绍
  2. IE下单单只设置背景透明度的解决方案
  3. 十二月无书稿,总个结(2011)
  4. 菜鸟喜欢的C# 入门认识和添加,修改,删除 文件夹 文件 大全(转)
  5. Web前端开发——BAT面试题汇总及答案03
  6. Updatexml函数再mysql中的作用
  7. 完美解决Python与anaconda之间的冲突问题,你值得拥有
  8. 主席树【bzoj3524(p3567)】[POI2014]Couriers
  9. LPTHW 笨办法学python 37章 python关键字/关键词介绍
  10. 用css实现透明度的方法