深度学习之反向传播推导
反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:
- 将训练集数据输入到ANN的输入层, 经过隐藏层, 最后达到输出层并 输出结果, 这是ANN的前向传播过程;
- 由于ANN的输出结果与实际结果有误差, 则计算估计值与实际值之间 的误差, 并将该误差从输出层向隐藏层反向传播, 直至传播到输入层;
- 在反向传播的过程中, 根据误差调整各种参数的值; 不断迭代上述过 程, 直至收敛。
1、变量定义
上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
- 表示第层的第个神经元连接到层的第个神经元的权重;
- 表示第层的第个神经元的偏置;
- 表示第层的第个神经元的输入,即: - 表示第层的第个神经元的输出,即:
-
其中表示**函数
2、代价函数
代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):
其中,x表示输入的样本,y表示实际的分类,a^L表示预测的输出,L表示神经网络的最大层数
3、公式及其推导
首先,将第层第个神经元中产生的错误(即实际值与预测值之间的误差)定义为:
本文将以一个输入样本为例进行说明,此时代价函数表示为:
公式1(计算最后一层神经网络产生的错误):
其中,表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。公式1的推导过程如下:
公式2(由后往前,计算每一层神经网络产生的错误):
推导过程:
得出:
公式3(计算权重的梯度):
推导过程:
公式4(计算偏置的梯度):
推导过:
:
4. 反向传播算法伪码
输入训练集
对于训练集中的每个样本x,设置输入层(Input layer)对应的**前
前向传播:
计算输出层产生的错误:
反向传播错误:
使用梯度下降(gradient descent),训练参数:
内容来自:https://blog.csdn.net/u014313009/article/details/51039334