反向传播算法
反向传播等式让我们可以计算成本函数的梯度。让我们将其写成算法的形式:
输入:为输入值设置对应的激活值。
前馈:对每个,计算和。
输出误差:计算向量
反向传播误差:对每个计算。
输出:得出成本函数的梯度为和。
看一下这个算法你就明白为什么要叫反向传播(backpropagation)了。我们从最后一次开始,用相反的方向计算误差向量。在网络中倒退着走可能看起来有点奇怪,但想一下反向传播的证明过程,倒退着走实际上是由成本是关于网络输出的函数造成。为了弄明白之前的权重和偏移量怎样引起成本的变化,我们需要重复的用链式法则,倒退着通过每一层来获取有用的信息。
练习
- 一个神经元被改动情况下的反向传播
假设在前馈网络里对一个神经元进行了改动,导致这个神经元的输出变为,这里的是除S型函数之外的函数。那在这个场景里要如何修改反向传播算法呢?
- 线性神经元情况下的反向传播
假设将网络里通常是非线性的函数替换成。重新写一下这种场景下的反向传播算法。
上面描述了反向传播算法计算一个训练样本下成本函数的梯度,。实际上,反向传播通常会和一个学习算法结合使用,如随机梯度下降算法,这个算法计算多个训练样本的梯度。实际上,给出一个有个训练样本的小批次,下面的算法基于这个小批次做了一步梯度下降学习:
输入一个训练样本集
对于每个训练样本: 设置对应的输入激活值,然后执行下面的步骤:
前馈: 计算每个的和。
输出误差: 计算向量。
反向传播误差: 计算每个的。
梯度下降: 按规则更新每个的权重和偏移量。
当然,在实际情况下实现随机梯度下降还需要一个外层循环来生成训练样本的小批次,和一个逐步完成多代的训练。简单起见,省略了这些内容。