2.6 反向传播算法
反向传播方程给出了一种计算代价函数梯度的方法。让我们显式地用算法描述出来:
输入 : 为输入层设置对应的激活值 。
前向传播: 对每个 计算相应的 和
输出层误差 : 计算向量
反向误差传播: 对每个 ,计算
输出: 代价函数的梯度由 和 得出
检视这个算法,你可以看到为何它被称作反向传播。我们从最后一层开始向后计算误差向量 。这看起来有点奇怪,为何要从后面开始。但是如果你认真思考反向传播的证明,这种反向移动其实是代价函数是网络输出的函数的结果。为了理解代价随前面层的权重和偏置变化的规律,我们需要重复作用链式法则,反向地获得需要的表达式。
练习
使用单个修正的神经元的反向传播 假设我们改变一个前馈网络中的单个神经元,使得那个神经元的输出是 ,其中 是和 S 型函数不同的某一函数。我们如何调整反向传播算法?
线性神经元上的反向传播 假设我们将非线性神经元的 函数替换为 。重写反向传播算法。
正如我们上面所讲的,反向传播算法对一个训练样本计算代价函数的梯度,。在实践中,通常将反向传播算法和诸如随机梯度下降这样的学习算法进行组合使用,我们会对许多训练样本计算对应的梯度。特别地,给定一个大小为 的小批量数据,下面的算法在这个小批量数据的基础上应用一步梯度下降学习算法:
输入训练样本的集合
对每个训练样本 : 设置对应的输入激活 ,并执行下面的步骤:
- 前向传播: 对每个 计算 和 。
- 输出误差 : 计算向量 。
- 反向传播误差: 对每个 计算 。
- 梯度下降: 对每个 根据 和 更新权重和偏置。
当然,在实践中实现随机梯度下降,我们还需要一个产生训练样本的小批量数据的循环,还有就是多重迭代期的循环。这里我们先省略了。