Calculus on Computational Graphs Backpropagation

Calculus on Computational Graphs: Backpropagation

翻译自:http://colah.github.io/posts/2015-08-Backprop/

前言

反向传播是使深度模型训练计算高效的关键算法。对于目前的神经网络,相比于传统实现方法,反向传播似的梯度下降训练速度提高一千万倍,相当于训练一周与200000年的差别。
除了用于深度学习,反向传播算法在众多领域也是一个有效的计算工具,从天气预报到分析数组稳定性,只是名字各有不同。事实上,这个算法已经在不同领域被应用过几十次,名为“reverse-mode differentiation”。
从根本上来说,这是一个提高导数计算效率的技术。

计算图表

计算图表是解决数学表达式的良好方法。例如,对于表达式e=(a+b)(b+1),有三个操作:两个加法,一个乘法。引入两个中间变量,c和d。
$c=a+b$
$d=b+1$
$e=c
d$
建立如下计算图表,用箭头表示数值输入方向。

这种图表在计算机科学时常使用,特别是在函数式编程。他们在概念上与依赖图和调用图相似,同时也是流行的深度学习框架Theano的核心概念。
通过赋值给输入变量特定的值,我们可以计算这个表达式,并往上计算各个节点。例如:设a=2,b=1:

这个表达式的值为6。

计算图表的导数

理解计算图表导数的关键在于理解每个节点(on the edges)的导数。如果a直接影响c,那么我们想知道它如何影响c。如果a变化,那么c如何变化。我们称之为c关于a的偏导数。
为了计算这个图表的偏导数,我们需要知道偏导数的加法和乘法法则:
$$ \frac{\partial }{\partial a}{a+b} = \frac{\partial a}{\partial a} + \frac{\partial b}{\partial a} =1 $$
$$ \frac{\partial }{\partial u}uv = u\frac{\partial v}{\partial u} + v\frac{\partial u}{\partial u} =v $$

下图为增加节点偏导的图表