一步一步演示神经网络回馈算法过程

原文:A Step by Step Backpropagation Example

声明

最近在复习神经网络方面的知识。
在听这节Andrew NG的机器学习公开课的时候,对于BP神经网络里的错误反向传播的一个公式(类似这样的)不是特别明白。感觉和我之前看的不太一样。就在网上找到了这篇带样例的文章。
为了方便分享这篇文章的实质内容,我并没有逐字逐句地翻译这篇文章,而是按照我觉得更易理解的方式进行的。同时,这里面所包含的一些数学知识在这里也没有详细解释,需要大家自学。

背景

反向传播(回馈,backpropagation)是一种训练神经网络的常见方法。网上有大量的文章尝试解释反向传播的工作原理,但却很少有代入数值来说明的。这篇文章的作者就用了一个具体的例子来解释反向传播。

前言

这个教程中,作者使用了结构如下的神经网络:

它包含有两个输入、两个隐藏、两个输出结点。其中输入层和隐藏层都包含一个偏置结点(b1, b2)。

初始化

初始化包括两个方面,一个是给网络中的权重矩阵初始化赋值;另一方面给一组包含输入输出的训练数据。如下图:

反向传播的目的

反向传播的目的是为了优化网络中的权重,从而将任意的输入映射到相应的输出。

前向传播

  1. 计算h1的输入与权重矩阵的乘积

  2. 将步骤一的结果放入激活函数(sigmoid函数)得到h1的输出
  3. 重复上面的过程,我们得到h2的输出(其输入与权重矩阵乘积的值为:0.3925)
  4. 由h1、h2的输出作为输入,计算出o1、o2的输出。如o1的计算过程如下:



    同理得到o2(其输入与权重矩阵乘积的值为:1.2249214039)

计算总体错误

作者使用了下面的公式(这个也是比较能用的公式)来计算总体错误:


同理:

总体错误为:

反向传播

反向传播的目的是为了更新权重参数,使得下次计算出来的结果更接近训练样本所提供的目标值。

更新w5、w6、w7、w8

下面以总体错误对w5的偏导为例。

计算偏导


通过下面这个图来看上面的公式是怎么来的:

1. 计算总体错误对o1输出的偏导



2. 计算o1输出对o1输入的偏导


3. 计算o1输入对权重w5的偏导


4. 得到总体错误对w5的偏导

扩展

作者在这里提到了计算偏导的另外一种形式,就是Andrew NG在这节公开课里用到的delta rule。其实是同一公式,只不过Andrew没有在视频里推导公式,而是直接用了简化的表达式,然后我就卡在这了。。。

更新权重w5

下面这个公式涉及学习率的概念(可以参考这里)。

同理更新同一层的其它权重


注意,反向传播的过程中,这些权重暂并不更新,整个反向传播过程结束之后才对这个权重更新。

更新w1、w2、w3、w4

下面以w1为例。
注意,更新w1与更新w5有一些差别。

但是,

看下面的图

也就是说,(推广到其它多层网络)随着反向传播的推进,错误传播的网络也在交织进行着。

下面看一下详细过程:


其中等于


代入公式得:

同理可得:

所以,

现在计算
因为

同时


代入公式:


然后就可以更新w1

及w2、w3、w4。

总结一下

如果有一定的高数基础,把上面的公式推导一下,就很容易理解了。有时间可以用python亲自动手实现一下!

展开阅读全文

没有更多推荐了,返回首页