姓名:刘璇光 学号:15020150039
转载自: 知乎 ,有删节
【嵌牛导读】:入门深度神经网络的数学和算法基础。
【嵌牛鼻子】:深度学习 计算图
【嵌牛提问】:深度学习的第一步是什么内容?
【嵌牛正文】:
我们从计算图(computational graph)的理论开始,因为神经网络本身是计算图的一个特殊形式。
Computational graph 是有向图,其中的节点都对应着 操作(Operation) 或者 变量(Variable)。
Variable 可以把自己的值递送给 Operation,而 Operation 可以把自己的输出递送给其他的 Operation。这样的话,计算图中的每一个节点都定义了 graph 中的 Variable 的一个函数(本句意义可以参照“函数”的定义,大意为一种输入对应一种输出)。
递送入节点的、从节点中传出的值,被称为 tensor,这是个用于多维数组的词。因此,它包括标量、矢量、矩阵,也包括高阶的张量(tensor)。
下例中的 computational graph 把两个输入 x 和 y 相加,计算得总和 z。
本例中,x 和 y 是 z 的输入节点,z 是 x 和 y 的消耗者。z 因此定义了一个函数,即:
当计算变得越来越复杂时,computational graph 的概念就越显得重要了。比如,下面的 computational graph 定义了一个仿射变换:
操作 Operations
每一个 Operation 有三项特征:
一个计算函数:用于计算对于给定的输入,应当输出的值
输入节点(node):可有多个,可以是 Variable 或者其他 Operation
consumer:可有多个,将 Operation 的输出作为它们的输入
加法
矩阵乘法
变量 Variables
在仿射变换的 graph 中,x 与 A 和 b 有本质的不同。x 是 operation 的输入,而 A 和 b 是 operation 的参数,即它们是 graph 本身固有的。我们把 A 和 b 这样的参数称为 variable。
Graph类
最后,我们需要一个把所有 operation, placeholder 和 variable 包含在一起的类。创建一个新的 graph 时,可以通过调用 as_default 方法来设置它的 _defaultgraph。
通过这个方式,我们不用每次都传入一个 graph 的引用,就可以创建 operation, placeholder 和 variable。
为了计算 operation 所代表的函数,我们需要按正确的顺序进行计算。比如,如果中间结果 y 还没计算出来,我们就不能先计算 z。因此我们必须确保 operation 执行顺序正确,只有这样才能确保在计算某个 operation之前,它所需要的输入节点的值都已经计算好了。这点可以通过 post-order traversal 实现。
网友评论