05.18 「震撼」可視化和直觀理解:神經網絡的反向傳播「薦讀」

1 BP 簡介

BP 是一種通過遞歸應用l鏈式法則計算梯度的方法。 對這個過程的理解對於我們高效地開發,設計,調試神經網絡是直觀重要的。

BP 問題本質上是研究 f 在 x 處的偏導。我們之所以對這個問題感興趣是因為某個對應於具體問題的神經網絡,f 對應著 損失函數 L , 輸入 x 包括訓練數據和神經網絡的權重參數。

例如,損失函數可能是 SVM 損失函數,輸入的訓練數據 (xi ,yi),i=1…N ,權重參數分別為 W,b. 記住,就像是在機器學習中,我們通常認為訓練數據是給定且固定的,權重參數認為是我們可以改變被我們控制的。因此,儘管我們能容易地利用反向傳播計算在每一個輸入樣本點 xi 的梯度,但是,實際上我們只計算在參數W,b 的梯度,進一步去更新參數W,b .

2 梯度簡介

從簡單談起,考慮函數 f (x,y)=xy. 求各自的偏導過程如下:

「震撼」可視化和直觀理解:神經網絡的反向傳播「薦讀」

這個求偏導的過程告訴我們, 一個函數對於某個變量的變化率等於如下極限:

「震撼」可視化和直觀理解:神經網絡的反向傳播「薦讀」

如果 x=4, y=−3 則 f(x,y) = −12 ,因此,∂f / ∂x = −3. 這個式子告訴我們,假如我們增加 x 一點,那麼整個表達式將會減少這個量的 3 倍。

值得一提的是, ∇f 這個標記的含義是偏微分的向量,因此,我們得到: ∇f=[∂f / ∂x,∂f / ∂y]=[ y,x ]. 儘管梯度從技術角度講是一個向量,但是我們經常稱為 對 x 的梯度,而不是更準確的術語:對 x 的偏微分。

3 鏈式法則

讓我們考慮一個稍顯複雜的表達式,f (x,y,z)=(x+y) z. 為了更直觀地理解反向傳播,我們將這個表達式拆成兩部分,將 (x+y) 標記為 q , 因此 f=qz. 更多地,我們知道如何計算這兩個表達式的偏導:

∂f / ∂q = z

∂f / ∂z = q

因為 q = (x+y) ,所以,

∂q / ∂x=1

∂q / ∂y=1

鏈式法則 ( chain rule ) 告訴我們正確的鏈接這些梯度表達式的方法是通過相乘來做,因此,

∂f/ ∂x=∂f /∂q*∂q /∂x

編碼實現:

# set some inputs

x = -2;

y = 5;

z = -4

# perform the forward pass

q = x + y # q becomes 3

f = q * z # f becomes -12# perform the backward pass (backpropagation) in reverse order:# first backprop through f = q * z

dfdz = q # df/dz = q, so gradient on z becomes 3

dfdq = z # df/dq = z, so gradient on q becomes -4# now backprop through q = x + y

dfdx = 1.0 * dfdq # dq/dx = 1. And the multiplication here is the chain rule!

dfdy = 1.0 * dfdq # dq/dy = 1

將這個過程可視化的圖形顯示如下:

「震撼」可視化和直觀理解:神經網絡的反向傳播「薦讀」

前向傳播 ( forward pass ) 計算開始於輸入端,結束到輸出端,圖中綠色表示,輸入分別為: x = -2, y = 5, z = -4 , 因此, q = 3, q 乘以 -4 後 f 得到 -12 .

反向傳播( backward pass ) 卻開始於輸出端,然後遞歸地應用鏈式規則計算梯度,圖中紅顏色所示,f 增加 1,表現在 q 上就是使得 它變小 4, 使得 z 增加 3,q 節點還沒有傳播到輸入端,所以 q 繼續向後傳播影響到 x, y, 根據 q 對 x 和 y 的梯度公式, 得到 x 變化 -4, y 也會變化 -4.

一個複雜點的例子:

「震撼」可視化和直觀理解:神經網絡的反向傳播「薦讀」

將上個式子鏈式分解為如下:

「震撼」可視化和直觀理解:神經網絡的反向傳播「薦讀」

可視化正向傳播,反向傳播,規則和上個例子一致,綠色代表輸入值,紅色代表改變量。大家不妨詳細分析一下!

「震撼」可視化和直觀理解:神經網絡的反向傳播「薦讀」


分享到:


相關文章: