反向传播算法推导过程
原理部分参考李宏毅机器学习PPT,以下推导过程详细且易理解。
参考博客1. 变量定义
上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
其中
表示**函数。
2. 代价函数
代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):
其中,
表示输入的样本,
表示实际的分类,
表示预测的输出,
表示神经网络的最大层数。
3. 公式及其推导
本节将介绍反向传播算法用到的4个公式,并进行推导。如果不想了解公式推导过程,请直接看第4节的算法步骤。
首先,将第
层第
个神经元中产生的错误(即实际值与预测值之间的误差)定义为:
本文将以一个输入样本为例进行说明,此时代价函数表示为:
公式1(计算最后一层神经网络产生的错误):
其中,
表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。公式1的推导过程如下:
公式2(由后往前,计算每一层神经网络产生的错误):
推导过程:
公式3(计算权重的梯度):
推导过程:
公式4(计算偏置的梯度):
推导过程:
4. 反向传播算法伪代码
- 输入训练集
-
对于训练集中的每个样本x,设置输入层(Input layer)对应的**值
:
- 前向传播:
- 计算输出层产生的错误:
- 反向传播错误:
- 使用梯度下降(gradient descent),训练参数: