1.计算图的应用动机

我们知道,在大多数现代机器学习方法尤其是深度神经网络中依赖使用基于梯度(gradient)的优化技术来迭代地提高网络的性能,虽然计算像线性函数这样的简单模型参数的梯度比较简单,但是由于随着网络层数的增加,神经网络愈发复杂,这就迫使我们使用例如反向传播(back propagation)等更复杂的技术来对损失函数(loss function)进行优化,而计算图的出现就方便我们对神经网络中梯度的反向流动过程进行直观的理解。

而谈到梯度,就一定会涉及数学计算,所以,计算图是用于表达和评估数学表达式的一种有向图,它就好比我们对古汉语文言文的现代语言注释,对凝练的数学表达式提供其计算过程的功能性描述,从而起到帮助我们更好地理解的作用。

image.png

为了更好地理解接下来的内容,我们首先需要掌握基本的导数、梯度和链式法则等数学知识,如果有对此不是很熟悉的朋友,可以自行先学习相关的内容,我在下面的阐述中默认大家已经掌握,故不再赘述计算过程。


2.进一步了解计算图

2.1计算图结构与正向传播

计算图和我们学习过的数据结构中的图类似,它由代表变量(标量、向量、矩阵、张量或者其它)的节点以及代表函数关系或者数据依赖的有向边组成,节点之间通过有向边的连接组成运算。

现在我们以下面这个表达式举例说明计算图:

$$ e = (a + b)*(b + 1) $$

我们可以将上述表达式“拆解”为下面3个子运算,分别是$a$与$b$的和、$b$与1的和以及这两个和的乘积,为了方便表示,我们引入中间变量$c$和$d$;

$$ c = f_{1}(a, b) = a + b $$

$$ d = f_{2}(b) = b + 1 $$

$$ e = f_{3}(c, d) = c * d $$

于是我们便可以绘制出对应运算的计算图并通过对输入变量取值来得到具体的输出结果。

image.png

image.png