深度学习入门之BP神经网络(二)下
时间: 2021-03-26作者:安服优

前言

上一篇文章【深度学习入门之BP神经网络(二)上】中,我们说到了BP神经网络是将信号值作为输入层放入设定好的网络结构中,经隐含层前向传播给输出层,然后根据输出层信号值与想要得到的值之间的误差逆向传播,根据误差值不断修正每一个权重值,直到误差值和实际要求的值的差距达到要求为止。以及单个神经元工作前向传播的两个公式:


开发板


接下来,我们继续推解误差逆向传播的原理及过程。
PS:本篇文章略长,请一定要耐心耐心读完,由于文章过长,所以分为上下两篇,上篇主要是前向传播,下篇是误差的逆向传播。


开发板


误差逆向传播

在上一文的例子中,我们输入了两个参数(输入层神经元IN 1:0.8和IN 2:0.6),而我们希望通过整个网络之后,得到的值是输出层的神经元的值(OUT 1:0.2)。而在上一节第一次传导之后,根据随机的初始权重最后计算得到的是0.432(由于上一章计算错误,最后一个输出层的神经元的值是0.432,不是0.251,在此抱歉,是小编计算不好,罚作业去了)对比目标要得到的输出值0.2,相当于多了0.232,那么我们要根据这个误差对于一路计算来的权重作以更新,更新的具体方法,就是梯度下降。

梯度下降是什么呢?

我们可以把梯度下降想象成一个巨人在山峰上,想从山上下山,沿着下降的方向,如果陡一点的地方,迈相同宽度的步子,那下降的高度就大一点,一边走到下一级台阶一边判断自己是不是在最低的海拔,如果不小心在山下的位置错过了最低的地方,那就往回走一点,直到走到山下。


开发板


那推测的方法是什么呢,通过当前点在整个曲线中的导数。根据高中所学,y=x•x的导数在极小值左边为负,右边为正。

再回看这张图:


开发板


根据得到的输出层的值和目标值的误差来评价模型,这里选用损失函数(Loss)来计算:


开发板


那我们利用这个公式,计算第一次传导后的损失值:


开发板


想让这个值最小,那就相当于无限逼近0.2这个值。上面我们说梯度下降的方式是求导,那么,根据前向传播的公式:


开发板


开发板


开发板


更新隐含层到输出层的权重:


开发板


其中,α指的是学习率,在这里面设定α=1。更新后的权重整合保存一下:


开发板



开发板


开发板


开发板


开发板


同理,我们可以更新隐含层到输出层的权重:


开发板


更新后的权重整合保存一下:


开发板


利用更新后的权重,进行第二次前向传播,得到的输出层值:


开发板


对比第一次前向传播的0.432,一下子减小了很多,如果我们对于这个误差值有精度的要求,可以这样前向传播之后,利用误差值继续反向进行梯度下降,将权重进行不断更新,直到我们达到我们满意的误差精度就可以了,这里面更新多少次要根据实际测试。

下一篇我们将用一个实际的例子看一下BP神经网络的过程和需要注意的一些细节,不要走开呦。

以下特意为大家整理了之前发布的关于『机器学习』的相关文章如下

  关于机器学习的工作原理

  深度学习入门之BP神经网络(一)

  深度学习入门之BP神经网络(二)上