CS231n課程筆記四 反向傳播

導言

動機:為了高效的設(shè)計和調(diào)試神經(jīng)網(wǎng)絡(luò),理解反向傳播的機理是很重要的。
問題描述:有了函數(shù)f(x)我們對于計算f在x點的梯度很感興趣。
在神經(jīng)網(wǎng)絡(luò)中,f相應(yīng)于損失函數(shù)和輸入x將組成訓練集和神經(jīng)網(wǎng)絡(luò)權(quán)重,比如損失將是SVM損失函數(shù)而輸入既是訓練數(shù)據(jù)也是權(quán)重,既是我們可以很快的使用后向傳播計算出梯度,實際上我們通常也僅僅計算每一個參數(shù)的梯度,所以我們可以使用它來實現(xiàn)一個參數(shù)的更新,然而正如我們在課程中后面會看到的x仍然是有用的,比如為了可視化神經(jīng)網(wǎng)絡(luò)在做什么。

計算

首先看最簡單的例子:


捕獲.PNG

反向傳播是一個精美的本地進程。電路圖中的每個門都會獲得一些輸入,可以立即計算兩件事情:1.其輸出值和2.其輸入的本地梯度相對于其輸出值。注意,門可以完全獨立完成,而不知道它們嵌入的全電路的任何細節(jié)。但是,一旦正向通過結(jié)束,在反向傳播期間,門將最終了解其輸出值的梯度在整個電路的最終輸出。連鎖規(guī)則說,門應(yīng)該采用該梯度,并將其乘以其通常為其所有輸入計算的每個梯度。
所以,后向傳播其實是門之間的互相交流,通過梯度信號來交流,是增加還是減少,增加減少多大程度,來是的最后的輸出結(jié)果更高。

模塊度

上面介紹的門是相對來說任意的,任何可微的函數(shù)都可以作為一個門,并且可以把多個門集合到一個里面或者分解一個函數(shù)到多個門中。

image.png

可以用下圖來表示:

image.png

分階段反向傳播。如上面的代碼所示,在實踐中,將前進路徑分解為容易反向推進的階段總是有幫助的。例如,我們創(chuàng)建了一個中間變量點,它保存了w和x之間的點積的輸出。在反向通過期間,我們?nèi)缓笠来斡嬎悖ǚ聪蝽樞颍┍4孢@些變量的梯度的相應(yīng)變量(例如,ddot,最后dw,dx)。

本節(jié)的要點是,反向傳播如何執(zhí)行的細節(jié)以及我們認為是門的前向功能的哪些部分是方便的問題。它有助于了解表達式的哪些部分具有容易的本地漸變,使得它們可以用最少的代碼和努力鏈接在一起。

案例 分階段計算

下面看以下的案例:

image.png
x = 3 # example values
y = -4

# forward pass
sigy = 1.0 / (1 + math.exp(-y)) # sigmoid in numerator   #(1)
num = x + sigy # numerator                               #(2)
sigx = 1.0 / (1 + math.exp(-x)) # sigmoid in denominator #(3)
xpy = x + y                                              #(4)
xpysqr = xpy**2                                          #(5)
den = sigx + xpysqr # denominator                        #(6)
invden = 1.0 / den                                       #(7)
f = num * invden # done!                                 #(8)

有幾點需要注意:首先應(yīng)該將計算過的變量放入緩存,為了后巷傳遞變量應(yīng)該把一些變量存儲,在實際中你想要結(jié)構(gòu)化這些變量,所以他們在后向傳播中能夠可用。另外,前向的表達式中用到x和y多次,所以當我們使用后向傳播的時候應(yīng)該慎重使用+=而不是=,以在這些變量上積累梯度,而不是直接替換掉,這個符合多變量鏈式規(guī)則。

后向傳播流的模式

在這幅圖中,add gate 會將梯度平等的傳遞給輸入節(jié)點,無論前向的節(jié)點傳遞了什么值。
而max gate 規(guī)定了梯度傳遞的路線,他只會傳遞給特定的一個路線。
multiply gate 會交換傳入的梯度。

image.png

向量梯度

當兩個向量相乘的時候,如何找到梯度是比較難的。

# forward pass
W = np.random.randn(5, 10)
X = np.random.randn(10, 3)
D = W.dot(X)

# now suppose we had the gradient on D from above in the circuit
dD = np.random.randn(*D.shape) # same shape as D
dW = dD.dot(X.T) #.T gives the transpose of the matrix
dX = W.T.dot(dD)

使用維度分析!請注意,您不需要記住dW和dX的表達式,因為它們?nèi)菀赘鶕?jù)維度重新導出。例如,我們知道權(quán)重dW上的梯度在計算之后必須與W的大小相同,并且必須依賴于X和dD的矩陣乘法(如同時X,W都是單個數(shù)字的情況)而不是矩陣)。總是有一種實現(xiàn)這一點的方法,以便維度得到解決。例如,X大小為[10×3],dD大小為[5×3],所以如果我們想要dW和W具有[5×10]的形狀,那么實現(xiàn)這一點的唯一方法是使用dD.dot XT),如上所示。

使用小的,明確的例子。有些人可能會發(fā)現(xiàn)很難得出一些向量化表達式的漸變更新。我們的建議是明確地寫出一個最小的矢量化示例,導出紙上的漸變,然后將模式推廣到其有效的向量化形式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 說明: 本系列文章翻譯斯坦福大學的課程:Convolutional Neural Networks for Vis...
    Warren_Liu閱讀 2,040評論 0 6
  • Course1:神經(jīng)網(wǎng)絡(luò)和深度學習,包括: [1] Week1:深度學習概述[2] Week2:神經(jīng)網(wǎng)絡(luò)基礎(chǔ)[3]...
    牛奶芝麻閱讀 2,312評論 4 9
  • Josh Davis, Ph.D. 神經(jīng)科學家教你5種有效策略,使心智高效率表現(xiàn),聰明完成當日關(guān)鍵工作 適合的閱讀...
    Ingebaby閱讀 210評論 0 2
  • 透析記5.6 今日血濾。 十一點上機。上機稱重45.4公斤,脫水1.4公斤。流量210,血壓117/80。 透析過...
    小棕櫚閱讀 282評論 0 0
  • 特別不喜歡網(wǎng)上那些重復曬自己取得成功的人。他們,慣用的套路是給自己貼標簽:斜杠青年、月入5萬、某公司市場總監(jiān),然后...
    725b30f7a6e1閱讀 115評論 0 0

友情鏈接更多精彩內(nèi)容