反向传播过程推导例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34886403/article/details/86229974

假如我们有个这样的网络:
在这里插入图片描述
第一层是输入层,包含两个神经元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.88

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

Step 1:前向传播
1.输入层——>隐含层
h 1 = w 1 i 1 + w 2 I 2 + b 1 h1=w_1*i_1+w_2*I_2+b_1
h 1 = 0.15 0.05 + 0.2 0.1 + 0.35 h1=0.15*0.05+0.2*0.1+0.35

神经元h1的激活:(此处用到激活函数为sigmoid)
a c t i v e h 1 = 1 e h 1 = 1 1 + e 0.3775 = 0.59326992 active_{h1}=\frac{1}{e^{-h1}}=\frac{1}{1+e^{-0.3775}}=0.59326992

同理,可计算出 a c t i v e h 2 = 0.596884378 active_{h2}=0.596884378

2.隐藏层——>输出层
计算出o1和o2
o 1 = w 5 h 1 + w 6 h 2 + b 2 o_1=w_5*h_1+w_6*h_2+b_2
o 1 = 0.4 0.59326992 + 0.45 0.596884378 + 0.6 = 1.105905967 o_1=0.4*0.59326992+0.45*0.596884378+0.6=1.105905967
激活后
a c t i v e o 1 = 1 1 + e 1.105905967 = 0.75136507 active_{o1}=\frac{1}{1+e^{-1.105905967}}=0.75136507

同理计算出o2
a c t i v e o 2 = 0.772928465 active_{o2}=0.772928465

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

step 2 反向传播
1.计算总误差
E t o t a l = 1 2 ( t a r g e t o u t p u t ) 2 E_{total}=\sum\frac{1}{2}(target-output)^2
但是有两个输出,所以分别计算o1和o2的误差,总误差为两者之和:
E a c t i v e o 1 = 1 2 ( 0.01 0.75136507 ) 2 E_{active_{o1}}=\frac{1}{2}(0.01-0.75136507)^2 =0.274811083
KaTeX parse error: Expected '}', got 'EOF' at end of input: …2}}=0.023560026
E t a t o l = E a c t i v e o 1 + E a c t i v e o 2 = 0.298371109 E_{tatol}=E_{active_{o1}}+E_{active_{o2}}=0.298371109

2.反向传播
我们使用反向传播的目标是更新网络中的每个权重,使它们使实际输出更接近目标输出,从而最大限度地减少每个输出神经元和整个网络的误差。

考虑一下, 我们想知道 w 5 w_5 的变化对总误差的影响有多大,也就是(也就是 w 5 w_5 的偏导数或者说是梯度)

通过链式求导:
E t a t a l w 5 = E t o t a l a c t i v e o 1 a c t i v e o 1 o 1 o 1 w 5 \frac{\partial E_{tatal}}{\partial w_5}=\frac{\partial E_{total}}{\partial active_{o1}}*\frac{\partial active_{o1}}{\partial o_1}*\frac{\partial o_1}{\partial w_5}


E t o t a l = 1 2 ( t a r g e t o 1 a c t i v e o 1 ) 2 + 1 2 ( t a r g e t o 2 a c t i v e o 2 ) 2 E_{total}=\frac{1}{2}(target_{o1}-active_{o1})^2+\frac{1}{2}(target_{o2}-active_{o2})^2

E t o t a l a c t i v e o 1 = 2 1 2 ( t a r g e t o 1 a c t i v e o 1 ) 1 + 0 \frac{\partial E_{total}}{\partial active_{o1}}=2*\frac{1}{2}(target_{o1}-active_{o1})*-1+0

代入数据得 E t o t a l a c t i v e o 1 = 0.7413650 \frac{\partial E_{total}}{\partial active_{o1}}=0.7413650

接下来是对激活函数求导:
a c t i v e o 1 = 1 1 + e n e t o 1 active_{o1}=\frac{1}{1+e^{-net_{o1}}}

a c t i v e o 1 o 1 = a c t i v e o 1 ( 1 a c t i v e o 1 ) = 0.186815602 \frac{\partial active_{o1}}{\partial o_1}=active_{o1}(1-active_{o1})=0.186815602

然后再看
o 1 = w 5 a c t i v e h 1 + w 6 a c t i v e h 2 + b 2 o_1=w_5*active_{h1}+w_6*active_{h2}+b_2

o 1 w 5 = 1 a c t i v e h 1 w 5 + 0 + 0 = 0.59326992 \frac{\partial o1}{\partial w_5}=1*active_{h1}*w_5+0+0=0.59326992

把上面的组合起来
E t a t a l w 5 = E t o t a l a c t i v e o 1 a c t i v e o 1 o 1 o 1 w 5 = 0.74136507 0.186815602 0.59326992 \frac{\partial E_{tatal}}{\partial w_5}=\frac{\partial E_{total}}{\partial active_{o1}}*\frac{\partial active_{o1}}{\partial o_1}*\frac{\partial o_1}{\partial w_5}=0.74136507*0.186815602*0.59326992

注意,在更新权重是往往加入学习率:
w 5 + = w 5 η E t o t a l w 5 w_5^+=w_5-\eta \frac{\partial E_{total}}{\partial w_5}

猜你喜欢

转载自blog.csdn.net/qq_34886403/article/details/86229974