## 反向传播方向更新w和b的值:
反向传播的目的:求损失函数w和b的偏导数,其实也就是求损失函数在w和b方向上的梯度分量,然后用在梯度方向上更新w和b最后是损失函数降到最小。是不是很绕口,你也可以这样理解其实反向传播就是去更新参数的一种方法。二话不说先上例子一看就明白:
> 此例子出自:https://zhuanlan.zhihu.com/p/23270674
> 注意:每一个小圆圈相当于上面图像中的一个灰度值
来简单告诉读者推导过程吧(其实就是链式)!
![](https://box.kancloud.cn/f18fe4a2a283eaa202cc7ded73135f90_323x254.png)
先初始化权重和偏置量,得到如下效果:
![](https://box.kancloud.cn/95e2376d0ed1fe0f494ca05501679f8f_339x253.png)
**因为计算向后传播必须现有向前传播所以我们先来计算向前传播:**
1. 先计算h1 的输入:**net_h1 =w1 \* i1 + w2 \* i2 +b1 * 1**,代入数据可得:net_h1 =0.15\*0.05 +0.2\* 0.1+0.35\* 1=0.3775;
2. 然后利用logistic函数计算得h1 的输出:out_h1=1 / {1+e^-net_h1 } =1/{1+e^-0.3775 }=0.593269992;
3. 用同样的方法得out_h2=0.596884378;
4. 对输出层神经元重复这个过程,使用隐藏层神经元的输出作为输入。这样就能给出o_{1} 的输出:
![](https://box.kancloud.cn/d489c9ee07b9fe972699bf0f8e826c4d_753x246.png)
5. 开始统计所有的误差:
![](https://box.kancloud.cn/109481c1ab6620c8ee57c98d16dfce04_641x315.png)
**计算反向传播**:
1. 输出层 对于w5,想知道其改变对总误差有多少影响,于是得:dEtotal / dw5![](https://box.kancloud.cn/9795f7b91282c25bef27d1756daf22a3_714x458.png)![](https://box.kancloud.cn/aef1b7511f0c18dcaea15bac46c62ac0_733x698.png)![](https://box.kancloud.cn/0b2eba3b231bb887f7c7af2bded98da9_885x419.png)
2. 隐藏层![](https://box.kancloud.cn/e87883cd87adea8480124cc661c3ed4a_835x771.png)![](https://box.kancloud.cn/06b337732a4129ff40a87e158f6bf2f9_868x744.png)![](https://box.kancloud.cn/d90a7242e3cb7bf6ad77c6742dd0a90b_859x770.png)![](https://box.kancloud.cn/6d85d32c3d96841699ad8f3b03165d37_910x585.png)
**最后,更新了所有的权重! 当最初前馈传播时输入为0.05和0.1,网络上的误差是0.298371109。 在第一轮反向传播之后,总误差现在下降到0.291027924。 它可能看起来不太多,但是在重复此过程10,000次之后。例如,错误倾斜到0.000035085。
在这一点上,当前馈输入为0.05和0.1时,两个输出神经元产生0.015912196(相对于目标为0.01)和0.984065734(相对于目标为0.99)。很接近了O(∩_∩)O~~**