今天有朋友咨询我反向传播算法,我觉得不需要太复杂的推导,就可以解释清楚这个算法的原理。
序
假定神经网络采用下面的结构:
1. 最简单的神经网络模型
我们考虑最简单的情况:一个输入节点、一个输出节点、一个训练样本,网络结构如下图:
2. 损失函数
为了简化分析,我们假定只有一个训练样本
(x,y)。于是,损失函数简化为下面的形式:
E=21(y−a5)2(3)
其中,
(x,y) 是训练样本、
a1=x,
wi 的初始值随机赋予,而
a5 是网络模型输出的结果,在训练样本固定的条件下,它的值取决于权重系数
wi,通过调整权重系数,我们可以减少
a5 与训练样本中的结果
y 之间的差距。
3. 梯度计算
模型中的权重系数
w2,w3,w4,w5 的变化影响损失函数的结果,为了利用梯度下降法使得这组权重参数从随机给出的初始值,逐步逼近到最优位置,需要求它们的偏导数。
w5 里输出节点最近,因此求它的偏导数是最简单的,我们先进行计算。然后再依次计算前面的几个权重系数的偏导数。
注意下面这组计算非常有规律:
∂w5∂E=−(y−a5)∂w5∂a5 ∂w4∂E=−(y−a5)∂w4∂a5 ∂w3∂E=−(y−a5)∂w3∂a5 ∂w2∂E=−(y−a5)∂w2∂a5(4)
4. 反向传播算法
既然越往前计算,算式越长,那么,能否借助
wi 的计算结果增量式地计算
wi−1 的结果呢?
其实,这比较有意思。看看下面的计算过程,后面的计算,总是可以借助前面的计算结果,这样可以大大减少计算量:
∂w5∂a5=∂z5∂a5∂w5∂z5(5)
∂w4∂a5=∂z5∂a5∂w4∂z5(6)
注意(5)、(6)两个计算式中,粗体字部分是完全相同的计算。权重的位置越靠前,重合的部分就越多,再看看下面这两个式子:
∂w3∂a5=∂z3∂a5∂w3∂z3(7)
∂w2∂a5=∂z3∂a5∂w2∂z3(8)
计算式中的粗体字部分是相同的,为了简化起见,粗体字部分计算式没展开。展开后,就是下面(9)、(10) 式的情况。注意(10)式的第一个括号部分的内容,是复用的(9)式内容,第二个括号部分的内容,是增量部分,可以用于下一个算式的计算。
实际上,从(5)式开始,后面的计算式都可以在前面的基础上,增量式地补充一部分内容就可以了,大大提高了计算效率。这个计算方法称为反向传播算法。
∂w3∂a5=(∂z5∂a5∂a4∂z5∂z3∂a4)∂w3∂z3(9)
∂w2∂a5=(∂z5∂a5∂a4∂z5∂z3∂a4)(∂a2∂z3∂z2∂a3)∂w2∂z2(10)
这里举的例子太简单了,对于多个输入、多个输出、多个中间层的一般性网络模型,反向传播算法是否奏效呢?这个问题我们另行讨论。下一篇文章我计划讨论的问题是:反向传播算必须基于神经网络模型吗?