前向传播和反向传播(举例说明)

假设神经网络结构如下图所示:有2个输入单元;隐含层为2个神经元;输出层也是2个神经元,隐含层和输出层各有1个偏置。

前向传播和反向传播(举例说明)

为了直观,这里初始化权重和偏置量,得到如下效果:

前向传播和反向传播(举例说明)

----前向传播----

隐含层神经元h1的输入:

前向传播和反向传播(举例说明)

代入数据可得:

前向传播和反向传播(举例说明)

假设激励函数用logistic函数,计算得隐含层神经元h1的输出:

前向传播和反向传播(举例说明)

同样的方法,可以得到隐含层神经元h2的输出为:

前向传播和反向传播(举例说明)

对输出层神经元重复这个过程,使用隐藏层神经元的输出作为输入。这样输出层神经元O1的输出为:

前向传播和反向传播(举例说明)

代入数据:

前向传播和反向传播(举例说明)

输出层神经元O1的输出:

前向传播和反向传播(举例说明)

同样的方法,可以得到输出层神经元O2的输出为:

前向传播和反向传播(举例说明)

----统计误差----

假如误差公式为:

前向传播和反向传播(举例说明)

如上图,O1的原始输出为0.01,而神经网络的输出为0.75136507,则其误差为:

前向传播和反向传播(举例说明)

同理可得,O2的误差为:

前向传播和反向传播(举例说明)

这样,总的误差为:

前向传播和反向传播(举例说明)

----反向传播----

对于w5,想知道其改变对总误差有多少影响,得求偏导:

前向传播和反向传播(举例说明)

根据链式法则:

前向传播和反向传播(举例说明)

在这个过程中,需要弄清楚每一个部分。

首先:

前向传播和反向传播(举例说明)

其次:

前向传播和反向传播(举例说明)

最后:

前向传播和反向传播(举例说明)

把以上三部分相乘,得到:

前向传播和反向传播(举例说明)

根据梯度下降原理,从当前的权重减去这个值(假设学习率为0.5),得:

前向传播和反向传播(举例说明)

同理,可以得到:

前向传播和反向传播(举例说明)

这样,输出层的所以权值就都更新了(先不管偏置),接下来看隐含层

w1求偏导:

前向传播和反向传播(举例说明)

用图表来描述上述链式法则求导的路径:

前向传播和反向传播(举例说明)

接下来,又是一部分一部分的计算:

>>>>>>>> 1

前向传播和反向传播(举例说明)

上式中,第一部分前边已经计算过了:

前向传播和反向传播(举例说明)

第二部分中,因为:

前向传播和反向传播(举例说明)

所以:

前向传播和反向传播(举例说明)

两部分相乘,得:

前向传播和反向传播(举例说明)

>>>>>>>> 2

前向传播和反向传播(举例说明)

>>>>>>>> 3

前向传播和反向传播(举例说明)

前向传播和反向传播(举例说明)

>>>>>>>> 4

前向传播和反向传播(举例说明)

前向传播和反向传播(举例说明)

这样对W1的偏导就出来了:

前向传播和反向传播(举例说明)

更新权值:

前向传播和反向传播(举例说明)

同理得到:

前向传播和反向传播(举例说明)

最后,更新了所有的权重! 当最初前馈传播时输入为0.05和0.1,网络上的误差是0.298371109。 在第一轮反向传播之后,总误差现在下降到0.291027924。 它可能看起来不太多,但是在重复此过程10,000次之后。例如,错误倾斜到0.000035085。

在这一点上,当前馈输入为0.05和0.1时,两个输出神经元产生0.015912196(相对于目标为0.01)和0.984065734(相对于目标为0.99)。