1. BP算法的提出

  BP算法最初是由Paul Werbos在1974其博士论文中首次论证。 David E. Rumelhart 、Geoffrey Hinton、Ronald J. Wlilliams 三人在1986年再次发表在了1986年10月9日的Nature上,(原始论文地址这个要收费,文末有免费的paper地址,整个paper篇幅不长,有兴趣的可以下来读一读。) 目前我们通常说的BP算法多指86年提出的算法。

2. BP算法的理解

BP算法的理解可以拆解成三部分:

  1. 反向传播
  2. 梯度下降
  3. 链式法则

下面我们简单的说下各部分的细节

2.1 反向传播

  何为反向传播?就是使用预测值与实际值的差异来反向更新网络的参数。这里的差异指通过损失函数计算出的bp神经网络 性能 bp神经网络参数有哪些_反向传播,举例,如:bp神经网络 性能 bp神经网络参数有哪些_深度学习_02,这个总体的bp神经网络 性能 bp神经网络参数有哪些_反向传播就是我们要更新参数的依据。

2.2 梯度下降

bp神经网络 性能 bp神经网络参数有哪些_反向传播来更新参数,怎么更新呢?我们先从简单的入手,如下这个网络。(偏置项没有画)


w1
w2
w3
w4
w5
w7
w6
w8

           x1 
         

           h1 
         

           X2 
         

           h2 
         

           O1 
         

           O2


bp神经网络 性能 bp神经网络参数有哪些_深度学习_02
bp神经网络 性能 bp神经网络参数有哪些_反向传播_06
  这里我们把bp神经网络 性能 bp神经网络参数有哪些_反向传播_07bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_08代入bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_09bp神经网络 性能 bp神经网络参数有哪些_自然语言处理_10,再把bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_09bp神经网络 性能 bp神经网络参数有哪些_自然语言处理_10代入bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_13,最后我们会得到一个关于bp神经网络 性能 bp神经网络参数有哪些_深度学习_14的式子bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_15(这个式子太长了,不写了),我们的bp神经网络 性能 bp神经网络参数有哪些_反向传播就是把bp神经网络 性能 bp神经网络参数有哪些_深度学习_14输入到这个式子计算得到的。说了这么多,其实我只是想表达一件事儿,就是神经网络看起来很复杂,但用数学描述后,就是一个很大的复合函数。把输入变量输进来,就能得到bp神经网络 性能 bp神经网络参数有哪些_反向传播(网络的输出当然是bp神经网络 性能 bp神经网络参数有哪些_transformer_19),之后就好办了,更新一个函数的参数我们可以用梯度下降法:
bp神经网络 性能 bp神经网络参数有哪些_深度学习_20

2.3 链式求导

bp神经网络 性能 bp神经网络参数有哪些_深度学习_21,这里我们以更新参数bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_22来举例说明:
我们看看bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_22是从哪里开始影响bp神经网络 性能 bp神经网络参数有哪些_反向传播
bp神经网络 性能 bp神经网络参数有哪些_深度学习_25
  我们定义sigmoid函数为bp神经网络 性能 bp神经网络参数有哪些_深度学习_26 , sigmoid函数内的式子定义为bp神经网络 性能 bp神经网络参数有哪些_transformer_27(偏置项可以理解为bp神经网络 性能 bp神经网络参数有哪些_反向传播_28,bp神经网络 性能 bp神经网络参数有哪些_反向传播_29为参数), 损失函数定义为bp神经网络 性能 bp神经网络参数有哪些_反向传播_30,则:
bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_31

bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_15(这里没有展开,所以看着不长),当然这个式子的输入是bp神经网络 性能 bp神经网络参数有哪些_反向传播_07bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_08。我们计算bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_15关于bp神经网络 性能 bp神经网络参数有哪些_反向传播_29的偏导,这里用到了数学中的链式法则,即:
bp神经网络 性能 bp神经网络参数有哪些_深度学习_37

因为只有bp神经网络 性能 bp神经网络参数有哪些_自然语言处理_38包含bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_22 所以
bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_40
所以bp神经网络 性能 bp神经网络参数有哪些_自然语言处理_41
bp神经网络 性能 bp神经网络参数有哪些_深度学习_42这三个变量在正向传播时已经计算出了,也就是说算到这步,我们就求出bp神经网络 性能 bp神经网络参数有哪些_bp神经网络 性能_43了,然后我们把结果代到bp神经网络 性能 bp神经网络参数有哪些_自然语言处理_44中就可以更新参数了。

3. 再谈反向传播

  现在有很多人一聊起BP算法就提链式法则,忽略了反向传播的基本思想,原因可能是现在的各种神经网络参数更新都使用这种方法,但殊不知,在这个简单的思想提出前,多层感知机的参数学习一直是一个很大的问题。这个思想统治了近35年的神经网络参数更新方式。但有意思的是,前两年,做为这个算法的提出者Hinton大神,亲自提出了要推翻BP算法的想法,用Hinton的说法是(下面不是原话哈,我的理解),BP算法是不符合人脑学习规律的,人脑是从前向后一边接收信息,一边学习的,而不是到最后看到结果了才学习(更新参数),而我们的神经网络其实是模拟人脑结构的(基于神经元),但学习方法确与人脑的不符,之后如果神经网络要有大的发展,必定是舍弃BP算法,寻找到一种从前向后的学习方法。

论文下载点这里