原理

误差反向传播算法是通过误差函数计算实际输出值与期望输出值之间的误差,把误差从最后的输出层依次传播到之前各层,最后通过调整各层连接权重与偏置达到减小误差的目的。而权重和偏置的调整一般使用梯度下降法。

推导前的准备

本文误差反向传播算法的推导以包含隐藏层的多层感知器为例,结构如下图所示:

神经网络训练误差大 神经网络误差函数公式_算法

这里,图中和推导过程中涉及的符号代表的含义分别为:

符号

含义

神经网络训练误差大 神经网络误差函数公式_深度学习_02

输入值

神经网络训练误差大 神经网络误差函数公式_深度学习_03

隐藏层激活值

神经网络训练误差大 神经网络误差函数公式_神经网络_04

实际输出值

神经网络训练误差大 神经网络误差函数公式_梯度下降法_05

期望输出值

神经网络训练误差大 神经网络误差函数公式_神经网络训练误差大_06

网络输入层的第i个神经元和下一层网络第j个神经元之间的连接权重

神经网络训练误差大 神经网络误差函数公式_深度学习_07

网络隐藏层的第j个神经元和下一层网络第k个神经元之间的连接权重

神经网络训练误差大 神经网络误差函数公式_神经网络训练误差大_08

网络隐藏层第j个神经元的偏置

神经网络训练误差大 神经网络误差函数公式_梯度下降法_09

网络输出层第k个神经元的偏置

神经网络训练误差大 神经网络误差函数公式_神经网络训练误差大_10

隐藏层第j个神经元的激活函数的加权输入

神经网络训练误差大 神经网络误差函数公式_梯度下降法_11

输出层第k个神经元的激活函数的加权输入

神经网络训练误差大 神经网络误差函数公式_深度学习_12

误差函数

神经网络训练误差大 神经网络误差函数公式_神经网络_13

学习率

这里,误差函数采用最小二乘误差函数,公式如下:
神经网络训练误差大 神经网络误差函数公式_梯度下降法_14
激活函数使用sigmoid函数,公式如下:
神经网络训练误差大 神经网络误差函数公式_算法_15其中,
神经网络训练误差大 神经网络误差函数公式_算法_16

开始推导

首先,再明确一下我们的目的是计算使用梯度下降法时神经网络各层间连接权重和偏差的变化值,即神经网络训练误差大 神经网络误差函数公式_神经网络_17等值。
这里,计算过程以求解神经网络训练误差大 神经网络误差函数公式_神经网络训练误差大_18为例,其它值类似,而
神经网络训练误差大 神经网络误差函数公式_梯度下降法_19
根据链式求导得:
神经网络训练误差大 神经网络误差函数公式_神经网络_20
然后逐个对等式右侧各部分求解得:
神经网络训练误差大 神经网络误差函数公式_算法_21
神经网络训练误差大 神经网络误差函数公式_梯度下降法_22
神经网络训练误差大 神经网络误差函数公式_神经网络训练误差大_23
神经网络训练误差大 神经网络误差函数公式_神经网络_24
神经网络训练误差大 神经网络误差函数公式_神经网络_25
最后得:
神经网络训练误差大 神经网络误差函数公式_梯度下降法_26
因此,权重神经网络训练误差大 神经网络误差函数公式_神经网络训练误差大_27得变化值为:
神经网络训练误差大 神经网络误差函数公式_梯度下降法_28
根据上述计算过程可以发现,权重的变化值的组成依次为:学习率、误差函数导数、激活函数导数、对应连接权重、激活函数导数和输入值,根据这个规律可以快速写出各层权重和偏差的变化值,例如:
神经网络训练误差大 神经网络误差函数公式_神经网络_29
神经网络训练误差大 神经网络误差函数公式_梯度下降法_30

小结

误差反向传播算法会通过误差函数计算梯度,然后调整权重与偏置,经过反复迭代训练的调整,最终获得最优解。
本文在推导过程中使用的误差函数为最小二乘误差函数,除此以外还有很多其它函数用于计算误差,比如一般多分类问题中使用交叉熵误差函数:
神经网络训练误差大 神经网络误差函数公式_梯度下降法_31
二分类中的常用的误差函数为:
神经网络训练误差大 神经网络误差函数公式_算法_32
同时,激活函数除sigmoid外还有tanh、ReLU等函数:
神经网络训练误差大 神经网络误差函数公式_算法_33
神经网络训练误差大 神经网络误差函数公式_算法_34