计算图(Computational Graph)笔记
最近在学习Tensorflow,而Tensorflow的写法和一般的Python好像不太一样,不是很容易上手。后来看到Tensorflow是基于Computational Graph,那么就先来学习一下,参考的资料A Primer on Neural Network Models for Natural Language Processing
目录如下
什么是计算图(Computational Graph)
简单来说就是,就是一个有向图,
上图来源是 这样子的图就代表 (a∗b+1)∗(a∗b+2)
图的来源是A Primer on Neural Network Models for Natural Language Processing
一些表示
为了清楚期间,用圆来表示运算符号(tensorflow中的各种op,加减乘除,sigmoid…),用无色的长方形表示输入(tensorflow中的placeholder),用有颜色的长方形表示变量(tensorflow中的Variable)
例如:
要说一下的是,这边图上是看不出来 node_1 和 node_2 具体的运算是什么(由于空间问题,我就定义在外边了),定义如下:
此外,元素 A 指向元素
其中 π−1(B) 表示 B 的所有arguments
Forward
非常简单,就是把手头有的资料
Backward
BP的部分也很简单,第一步是将上面那种图中各个node对于他的参数的偏微分。论文上写起来大概就是这样
(当然关于x关于y的不必求了即关于placeholder的不用求),得到下图:
第二步是找到所有从你希望优化的node
到你希望调整的参数
的路径,然后每一条路径上的偏微分乘在一起,所有路径加在一起。
举个例子假如我们的目标是让 node_3 最小,并且我们希望调整参数 W 来达到这个目的,怎么办呢?首先我们算出所有(这种情况显然b的就不用,简单起见就说所有的)node对于他们的参数的偏微分,如上图表示。然后对于 W ,找到所有从 node_3 到 W 的路径,(这边只有一条),如下