关闭

深度学习:神经网络中的前向传播和反向传播算法推导

标签: 深度学习神经网络
21699人阅读 评论(8) 收藏 举报
分类:

1. 神经网络

这是一个常见的神经网络的图:

这是一个常见的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层,当我们输入x1,x2,x3等数据时,通过隐含层的计算、转换,输出你的期望,当你的输入和输出是一样的时候,成为自编码模型(Auto-Encoder),而当你输入和输出是不一致的时候,也就是我们常说的人工神经网络。

2.  如何计算传播

首先我们先构建一个简单的网络层作为例子:

在这个网络层中有
  • 第一层输入层:里面包含神经元i1,i2,截距:b1,权重:w1,w2,w3,w4
  • 第二层是隐含层:里面包含h1,h2,截距:b2,权重:w5,w6,w7,w8
  • 第三层是输出层:里面包含o1,o2
我们使用sigmoid作为激活函数

假定我们输入数据i1: 0.02 i2: 0.04 截距b1:0.4 b2:0.7 期望的输出数据o1:0.5  o2:0.9
未知的是权重w1,w2,w3,w4,w5,w6,w7,w8
我们的目的是为了能的到o1:0.5 o2:0.9的期望的值,计算出w1,w2,w3....w8的权重值

先假如构造一个权重w1,w2,w3.....w8的值,通过计算获取到最佳的w1,w2,w3....w8的权重

权重的初使值:
w1=0.25
w2=0.25
w3=0.15
w4=0.20
w5=0.30
w6=0.35
w7=0.40
w8=0.35

2.1 前向传播

2.1.1 输入层到隐含层

NET(h1)=w1*i1+w2*i2+b1=0.25*0.02+0.25*0.04+0.4=0.005+0.01+0.4=0.415

神经元h1到输出h1的激活函数是sigmoid

OUT(h1)=1/(1+e^(-NET(h1)))=1/(1+0.660340281)=0.602286177

同理我们也可以获取OUT(h2)的值
NET(h2)=w3*i1+w4*i2+b1=0.15*0.02+0.20*0.04+0.4=0.003+0.008+0.4=0.411
OUT(h2)=1/(1+e^(-NET(h2)))=1/(1+0.662986932)=0.601327636

2.1.2 从隐含层到输出层

计算输出层的神经元o1, o2的值,计算方法和输出层到隐含层类似
NET(o1)=w5*h1+w6*h2+b2=0.3*0.602286177+0.35*0.601327636+0.7=0.180685853+0.210464672+0.7=1.091150525
OUT(o1)=1/(1+e^(-NET(o1)))=1/(1+0.335829891)=0.748598311

同理
NET(o2)=w7*h1+w8*h2+b2=0.4*0.602286177+0.35*0.601327636+0.7=0.240914471+0.210464672+0.7=1.151379143
OUT(o2)=1/(1+e^(-NET(o2)))=1/1.316200383=0.759762733

o1:0.748598311   o2:0.759762733 距离我们期望的o1:0.5  o2:0.9还是有很大的距离


2.2 计算总误差

公式:

也就是我们需要计算每个期望误差的和
E(total)= E(o0)+E(o1)=(1/2)*(0.748598311-0.5)^2+(1/2)*(0.759762733-0.9)^2=0.01545028+0.009833246=0.025283526

2.3 反向传播

每一个权重对误差的影响,我们可以通过下图更直观的看清楚误差的反向传播

2.3.1 隐含层到输出层的权值更新

隐含层到输出层的权值,在上面的例子里是W5,W6,W7,W8

我们以W6参数为例子,计算W6对整体误差的影响有多大,可以使用整体误差对W6参数求偏导:


很明显并没有W6对Etotal的计算公式,我们只有W6对Net(o1)的计算公式
但根据偏导数的链式法则,我们可以将我们存在的推导公式进行链式乘法

我们来计算每一个公式的偏导:
  • 计算


这是一个复合函数的导数

为两个关于可导函数,则复合函数的导数为:


这里g(x)=target(o1)-out(o1)  g'(x)=-1

=-(0.5-0.748598311)=0.248598311

  • 计算
已知

我们来推导一下
还是复合函数的推导


最后推导的结果:
=0.748598311*(1-0.748598311)=0.251401689*0.748598311=0.18819888

  • 计算

也就是net(o1)'=out(h2)=0.601327636

最后我们的公式
=*out(h2)


=0.248598311*0.18819888*0.601327636=0.028133669

2.3.1.1 跟新W6的权重

W6=W6-x*
其中 x 就是我们常说的学习速率,设置x学习速率为0.1 那么新的w6的权重就是

0.35-0.1*0.028133669=0.347186633

相同的道理,我们也可以计算新的W5,W6,W7,W8的权重

可是如何计算和跟新W1,W2,W3,W4的权重呢?

2.3.2 隐含层的权值跟新

大概的算法还是和前面类似,如下图所展示:



计算公式:

2.3.2.1 计算

