反向傳播通過使用計算圖形在Tensorflow,Torch,Theano等深度學習框架中實現(xiàn)。 更為重要的是,理解計算圖上的反向傳播結(jié)合了幾種不同的算法及其變體,如通過時間反向傳播和共享權(quán)重反向傳播。一切轉(zhuǎn)換成計算圖,它們?nèi)匀皇窍嗤乃惴?- 只是在計算圖上反向傳播。
計算圖被定義為有向圖,其中節(jié)點對應(yīng)于數(shù)學運算。 計算圖是表達和評估數(shù)學表達式的一種方式。
例如,這里有一個簡單的數(shù)學公式 -
p = x + y
我們可以繪制上述方程的計算圖如下。
上面的計算圖具有一個加法節(jié)點(具有“+”符號的節(jié)點),其具有兩個輸入變量x和y以及一個輸出q。
讓我們再舉一個例子,稍微復雜些。如下等式。
g = ( x + y ) ? z
以上等式由以下計算圖表示。

計算圖和反向傳播都是深度學習訓練神經(jīng)網(wǎng)絡(luò)的重要核心概念。
前進傳遞
正向傳遞是評估由計算圖表示的數(shù)學表達式的值的過程。 進行前向傳遞意味著我們將變量的值從左側(cè)(輸入)向前傳遞到輸出所在的右側(cè)。
讓我們考慮一個例子,給所有的投入賦予一些價值。 假設(shè)給所有輸入賦予下列值。
x=1, y=3, z=?3
通過將這些值賦予輸入,我們可以執(zhí)行正向傳遞并獲得每個節(jié)點上輸出的以下值。
首先,使用x = 1和y = 3的值來獲得p = 4。

然后使用p = 4和z = -3來得到g = -12。下面從左到右前進。
在后向傳遞中,我們的目的是計算每個輸入相對于最終輸出的梯度。 這些梯度對于使用梯度下降訓練神經(jīng)網(wǎng)絡(luò)至關(guān)重要。
例如,我們希望以下漸變。所需的漸變

后退傳遞
我們通過查找最終輸出相對于最終輸出(本身!)的導數(shù)來開始反向傳遞。 因此,這將導致身份推導,并且值等于一。

計算圖現(xiàn)在看起來如下所示 -
接下來,我們將通過“*”操作進行反向傳遞。將計算p和z處的梯度。 由于g = p * z,所以可以知道 -

已經(jīng)知道正向傳遞的z和p值。 因此得到 -

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

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

但是已經(jīng)知道dg/dp = -3,dp/dx和dp/dy很容易,因為p直接取決于x和y。如下公式 -

因此,可以得到 -

另外,對于輸入y -

這樣做的主要原因是,當必須計算x處的梯度時,只使用了已計算的值,而dq/dx(節(jié)點輸出相對于同一節(jié)點的輸入的導數(shù))。使用本地信息來計算全局值。
按照這些步驟來訓練一個神經(jīng)網(wǎng)絡(luò) -
x,使用x作為輸入進行前向傳遞,并計算成本c作為輸出。c開始向后傳遞,并為圖中的所有節(jié)點計算漸變。 這包括表示神經(jīng)網(wǎng)絡(luò)權(quán)重的節(jié)點。