由于整个求解过程使用传统正向模式求导的话,会面临很大的重复计算量,而这个算法的精髓是从输出层的误差开始,反过来逐层把误差传播至每一个隐层上,直到输入层为止,每一层都依赖后面已经计算好的信息去完成求导,因此称作“反向传播”。
● 第三阶段:权值更新,将每一个权值的梯度乘以一个比例值(称作训练因子,以 α 表示,作用是控制学习效率,承担了类似于梯度下降算法中步长幅度的角色)并取反,然后加到原来的权重上以得到新的权值。
● 重复:重复第一至第三阶段,直至获得的误差足够小,达到期望后跳出循环,完成训练过程。
这个算法的操作步骤从整体来说并没有神来之笔,其实根本就是梯度下降算法!最初人们认为神经网络是不可能训练的,并不是想不出这样的操作步骤,而是受限于操作步骤中第二阶段计算网络的每一个权值的导数 $\cdot \frac { \partial E } { \partial w _ { i j } }$ ,这个过程需耗费巨量的计算资源。而误差反向传播的最精妙之处就在于给出了可快速完成求导的“反向模式”,这才是误差反向传播算法改进的精髓所在。为了能更好地解释这个“反向模式”,笔者先使用计算图计算导数的过程来讲解一下传统正向模式是如何操作的,以及正常求导需要花费多少计算量。
我们以计算图求算子 a 和 b 对算式“ $\begin{array} { r l } { e } & { { } \ ( a + b ) \times ( b + 1 ) ^ { * } } \end{array}$ 的偏导数为例来讲解,这个算式的复合关系使用计算图展开后如图 7-6 所示<sup>○一</sup>。
第 7 章 深度学习时代
253
○一 本例的部分文字和图片来源于“ Calculus on Computational Graphs: Backpropagation ”:http://colah.github.io/posts/2015-08-Backprop/。