对Out(h1)来说Etotal并不依赖于Out(h1)计算,需要将Total分拆成两个Eo1和Eo2来计算
公式如下:

接着推导公式:
  • 计算
  • 同理也可以计算

2.3.2.2 计算



2.3.2.3 计算





最后三者相乘:

2.3.2.4 整体公式

根据前面的公式,我们可以推导出最后的公式




2.3.2.4 跟新W1的权重

和计算W6的权重一样:

设置学习速率,计算的到w1的权重值


3. 计算获取最佳的权重

我们将获取的新的权重不停的迭代,迭代一定的次数后直到接近期望值o1:0.5 o2:0.9后,所的到权重w1...w8,就是所需要的权重。

 

6
0
查看评论

C++从零实现深度神经网络之二——前向传播和反向传播

本文由@星沉阁冰不语出品,转载请注明作者和出处。文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/53674544微博:http://weibo.com/xingchenbing 前一篇博客Net类的设计和神经网络的初始化...
  • xingchenbingbuyu
  • xingchenbingbuyu
  • 2016-12-15 23:55
  • 4490

神经网络中前向传播和反向传播解析

虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解,最近在看去年LeCun和Hinton在Nature上发表的deep learning的review,有两张图分别是讲得网络的前向传播和反向传播,下面记录一下。前向传播 如图所示,这里讲得已经很清楚了,前向传播...
  • lhanchao
  • lhanchao
  • 2016-05-15 21:22
  • 10180

深度学习笔记(二):简单神经网络,后向传播算法及实现

在之前的深度学习笔记(一):logistic分类 中,已经描述了普通logistic回归以及如何将logistic回归用于多类分类。在这一节,我们再进一步,往其中加入隐藏层,构建出最简单的神经网络2.简单神经网络及后向传播算法2.1 大概描述和公式表达神经网络的大概结构如图所示, 从左往...
  • u014595019
  • u014595019
  • 2016-09-16 22:31
  • 6519

深度学习系列(2):前向传播和后向传播算法

深度学习系列(2):前向传播和后向传播算法前言讲真,之前学吴恩达的机器学习课时,还手写实现过后向传播算法,但如今忘得也一干二净。总结两个原因:1. 理解不够透彻。2. 没有从问题的本质抓住后向传播的精髓。今天重温后向传播算法的推导,但重要的是比较前向传播和后向传播的优缺点,以及它们在神经网络中起到了...
  • u014688145
  • u014688145
  • 2017-12-01 23:14
  • 535

深度学习算法实践7---前向神经网络算法原理

在本文中,我们对感知器模型的算法进行了推导,为我们对多层前馈网络(BP)的误差反向传播算法打下基础。
  • Yt7589
  • Yt7589
  • 2016-08-22 18:16
  • 4474

CNN卷积前后向推导

二维卷积定义:f(s,t)=x(u,v)∗y(u,v)=∑m−1i=0∑n−1i=0x(u,v)⋅y(s−u,t−v),m、n为x矩阵的行列数f(s,t) = x(u,v)*y(u,v)=\sum_{i=0}^{m-1}\sum_{i=0}^{n-1} x(u,v) \cdot y(s-u,t-v)...
  • chenhoujiangsir
  • chenhoujiangsir
  • 2016-04-06 18:57
  • 1834

前向传播和反向传播(举例说明)

假设神经网络结构如下图所示:有2个输入单元;隐含层为2个神经元;输出层也是2个神经元,隐含层和输出层各有1个偏置。 为了直观,这里初始化权重和偏置量,得到如下效果: ----前向传播---- 隐含层神经元h1的输入: 代入数据可得: 假设激励函数用l...
  • guoyunfei20
  • guoyunfei20
  • 2017-09-19 16:25
  • 526

反向传播算法(过程及公式推导)

反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。
  • u014313009
  • u014313009
  • 2016-04-01 21:19
  • 58416

对反向传播算法(Back-Propagation)的推导与一点理解

最近在对卷积神经网络(CNN)进行学习的过程中,发现自己之前对反向传播算法的理解不够透彻,所以今天专门写篇博客记录一下反向传播算法的推导过程,算是一份备忘录吧,有需要的朋友也可以看一下这篇文章,写的挺不错的:http://www.cnblogs.com/lancelod/p/4164231.html...
  • qrlhl
  • qrlhl
  • 2016-03-14 13:35
  • 12068

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

 神经网络和反向传播算法推导 1.普通的机器学习模型: 其实,基本上所有的基本机器学习模型都可以概括为以下的特征:根据某个函数,将输入计算并输出。图形化表示为下图: 当我们的g(h)为sigmoid...
  • starzhou
  • starzhou
  • 2016-09-28 09:09
  • 2097
    个人资料
    • 访问:499129次
    • 积分:5442
    • 等级:
    • 排名:第5864名
    • 原创:100篇
    • 转载:3篇
    • 译文:0篇
    • 评论:73条
    最新评论