🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 反向传播方向更新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~~**