反向传播算法(BP算法)

前言

BP 算法是迄今最成功的神经网络学习算法,现实任务中使用神经网络时,大多是在使用 BP 算法进行训练。BP 算法允许来自代价函数的信息通过网络向后流动,以便计算梯度。

反向传播的四个基本方程及推导

定义

反向传播算法(BP算法)

在接下来的公式中:
wljk 表示从 (l1)th 层的 kth 个神经元到 lth 层的 jth 个神经元的链接上的权重。
alj 表示 lth 层第 jth 个神经元的**值。
blj 表示在 lth 层第 jth 个神经元的偏置。
C 表示代价函数。
L 表示输出层。
有了上面的表示,我们可以将两个相邻层之间的**值通过方程关联起来:

zlj=kwljkal1k+bljalj=σ(zlj)

其中 σ() 为激励函数。
上面两个公式的向量化形式:
zl=wlal1+blal=σ(zl)

关于代价函数的两个假设:
1. 代价函数可以被写成一个在每个训练样本 x 上的代价函数 Cx 的均值 C=1nxCx
2. 代价可以写成神经网络输出的函数 cost C=C(aL)

最后,定义 l 层的第 jth 个神经元上的误差 δlj 为:

δljCzlj

反向传播其实是对权重和偏置变化影响代价函数过程的理解。最终极的含义其实就是计算偏导数 CwljkCblj。为了计算这些值,我们首先引入了一个中间量 lj,这个我们称为在 lth 层第 jth 个神经元上的误差。
反向传播将给出计算误差 δ 的流程,然后将其关联到计算 CwljkCblj 上。

四个方程式

我们先直接给出四个基本方程,然后给出推导的过程。

δL=aCσ(zl)(BP1)δl=((wl+1)Tδl+1)σ(zl)(BP2)Cblj=δlj(BP3)Cwljk=al1kδlj(BP4)

其中, 运算符表示矩阵对应元素相乘。

四个基本方程的推导

BP1:
已知定义 δLj=CzLj,应用链式法则,得:

δLj=CaLjaLjzLj

aLj=σ(zLj) 得:
δLj=CaLjσ(zLj)

这就是 (BP1) 的分量形式。
BP2:
δ=Czlj=kCzl+1kzl+1kzlj=kzl+1kzljδl+1k

因为 (注意wl+1kj表示的意义,k,j 都是表示一层网路的第几个神经元,重要的是符号的位置):
zl+1k=jwl+1kjalj+bl+1k=jwl+1kjσ(zlj)+bl+1k

做微分,得:
zl+1kzlj=wl+1kjσ(zlj)

把他带入上式,得:
δlj=kwl+1kjδl+1kσ(zlj)

这就是(BP2)的分量形式。
BP3:
δlj=Czlj=Cbljbljzlj

zlj=kwljkal1k+blj 得:
bljzlj=1

因此:
Cblj=δlj

BP4:
Cwljk=Czljzljwljk

zlj=kwljkal1k+blj 得:
zljwljk=al1k

因此:
Cwljk=al1kδlj

反向传播算法流程

  1. 输入 x为输入层设置对应的**值 a1
  2. 前向传播:对每个 l=2,3,,L 计算相应的 zl=wlal1+blal=σ(zl)
  3. 输出层误差 δL计算向量 δL=aCσ(zL)
  4. 反向误差传播:对每个 l=L1,L2,,2, 计算 δl=((wl+1)Tδl+1)σ(zl)
  5. 输出:代价函数的梯度由 Cwljk=al1kδljCblj=δlj 得出