計算圖



反向傳播在像Tensorflow、Torch、Theano等深度學習框架中是透過使用計算圖來實現的。更重要的是,理解計算圖上的反向傳播結合了若干不同的演算法及其變體,例如透過時間的反向傳播和具有共享權重的反向傳播。一旦所有內容都被轉換為計算圖,它們仍然是相同的演算法——僅僅是在計算圖上的反向傳播。

什麼是計算圖

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

例如,這裡有一個簡單的數學方程:

$$p = x+y$$

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

Computational Graph Equation1

上述計算圖有一個加法節點(帶有“+”符號的節點),有兩個輸入變數x和y,以及一個輸出q。

讓我們再舉一個例子,稍微複雜一點。我們有以下方程:

$$g = \left (x+y \right ) \ast z $$

上述方程由以下計算圖表示。

Computational Graph Equation2

計算圖和反向傳播

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

前向傳播

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

讓我們透過給所有輸入賦予一些值來舉個例子。假設所有輸入都被賦予以下值:

$$x=1, y=3, z=−3$$

透過將這些值賦予輸入,我們可以執行前向傳播並在每個節點上獲得以下輸出值。

首先,我們使用x = 1和y = 3的值,得到p = 4。

Forward Pass

然後我們使用p = 4和z = -3得到g = -12。我們從左到右,向前進行。

Forward Pass Equation

反向傳播的目標

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

例如,我們希望得到以下梯度:

所需梯度

$$\frac{\partial x}{\partial f}, \frac{\partial y}{\partial f}, \frac{\partial z}{\partial f}$$

反向傳播(反向傳播)

我們從找到最終輸出相對於最終輸出(自身!)的導數開始反向傳播。因此,它將產生恆等導數,其值為1。

$$\frac{\partial g}{\partial g} = 1$$

我們的計算圖現在看起來如下所示:

Backward Pass

接下來,我們將透過“*”操作進行反向傳播。我們將計算p和z處的梯度。由於g = p*z,我們知道:

$$\frac{\partial g}{\partial z} = p$$

$$\frac{\partial g}{\partial p} = z$$

我們已經從前向傳播中知道了z和p的值。因此,我們得到:

$$\frac{\partial g}{\partial z} = p = 4$$

$$\frac{\partial g}{\partial p} = z = -3$$

我們想要計算x和y處的梯度:

$$\frac{\partial g}{\partial x}, \frac{\partial g}{\partial y}$$

然而,我們希望有效地做到這一點(儘管x和g在這個圖中只有兩跳遠,想象一下它們彼此之間非常遙遠)。為了有效地計算這些值,我們將使用微分的鏈式法則。根據鏈式法則,我們有:

$$\frac{\partial g}{\partial x}=\frac{\partial g}{\partial p}\ast \frac{\partial p}{\partial x}$$

$$\frac{\partial g}{\partial y}=\frac{\partial g}{\partial p}\ast \frac{\partial p}{\partial y}$$

但我們已經知道dg/dp = -3,dp/dx和dp/dy很容易,因為p直接依賴於x和y。我們有:

$$p=x+y\Rightarrow \frac{\partial x}{\partial p} = 1, \frac{\partial y}{\partial p} = 1$$

因此,我們得到:

$$\frac{\partial g} {\partial f} = \frac{\partial g} {\partial p}\ast \frac{\partial p} {\partial x} = \left ( -3 \right ).1 = -3$$

此外,對於輸入y:

$$\frac{\partial g} {\partial y} = \frac{\partial g} {\partial p}\ast \frac{\partial p} {\partial y} = \left ( -3 \right ).1 = -3$$

這樣向後計算的主要原因是,當我們需要計算x處的梯度時,我們只使用了已經計算過的值,以及dq/dx(節點輸出相對於同一節點輸入的導數)。我們使用區域性資訊來計算全域性值。

訓練神經網路的步驟

按照以下步驟訓練神經網路:

  • 對於資料集中的資料點x,我們使用x作為輸入進行前向傳播,並計算成本c作為輸出。

  • 我們從c開始進行反向傳播,並計算圖中所有節點的梯度。這包括表示神經網路權重的節點。

  • 然後我們透過W = W - 學習率 * 梯度來更新權重。

  • 我們重複此過程,直到滿足停止條件。

廣告

© . All rights reserved.