Skip to content

关于本章

原书的6.5节《Back-Propagation and Other Differentiation Algorithms》描述Back-Propagation algorithm,这个算法是不容易理解,为了便于理解,可以先阅读科普性的读物:Back-Propagation;在初步了解该算法后,正式进入6.5-Back-Propagation-and-Other-Differentiation,其中的描述是非常严谨、专业的;掌握该算法后,我们需要考虑如何实现back propagation:Implementation

computational-graph and chain-of-calculus and back-propagation

computational-graph是对math function(可以看做是一个expression)的structure representation;

chain of calculus是计算math function的公式;

思考: 如何根据函数表达式来构造computational-graph

这个过程跟compiler parse program是类似的;

math expression和program是context free language,都是遵循context free grammar;

compiler根据grammar(往往使用production的方式来表达)使用grammar tree来表示我们的program;

相应的,我们可以根据math expression的grammar构造出它的computational graph;

其实computational graph非常类似于abstract syntax tree的;

computational graph的构造构成是可以参考parsing的过程的。

Computation graph VS parse tree

NOTE: parse tree在工程compiler-principle#中介绍

两者都需要遵循grammar:

computation graph的构建需要遵循的各种operation的grammar;

parse tree的构建需要遵循的是context free grammar;

在工程compiler-principle#中,parse tree的构建可以是top-down、bottom-up的。

在tensorflow whitepaper 2015中,computation graph的构建是bottom-up的。

Function composition and CFG

复合函数是显然的containing/nesting关系,这和CFG是一致的,这就决定了它们可以使用类似的方式来进行parsing。programming language、math都是CFG。

思考:为什么使用computational graph?

简而言之:使用这种representation,可以方便实现back-propagation。

从“结构化思维”的角度来分析:computational-graph 和 chain-of-calculus 有着相似的结构:hierarchy、containing关系,rewrite rule,recursion。两者结构的相似,决定了当沿着computational-graph的edge,可以非常自然地使用chain-of-calculus,进而非常容易地使用back-propagation。由此可以看到,采用合适的representation对于解决各种computational problem的意义。

Structure of chain-of-calculus

chain-of-calculus本质上就是一个formula,和普通的math expression类似。

显然,computational-graph对于实现back-propagation的重要意义,决定了tensorflow、torch的底层都使用computational graph来实现的原因。

back-propagation是对chain-of-calculus的运用,在