大多数的神经网络参数训练、模型更新的过程都离不开前向传播和反向传播,其中涉及大量的运算,如果仅使用公式来描述的话会很复杂,如2.2.5节所示。因此引入计算图(Computation Graph)的概念。计算图是一种用于描述计算过程的数据结构,其基本元素包括节点(node)和边(edge),节点代表的是数据,也就是变量,包括标量、矢量、张量等;而边则表示的则是操作,也就是函数。计算图中节点之间的结构关系也被称为是拓扑结构(Topological Structure)。用计算图表示函数计算 z = f ( x , y )及复合函数 y = f ( g ( h ( x ))),如图2.15所示。
图2.15 计算图示例
使用计算图进行求导操作也是比较清晰的,可以直观地表示链式法则。对于复合函数求导有两种情况。第一种情况(图2.16)为:
图2.16 链式求导情况一
第二种情况(图2.17)是:
图2.17 链式求导情况二
常见的函数计算都是由上述两种方式互相结合形成,需要灵活应用链式法则求导以便计算梯度,式(2.41)给出了利用计算图对常见复合函数的求导过程。
式中, a =1, b =2,简单计算后可知 c =3, d =3, e =9,对式(2.41)所示计算求导可得:
利用计算图表示上述计算过程及求导结果如图2.18所示。
图2.18 计算图运算示例
计算图的主要目的是以图形化的方式来表示数学运算过程,以更清晰明了地说明复杂的运算逻辑以及数据的流动轨迹,并且使得深度学习中的反向传播和梯度计算能够更加方便快捷。一般来讲构建计算图主要分为以下几个步骤:
1)定义输入数据及其初始值。
2)根据定义的运算逻辑创建响应的节点以及节点之间的边连接关系。
3)从输入节点到输出节点按照计算顺序完成各节点的数据运算。
4)利用计算图前向传播(Forward Propagation)获得输出。
5)根据反向传播(Backward Propagation)利用计算图计算梯度进行参数优化。
鉴于计算图拥有包括易于理解及可视化、反向传播方便等优点,计算图被广泛应用于机器学习,尤其是在涉及梯度计算、优化算法和自动求导等方面,在PyTorch、TensorFlow、PaddlePaddle等深度学习框架中都广泛采用了计算图来支持其复杂的运算。