1、正向向前传播
第一层为输出层:i1、i2,截距项b1
第二层为隐含层:h1、h2,截距项b2
第三层为输出层:o1、o2
每条线上的wn是曾与层之间的权重,激活函数为sigmoid
以数据推导,赋初值如下
1.1、向前传播
1.输入层->隐含层:
计算神经元h1的输入和加权和:
neth1=w1*i1+w2*i2+b1*1
neth1=0.15*0.05+0.2*0.1+0.35*1=0.3775
neth2=i1*w3+i2*w4+b1*1
neth2=0.05*0.25+0.1*0.3+0.35=0.3925
输出o1使用
outh1=1/1+e(-neth1)=1/1+e(-0.3775)=0.5933269992
outh2=1/1+e(-neth2)=1/1+e(-0.3935)=0.596884378
2.隐含层->输出层:
计算输出层神经元o1和o2的值:
neto1=w5*outh1+w6*outh2+b2*1
neto1=0.4*0.5933269992+0.45*0.596884378+0.6*1=1.105905967
outo1=1/1+e(-neto1)=1/1+e(-1.105905967)=0.75136507
neto2=w7*outh1+w8*outh2+b2*1
out02=0.772928465
1.2反向计算
1.计算总误差
共有两个输出,所以分别计算o1和o2的误差,总误差为两者之和:
Eo1=1/2(targeto1-outo2)^2=0.274811083
Eo2=0.023560026
Etotal=Eo1+Eo2=0.298371109
2.隐含层->输出层的权值更新
以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误w5 求 偏导求出:(链式法则)
计算
Etotal=1/2(taargeto1-outo1)^2+1/2(targeto2-outo2)^2
=2*1/2(targeto1-out01)^2-1*(-1)+0
=-(targeto1-outo1)=-(0.01-0.75136507)=0.74136507
对sigmoid函数对X求导
f(x)=1/+e^(-x)
df(x)/dx=e^-x/(1+e^-x)^2=1/1+e^-x*e^-x/1+e^-x=f(x)(1-f(x))
outo1=1/1+e^neto1
=outo1(1-outo1)=0.75136507(1-0.75136507)=0.186815602
neto1=w5*outh1+w6*outh2+b2*1
0.74136507*0.186815602*0.59326992=0.082167041
这样就计算出整体误差E(total)对w5的偏导值
w5==0.4-0.5*0.082167041=0.35891648
w6=0.408666186
w7=0.511301270
w8=0/561370121
3.隐含层->隐含层的权值更新
在上文计算总误差对w5的偏导时,是从out(o1)-->net(o1)-->w5,但是在隐含层之间的权值更新时,是从out(h1)-->net(h1)--w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差所以这个地方两个都要计算
=0.74136507*0.186815602=0.138498562
neto1=w5*outh1+w6*outh2+b2*1
=w5=0.4
=0.138498562*0.4=0.055399425
同理计算
=-0.019049119
两者相加的
=0.055399425(1-0.59326999)=0.241300709
再计算
neth1=w1*i1+w2*i2+b1*1
=0.05
=0.36350306*0.241300709*0.05=0.000438568
最后更新w1的权值