全球旧事资料 分类
2:2隐含层输出层:
计算输出层神经元o1和o2的值:
这样前向传播的过程就结束了,我们得到输出值为0751360790772928465,与实际值001099相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。Step2反向传播1计算总误差总误差:squareerror但是有两个输出,所以分别计算o1和o2的误差,总误差为两者之和:
2隐含层输出层的权值更新:以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则)
下面的图可以更直观的看清楚误差是怎样反向传播的:
3
f现在我们来分别计算每个式子的值:
计算

计算

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

最后三者相乘:
4
f这样我们就计算出整体误差Etotal对w5的偏导值。回过头来再看看上面的公式,我们发现:
为了表达方便,用来表示输出层的误差:
因此,整体误差Etotal对w5的偏导公式可以写成:如果输出层误差计为负的话,也可以写成:
最后我们来更新w5的值:
(其中,是学习速率,这里我们取05)同理,可更新w6w7w8
3隐含层隐含层的权值更新:方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏
导时,是从outo1
eto1w5但是在隐含层之间的权值更新时,是outh1
5
f
eth1w1而outh1会接受Eo1和Eo2两个地方传来的误差,所以这个地方两个都要计算。
计算

先计算

同理,计算出:
6
f两者相加得到总值:
再计算

再计算

最后,三者相乘:
为了简化公式,用sigmah1表示隐含层单元h1的误差:
最后,更新w1的权值:
7
f同理,额可更新w2w3w4的权值:
这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差Etotal由0298371109下降至0291027924。迭代10000次后,总误差为0000035085,输出为00159121960984065734原输入为001099证明效果还是不错的。
88888888888888888888888888888888888888888888888888888888888888
clearallclcclosealli1005i2010o1001o2099w1015w2020w3025w4030b1035w5040w6045w7050w8055b206
alpha389epoch6000alpha05epoch10000fork1epochforwardhidde
layers
et_h1w1i1w2i2b11out_h111exp
et_h1
et_h2w3i1w4i2b11out_h211exp
et_h2
forwardoutputlayer
et_o1w5out_h1w6out_h2b21
et_o2w7out_h1w8out_h2b21out_o111exp
et_o1out_o211exp
et_o2
costfu
ctio
E_totalkout_o1o12out_o2or
好听全球资料 返回顶部