反向傳播技術是神經網路的核心技術之一。
如果乙個運算我們能夠使用計算圖表式出來,那麼我們就能夠利用反向傳播的方法,即從後往前遞迴地呼叫鏈式法則來計算梯度。
乙個簡單的函式f(x
,y,z
)=(x
+y)∗
zf(x,y,z)=(x+y)*z
f(x,y,
z)=(
x+y)
∗z的計算圖如下所示。
假設輸入為:x=-2, y=5, z=-4, 則輸出f(x,y,z)=-12(圖中綠色數字標出),令中間變數q=x+y,則q=3。
由x,y先計算出q,再由q,z計算得到f(x,y,z)這樣從輸入開始逐步計算最終得到輸出的傳播方式就叫做前向傳播。
現在的問題是我們希望分別知道x,y,z的偏導數。(當然這個函式很簡單,使用高等數學的方法直接求導也並不難,此處只是作為乙個例子,因為在深層神經網路中,計算圖會變得更為複雜,這也就是為什麼我們要使用反向傳播的方法來求出梯度)
根據鏈式法則:∂f∂
x=∂f
∂q∗∂
q∂x\frac=\frac*\frac
∂x∂f=
∂q∂f
∗∂x
∂q反向傳播:
利用鏈式法則,我們可以把結果傳遞給前面直接相連的節點,逐步得到原始輸入對應的梯度。
主要工作:在每乙個節點上計算我們所需的本地梯度,然後跟蹤這個梯度。在反向傳播過程中,我們接收從上游傳回來的這個梯度值,直接用這個值乘以本地梯度,然後得到我們想要傳回連線點的值。在下一節點進行反向傳播時,我們不考慮除了直接相連的節點之外的任何東西。
回到例子中進行解釋,計算的梯度在圖中使用紅色字標出。輸出f的梯度顯然為1,q和z分別都接收到來自f節點的回傳梯度1。
由f=qz,可以得到∂f∂
q=z\frac=z
∂q∂f=
z,故節點q的本地梯度為1*-4 = -4
同理,節點z的本地梯度為13 = 3
對於x + y = q,∂q∂
x=1\frac=1
∂x∂q=
1,故x的本地梯度為1-4(-4是q回傳的梯度)=-4
同理y節點的本地梯度也為-4
這樣就計算得到了∂f∂
x=−4
\frac=-4
∂x∂f=
−4, ∂ f∂
y=−4
\frac=-4
∂y∂f=
−4, ∂ f∂
z=3\frac=3
∂z∂f=
3順便:常見求導
再看乙個複雜一點的例子:f(w
,x)=
11+e
−(w0
x0+w
1x1+
w2)f(w,x)=\fracx_+w_x_+w_)}}
f(w,x)
=1+e
−(w0
x0
+w1
x1+
w2)
1計算圖如下所示
可以按照上述方法逐步計算,計算產生的數值圖中均有標出,此處想說的是,我們可以把多個小的節點,作為乙個大的節點看待,計算大的節點的本地梯度再回傳給相連的節點。
比如經常使用到的sigmoid函式:f(x
)=11
+e−x
f(x)=\frac}
f(x)=1
+e−x
1該例子其實就是乙個sigmoid函式的一種形式,sigmoid函式的導數其實是高數考試乙個常考的點,我們知道:
那麼如果我們將後面的和sigmoid函式有關的節點看作乙個大的節點:
根據公式,我們可以知道整個sigmoid節點的本地梯度應該是
( 1−
0.73)∗
(0.73)∗
1(此處
的1是輸
出回傳的
梯度)=
0.1971
(1-0.73)*(0.73)*1(此處的1是輸出回傳的梯度)=0.1971
(1−0.7
3)∗(
0.73
)∗1(
此處的1
是輸出回
傳的梯度
)=0.
1971
由於計算過程我們選擇只保留小數點後兩位,所以整個sigmoid節點的本地梯度為0.2,與我們圖中逐步計算得到的結果相同,這是一種整體的思想。
一些特別的門的梯度求解:比如max函式求取輸入引數中的最大值,那麼這類計算的梯度又該如何計算?
答案是我們需要具體問題具體分析,比如max(x,y),當輸入x=0,y=4時,max(0,4)=4。則x的導數就是0,y的導數則為1。
多元鏈式法則:當乙個節點連線到多個節點時,將回流回來的各個引數相加。
多位引數的梯度計算:如果輸入和輸出分別是向量而不是數,則梯度應該是乙個雅可比矩陣,其中矩陣的每一行中的每乙個元素對應輸出向量每一元素對輸入向量的每一元素分別求偏導的結果。
但是實際應用中為了加快處理,我們常會使用批處理的方法,比如一次處理128個向量,假設輸入和輸出都是含有4096個元素的向量,那麼對單一向量,產生的梯度雅可比矩陣的大小是[40964096],在批處理中,我們則需要為其準備[4096128,4096*128]大小的梯度矩陣。進行這個規模的矩陣運算顯然不是很現實,正如上述定義所說,雅可比矩陣的每乙個元素是輸出向量每一元素對輸入向量的每一元素分別求偏導的結果,於是正確的做法應該是單獨求出每乙個元素的值再將其填入矩陣回流到上一節點。
顯然,我們可以感覺到,前向傳播和反向傳播的計算就像是封裝兩個api,coding時我們也是這麼做的,前向傳播計算的返回結果是損失值(loss),反向傳播返回結果是梯度(gradient)。
神經網路反向傳播理解
訓練神經網路的目標是 優化代價函式,使得代價函式找到乙個 全域性最小值或者區域性最小值。不管使用何種梯度下降演算法 bgd,sgd adam 都需要先算出各個引數的梯度。反向傳播的作用 就是快速算出所有引數的偏導數。求導數通常可以分為兩類,一類是直接用定義,第二類是公式法 包括鏈式法 定義法 定義法...
機器學習 反向傳播神經網路推導
簡單的反向傳播神經網路可以說就是將基本單元如感知器,組成層級結構,劃分出輸入層 隱含層 輸出層 不同層之間通過連線來形成耦合,從而組成乙個有功用的網狀演算法結構。感知器可以通過迭代計算來逼近想獲取的結果,迭代過程中感知器不斷和計算結果反饋,較為常用的迭代計算方法有梯度下降法。當感知器組成網路之後,每...
卷積神經網路反向傳播推導
以tensorflow的卷積神經網路為例 卷積 池 卷積 池 全連線 softmax c1層 卷積神經網路的輸入是28 28的矩陣 a 經過f1 個5 5的卷積核k1 i i 1,2,f1 的卷積生成f1 個24 24大小的feature maps c1 i co nv2 a,k1 i,v alid...