概述
计算题,顾名思义,就是用一张图来表示一个算式,通过图上的一些操作来完成算式的计算。
但是计算题有一个非常厉害的地方在于它不仅仅能正向计算(计算表达式的结果)也可以反向计算(求出导数,利用函数求导的链式法则)。
今天我们就来见识一下这个计算图。
计算图的表示
在计算图上,用结点来表示符号,此处的符号应该理解为广义的符号,即计算操作,不仅仅包括=,-,*,/
,还有个包括次幂,对数等运算。
用有向边来表示计算的顺序,可知计算图是一个有向无环图,其计算顺序就是拓扑序。
每个结点的入边边权表示其的输入,出边边权表示其的输出。
举个例子
用计算图表示3+4*2
计算图的反向传播
这才是计算图真正的用武之地,相比于用定义来计算函数的导数,在计算大量的导数时候,计算图就非常高效。
利用计算图来求导数的原理就是函数求导的链式法则,也就是说,对于计算图上的每个结点,仅仅需要关心与这个结点相连的边(包括入边和出边),就可以计算出当前运算的导数。每一个局部运算导数通过链式法则,就能得到该函数的导数了。
同样是上面的例子
加粗的线表示反向传播,即函数的导数。
不难看出,使用计算图可以快速地求出函数关于每个变量的导数。