天天看點

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略

計算圖的簡介

      計算圖Computational Graph,被定義為有向圖,其中節點對應于數學運算。 計算圖是表達和評估數學表達式的一種方式。是一種描述方程的“語言”。既然是圖,則有節點(變量),邊(操作(簡單函數))

     反向傳播通過使用計算圖形在Tensorflow,Torch,Theano等深度學習架構中實作。 更為重要的是,了解計算圖上的反向傳播結合了幾種不同的算法及其變體,如通過時間反向傳播和共享權重反向傳播。一切轉換成計算圖,它們仍然是相同的算法 - 隻是在計算圖上反向傳播。

      其中,TensorFlow是一個通過計算圖的形式來表述計算的程式設計系統。基于TensorFlow這個程式設計系統中的每一個計算都是計算圖上的一個節點,而節點與節點之間的連線則代表計算之間的依賴關系。

(1)、計算圖,可以直覺地把握計算過程。

(2)、計算圖的節點是由局部計算構成的。局部計算構成全局計算。

(3)、在神經網絡算法中,計算圖的正向傳播進行一般的計算。通過計算圖的反向傳播,可以計算各個節點的導數。

CG的優點:[1],

優點1:局部計算。無論全局是多麼複雜的計算,都可以通過局部計算使各個節點緻力于簡單的計算,進而簡化問題。

優點2:利用計算圖可以将中間的計算結果全部儲存起來(比如,計算進行到2 個蘋果時的金額是200 日元、加上消費稅之前的金額650 日元等)。但是隻有這些理由可能還無法令人信服。

優點3:實際上,使用計算圖最大的原因是,可以通過反向傳播高效計算導數。

CG應用:[1],

1、利用計算圖來了解神經網絡的反向傳播思路。

       假設我們想知道蘋果價格的上漲會在多大程度上影響最終的支付金額,即求“支付金額關于蘋果的價格的導數”。設蘋果的價格為x,支付金額為L,則相當于求dL/dx。這個導數的值表示當蘋果的價格稍微上漲時,支付金額會增加多少。

       “支付金額關于蘋果的價格的導數”的值可以通過計算圖的反向傳播求出來。可以通過計算圖的反向傳播求導數。

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略

       可知,計算圖的優點是,可以通過正向傳播和反向傳播高效地計算各個變量的導數值。傳遞這個局部導數的原理,是基于鍊式法則(chain rule)。

DL:深度學習神經網絡算法中的相關概念(鍊式法則等)簡介、使用之詳細攻略

2、計算圖的反向傳播:沿着與正方向相反的方向,乘上局部導數。

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略
       如圖所示,反向傳播的計算順序是,将信号E乘以節點的局部導數dy/dx,然後将結果傳遞給下一個節點。這裡所說的局部導數是指正向傳播中y = f(x) 的導數,也就是y 關于x的導數dy/dx。比如,假設y = f(x) = x^2,則局部導數為= 2x。把這個局部導數乘以上遊傳過來的值(即E),然後傳遞給前面的節點。

計算圖的入門

0、基本思路

(1). 建構計算圖。

(2). 在計算圖上,從左向右進行計算。正向傳播是從計算圖出發點到結束點的傳播。既然有正向傳播這個名稱,當然也可以考慮反向(從圖上看的話,就是從右向左)的傳播。實際上,這種傳播稱為反向傳播(backward propagation)。反向傳

播将在導數計算中發揮重要作用。

1、将數學公式 g = ( x + y ) ∗ z 轉為計算圖了解

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略

2、太郎在超市買了2 個100 日元一個的蘋果,消費稅是10%,請計算支付金額。[1]

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略

3、太郎在超市買了2 個蘋果、3 個橘子。其中,蘋果每個100 日元,橘子每個150 日元。消費稅是10%,請計算支付金額。[1]

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略

CG與局部計算

     計算圖的特征是可以通過傳遞“局部計算”獲得最終結果。“局部”這個詞的意思是“與自己相關的某個小範圍”。局部計算是指,無論全局發生了什麼,都能隻根據與自己相關的資訊輸出接下來的結果。

     計算圖可以集中精力于局部計算。無論全局的計算有多麼複雜,各個步驟所要做的就是對象節點的局部計算。雖然局部計算非常簡單,但是通過傳遞它的計算結果,可以獲得全局的複雜計算的結果。

1、在超市買了2 個蘋果和其他很多東西。

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略

計算圖的使用

0、使用TensorFlow的過程中,通常需要定義兩個階段

階段1:定義計算圖中所有的計算

階段2:執行計算

定義計算階段的Demo:下邊的代碼中,TensorFlow會自動将定義的計算a和b轉化為計算圖中的節點。在TensorFlow中,系統會自動維護一個預設的計算圖,通過tf.get_default_graph函數可以擷取目前預設的計算圖。除了使用預設的計算圖,TensorFlow支援通過tf.Graph函數來生成新的計算圖。

import tensorflow as tf

a = tf.constant([1.0,2.0], name='a')

b = tf.constant([3.0,4.0], name='b')

result = a + b

1、backpropagation 算法用CG了解

DL之CG:Computational Graph計算圖的簡介、入門、使用之詳細攻略

繼續閱讀