首先什么是人工神经网络?简单来说就是将单个感知器作为一个神经网络节点,然后用此类节点组成一个层次网络结构,我们称此网络即为人工神经网络(本人自己的理解)。当网络的层次大于等于3层(输入层+隐藏层(大于等于1)+输出层)时,我们称之为多层人工神经网络。

1、神经单元的选择

       那么我们应该使用什么样的感知器来作为神经网络节点呢?在上一篇文章我们介绍过感知器算法,但是直接使用的话会存在以下问题:

感知器训练法则中的输出:

bp神经网络激励函数与 bp神经网络公式推导_权值

由于sign函数是非连续函数,这使得它不可微,因而不能使用上面的梯度下降算法来最小化损失函数。

增量法则中的输出为:

bp神经网络激励函数与 bp神经网络公式推导_感知器_02

       每个输出都是输入的线性组合,这样当多个线性单元连接在一起后最终也只能得到输入的线性组合,这和只有一个感知器单元节点没有很大不同。

  为了解决上面存在的问题,一方面,我们不能直接使用线性组合的方式直接输出,需要在输出的时候添加一个处理函数;另一方面,添加的处理函数一定要是可微的,这样我们才能使用梯度下降算法。

(−∞,∞)内的任意数压缩到(0,1)之间,因此这个函数又称为挤压函数。为了将此函数的输入更加规范化,我们在输入的线性组合中添加一个阀值,使得输入的线性组合以0为分界点。

sigmoid函数:

bp神经网络激励函数与 bp神经网络公式推导_神经网络_03

其函数曲线如下图所示:

bp神经网络激励函数与 bp神经网络公式推导_感知器_04

此函数有个重要特性就是他的导数:

bp神经网络激励函数与 bp神经网络公式推导_感知器_05

有了此特性在计算它的梯度下降时就简便了很多。另外还有双曲函数tanh也可以用来替代sigmoid函数,二者的曲线图比较类似:

bp神经网络激励函数与 bp神经网络公式推导_bp神经网络激励函数与_06

2、BP反向传播算法(Back Propagation)

       现在,我们可以用上面介绍的使用sigmoid函数的感知器来搭建一个多层神经网络,为简单起见,此处我们使用三层网络来分析。假设网络拓补下图所示:

bp神经网络激励函数与 bp神经网络公式推导_bp神经网络激励函数与_07

       网络的运行流程为:当输入一个样例后,获得该样例的特征向量,再根据权向量得到感知器的输入值,然后使用sigmoid函数计算出每个感知器的输出,再将此输出作为下一层感知器的输入,依次类推,直到输出层。

  那么如何确定每个感知器的权向量呢?这时我们需要使用反向传播算法来逐步进行优化。在正式介绍反向传播算法之前,我们先继续进行分析。

  在上一篇介绍感知器的文章中,为了得到权向量,我们通过最小化损失函数来不断调整权向量。此方法也适用于此处求解权向量,首先我们需要定义损失函数,由于网络的输出层有多个输出结点,我们需要将输出层每个输出结点的差值平方求和。于是得到每一个训练样例的损失函数为:(前面加个0.5方便后面求导使用)

bp神经网络激励函数与 bp神经网络公式推导_bp神经网络激励函数与_08

       在多层的神经网络中,误差曲面可能有多个局部极小值,这意味着使用梯度下降算法找到的可能是局部极小值,而不是全局最小值。
  现在我们有了损失函数,这时可以根据损失函数来调整输出结点中的输入权向量,这类似感知器中的随机梯度下降算法,然后从后向前逐层调整权重,这就是反向传播算法的思想。

具有两层sigmoid单元的前馈网络的反向传播算法:

  1. 将网络中的所有权值随机初始化。
  2. 对每一个训练样例,执行如下操作:
  • 根据实例的输入,从前向后依次计算,得到输出层每个单元的输出。然后从输出层开始反向计算每一层的每个单元的误差项。
  • 对于输出层的每个单元k,计算它的误差项:

bp神经网络激励函数与 bp神经网络公式推导_神经网络_09

  • 对于网络中每个隐藏单元h,计算它的误差项:

bp神经网络激励函数与 bp神经网络公式推导_神经网络_10

  • 更新每个权值:

bp神经网络激励函数与 bp神经网络公式推导_bp神经网络激励函数与_11

符号说明:

xji:结点i到结点j的输入,wji表示对应的权值。

outputs:表示输出层结点集合。

整个算法与delta法则的随机梯度下降算法类似,算法分析如下:

  1)权值的更新方面,和delta法则类似,主要依靠学习速率,该权值对应的输入,以及单元的误差项。

(t−o)乘以sigmoid函数的导数ok(1−ok),这与delta法则的误差项有所不同,delta法则的误差项为(t-o)。

δk对受隐藏单元h影响的每一个单元的误差δk进行加权求和,每个误差δk权值为wkh, wkh就是隐藏单元h到输出单元k的权值。

3、反向传播算法的推导

  算法的推导过程主要是利用梯度下降算法最小化损失函数的过程,现在损失函数为:

bp神经网络激励函数与 bp神经网络公式推导_机器学习_12

对于网络中的每个权值wji,计算其导数:

bp神经网络激励函数与 bp神经网络公式推导_机器学习_13

3.1 若j是网络的输出层单元

对netj的求导:

bp神经网络激励函数与 bp神经网络公式推导_神经网络_14

其中:

bp神经网络激励函数与 bp神经网络公式推导_机器学习_15

bp神经网络激励函数与 bp神经网络公式推导_权值_16

所以有:

bp神经网络激励函数与 bp神经网络公式推导_机器学习_17

为了使表达式简洁,我们使用:

bp神经网络激励函数与 bp神经网络公式推导_bp神经网络激励函数与_18

权值的改变朝着损失函数的负梯度方向,于是有权值改变量:

bp神经网络激励函数与 bp神经网络公式推导_感知器_19

3.2 若j是网络中的隐藏单元

由于隐藏单元中w的值通过下一层来间接影响输入,故使用逐层剥离的方式来进行求导:

bp神经网络激励函数与 bp神经网络公式推导_感知器_20

因为:

bp神经网络激励函数与 bp神经网络公式推导_权值_21

所以:

bp神经网络激励函数与 bp神经网络公式推导_bp神经网络激励函数与_22

同样,我们使用:

bp神经网络激励函数与 bp神经网络公式推导_感知器_23

所以权值变化量:

bp神经网络激励函数与 bp神经网络公式推导_权值_24

至此,反向传播算法的推导过程就结束了。