深度学习之反向传播推导

反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:

  • 将训练集数据输入到ANN的输入层, 经过隐藏层, 最后达到输出层并 输出结果, 这是ANN的前向传播过程;
  • 由于ANN的输出结果与实际结果有误差, 则计算估计值与实际值之间 的误差, 并将该误差从输出层向隐藏层反向传播, 直至传播到输入层;
  • 在反向传播的过程中, 根据误差调整各种参数的值; 不断迭代上述过 程, 直至收敛。

1、变量定义

这里写图片描述
上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:

  • w j k l 表示第 ( l 1 ) 层的第 k 个神经元连接到 l 层的第 j 个神经元的权重;
  • b j l 表示第 l 层的第 j 个神经元的偏置;
  • z j l 表示第 l 层的第 j 个神经元的输入,即: z j l = k w j k l a k l 1 + b j l - a j l 表示第 l 层的第 j 个神经元的输出,即: a j l = σ ( k w j k l a k l 1 + b j l )
  • 其中 σ 表示激活函数

    2、代价函数

    代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):

    C = 1 2 n x | | y ( x ) a L ( x ) | | 2

    其中,x表示输入的样本,y表示实际的分类,a^L表示预测的输出,L表示神经网络的最大层数

3、公式及其推导

首先,将第层第个神经元中产生的错误(即实际值与预测值之间的误差)定义为:

δ C z j l

本文将以一个输入样本为例进行说明,此时代价函数表示为:
C = 1 2 | | y a L | | 2 = 1 2 j ( y j a j L ) 2

公式1(计算最后一层神经网络产生的错误):
δ 2 = a C σ ( z L )

其中, 表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。公式1的推导过程如下:
δ j L = C z j L = C a j L a j L z j L

δ j L = C a L a L z L = a C σ ( z L )

公式2(由后往前,计算每一层神经网络产生的错误):
δ l = ( ( w l + 1 ) T δ l + 1 ) σ ( z l )

推导过程:

δ j L = C z j L = k C z k l + 1 a k l + 1 a j l a j l z j l = k δ k l + 1 ( w k j l + 1 a j l ) + b k l + 1 a j l σ ( z j l ) = k k l + 1 w k j l + 1 σ ( z j l )

得出:
l = ( ( w l + 1 ) T δ l + 1 ) σ ( z l )

公式3(计算权重的梯度):
C w j k l = a k l 1 δ j l

推导过程:
C w j k l = C z j l z j l w j k l = δ l ( w j k l a k l 1 + b j l ) w j k l = a k l 1 δ j l

公式4(计算偏置的梯度):

C b j l = δ j l

推导过:
C b j l = C z j l z j l b j l = δ l ( w j k l a k l 1 + b j l ) b j l = δ j l

4. 反向传播算法伪码

输入训练集

对于训练集中的每个样本x,设置输入层(Input layer)对应的激活前
前向传播:

z l = w l a l 1 + b l , a l = σ ( z l )

计算输出层产生的错误:

δ 2 = a C σ ( z L )

反向传播错误:
l = ( ( w l + 1 ) T δ l + 1 ) σ ( z l )

使用梯度下降(gradient descent),训练参数:
w l w l η m x δ x , l ( a x , l 1 ) T

b l b l η m x δ x , l

内容来自:https://blog.csdn.net/u014313009/article/details/51039334

猜你喜欢

转载自blog.csdn.net/sinat_30353259/article/details/81748343