計算圖


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

什麼是計算圖

計算圖被定義為有向圖,其中節點對應於數學運算。 計算圖是表達和評估數學表示式的一種方式。

例如,這裡有一個簡單的數學公式 -

p = x + y

我們可以繪製上述方程的計算圖如下。

上面的計算圖具有一個加法節點(具有「+」符號的節點),其具有兩個輸入變數xy以及一個輸出q

讓我們再舉一個例子,稍微複雜些。如下等式。

g = ( x + y ) ? z

以上等式由以下計算圖表示。

計算圖和反向傳播

計算圖和反向傳播都是深度學習訓練神經網路的重要核心概念。

前進傳遞

正向傳遞是評估由計算圖表示的數學表示式的值的過程。 進行前向傳遞意味著我們將變數的值從左側(輸入)向前傳遞到輸出所在的右側。

讓我們考慮一個例子,給所有的投入賦予一些價值。 假設給所有輸入賦予下列值。

x=1, y=3, z=?3

通過將這些值賦予輸入,我們可以執行正向傳遞並獲得每個節點上輸出的以下值。

首先,使用x = 1y = 3的值來獲得p = 4

然後使用p = 4z = -3來得到g = -12。下面從左到右前進。

後向傳遞目標

在後向傳遞中,我們的目的是計算每個輸入相對於最終輸出的梯度。 這些梯度對於使用梯度下降訓練神經網路至關重要。

例如,我們希望以下漸變。所需的漸變

後退傳遞

我們通過查詢最終輸出相對於最終輸出(本身!)的導數來開始反向傳遞。 因此,這將導致身份推導,並且值等於一。

計算圖現在看起來如下所示 -

接下來,我們將通過「*」操作進行反向傳遞。將計算pz處的梯度。 由於g = p * z,所以可以知道 -

已經知道正向傳遞的zp值。 因此得到 -

我們想要計算xy處的梯度 -

然而,我們想要有效地做到這一點(儘管xg在圖中只有兩跳,想象它們彼此之間真的很遠)。 要有效計算這些值,我們將使用差異化的鏈式規則。 從連鎖規則來看,如下 -

但是已經知道dg/dp = -3dp/dxdp/dy很容易,因為p直接取決於xy。如下公式 -

因此,可以得到 -

另外,對於輸入y -

這樣做的主要原因是,當必須計算x處的梯度時,只使用了已計算的值,而dq/dx(節點輸出相對於同一節點的輸入的導數)。使用本地資訊來計算全域性值。

訓練神經網路的步驟

按照這些步驟來訓練一個神經網路 -

  • 對於資料集中的資料點x,使用x作為輸入進行前向傳遞,並計算成本c作為輸出。
  • c開始向後傳遞,並為圖中的所有節點計算漸變。 這包括表示神經網路權重的節點。
  • 然後通過 W = W - 學習率*梯度來更新權重。
  • 重複這個過程,直到滿足停止條件。