BP原理 - 前向计算与反向传播实例

Outline

前向计算

反向传播

 

很多事情不是需要聪明一点,而是需要耐心一点,踏下心来认真看真的很简单的。

 

假设有这样一个网络层:

第一层是输入层,包含两个神经元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求偏导求出:(链式法则)

如图所示:

现在分别计算每个式子的值:  loss--Sigmoid--weight

计算

 

计算下一步之前,先来看一下Sigmoid函数求导:

根据倒数法则从f(x)开始推导得出:

有以上两个式子可推出:

 

计算

 

计算

最后三者相乘:

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

 

综合以上四步计算过程可得:

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

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

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

 

最后,更新w5的值,是学习速率,这里设为0.5:

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

 

3. 隐含层—>输入层的权值更新

上一部分传播过程为: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])。

 

转载于:https://www.cnblogs.com/shona/p/10938533.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值