深度学习与计算机视觉(四)反向传播及其直观理解
四、反向傳播及其直觀理解
4.1 引言
問題描述和動機:
大家都知道,其實我們就是在給定的圖像像素向量x和對應的函數f(x)f(x),然后我們希望能夠計算ff在x上的梯度?f(x)?f(x)
之所以要解決這個問題,是因為在神經網絡中,ff對應損失函數LL,而輸入xx則對應訓練樣本數據和神經網絡的權重WW。通常我們認為訓練數據是給定的,而權重是我們可以控制的變量。因此我們為了更新權重的等參數,使得損失函數值最小,我們通常是計算f 對參數W,b 的梯度。
4.2 高數梯度 、偏導基礎
假如f(x,y)=xyf(x,y)=xy,那么我們可以求這個函數對xx和yy的偏導:
f(x,y)=xy→?f?x=y,?f?y=xf(x,y)=xy→?f?x=y,?f?y=x
解釋:偏導數的含義是一個函數在給定變量所在維度,當前點附近的一個變化率,也就是:
df(x)dx=limh→0f(x+h)?f(x)hdf(x)dx=limh→0f(x+h)?f(x)h
每個維度/變量上的偏導,表示整個函數表達式,在這個值上的『敏感度』。
我們說的梯度?f?f其實是一個偏導組成的向量,比如我們有?f=[?f?x,?f?y]=[y,x]?f=[?f?x,?f?y]=[y,x] 。即使嚴格意義上來說梯度是一個向量,但是大多數情況下,我們還是習慣直呼『x上的梯度』,而不是『x上的偏導』
4.3 復雜函數偏導的鏈式法則
假設有一個較為復雜一點的函數,比如f(x,y,z)=(x+y)zf(x,y,z)=(x+y)z,雖然我們可以直接求偏導,但是我們用一個非直接的思路去求解一下偏導,以幫助我們直觀理解反向傳播中,如果我們用換元法,把函數拆分為兩部分,q=x+yq=x+y和f=qzf=qz,對于這兩個部分,我們知道如何求解其變量上的偏導:
當然q是我們設定的一個變量,不關心其偏導值。
那『鏈式法則』告訴我們一個對上述偏導公式『串聯』的方式,得到我們感興趣的偏導數
?f?x=?f?q??q?x?f?x=?f?q??q?x x = -2; y = 5; z = -4# 前向計算 q = x + y # q becomes 3 f = q * z # f becomes -12# 類反向傳播: # 先算到了 f = q * z dfdz = q # df/dz = q dfdq = z # df/dq = z # 再算到了 q = x + y dfdx = 1.0 * dfdq # dq/dx = 1 恩,鏈式法則 dfdy = 1.0 * dfdq # dq/dy = 1鏈式法則的結果是,只剩下我們感興趣的[dfdx,dfdy,dfdz],也就是原函數在x,y,z上的偏導。這是一個簡單的例子,之后的程序里面我們為了簡潔,不會完整寫出dfdq,而是用dq代替。
以下是這個計算的示意圖:
4.4 反向傳播的直觀理解
反向傳播的過程,實際上是一個由局部到全部的精妙過程。比如上面的電路圖中,其實每一個『門』在拿到輸入之后,都能計算2個東西:
輸出值
對應輸入和輸出的局部梯度
而且很明顯,每個門在進行這個計算的時候是完全獨立的,不需要對電路圖中其他的結構有了解。然而,在整個前向傳輸過程結束之后,在反向傳播過程中,每個門卻能逐步累積計算出它在整個電路輸出上的梯度。
『鏈式法則』告訴我們每一個門接收到后向傳來的梯度,同時用它乘以自己算出的對每個輸入的局部梯度,接著往后傳。
以上面的圖為例,來解釋一下這個過程。加法門接收到輸入[-2, 5]同時輸出結果3。因為加法操作對兩個輸入的偏導都應該是1。電路后續的乘法部分算出最終結果-12。在反向傳播過程中,鏈式法則是這樣做的:加法操作的輸出3,在最后的乘法操作中,獲得的梯度為-4,如果把整個網絡擬人化,我們可以認為這代表著網絡『想要』加法操作的結果小一點,而且是以4*的強度來減小。加法操作的門獲得這個梯度-4以后,把它分別乘以本地的兩個梯度(加法的偏導都是1),1*-4=-4。如果輸入x減小,那加法門的輸出也會減小,這樣乘法輸出會相應的增加。
反向傳播,可以看做網絡中門與門之間的『關聯對話』,它們『想要』自己的輸出更大還是更小(以多大的幅度),從而讓最后的輸出結果更大。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的深度学习与计算机视觉(四)反向传播及其直观理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公积金怎么用来装修?
- 下一篇: 深度学习基础知识介绍