在前面几章中,我们介绍了随机梯度下降的框架和各个参数误差的求法,本章将在此基础之上介绍用于训练神经网络的反向传播算法。
一、反向传播算法(Backpropagation Algorithm)
回顾随机梯度算法的流程:
- 初始化各个参数 θ , θ={w(1),b(1),...,w(L+1),b(L+1)}
- 循环
N
次
- 对于每一个训练样本
(x(t),y(t)) - 求目标函数的反梯度方向,即 Δ=−∇θl(f(x(t);θ),y(t))−λ∇θΩ(θ)
- 更新参数 θ←θ+αΔ
其中,一个很重要的过程就是如何求目标函数的反梯度方向。假定我们已经对神经网络进行了前向传播(即通过输入计算出了各层的预激励和激励,以及最终的误差函数),综合前面几张我们说的参数误差梯度的求法,我们有:
- 计算输出梯度
- ∇a(L+1)(x)logf(x)y=−(e(y)−f(x)) ,详见第四章
- 对于
L+1
到
1
中的每一层
k ,有:
- 计算隐层梯度
∇W(k)−logf(x)y=(∇a(k)(x)−logf(x)y)(h(k−1)(x))T
∇b(k)−logf(x)y=∇a(k)−logf(x)y
详见第六章 - 计算下一层激励梯度
a - 计算下一层预激励梯度
- 计算隐层梯度
- 对于每一个训练样本