一、序言
反向傳播在神經網絡中用於優化權重w和閾值b,是神經網絡優化的核心算法。經過數日的學習終於看明白了一點反向傳播的原理,這里作文記錄心得。
本文先介紹一下基本的數學計算方法,然后根據“損失計算公式”推導出優化參數的反向傳播方法。
二、基本數學原理
神經網絡中優化參數w、b的方法稱為反向傳播,反向傳播的具體實施方法稱為“梯度下降”,梯度下降涉及兩個基本的數學知識:求導、鏈式法則。
1)求導
假設有以下式:
上式對x求導:
實例:
2)鏈式法則
鏈式法則的意義在於將z對x的求導轉化為z對y的求導和y對x的求導,示例如下:
求y對z的導數
已知:
所以:
3)求導的數學意義
如上圖所示,y對於x的導數本質上是求得x0處的斜率,若我們將x0增大一點點Δx,就可求得y軸上增大了多少Δy:
Δy = Δx*(x0處的斜率)
若我們想讓y值趨向於最小,可以用y減去Δy:
y = y0-Δy = y0-Δx*(x0處的斜率)
其中y0、Δx、x0處的斜率都是已知的,我們就可以逐步趨近最小的y值。需要注意的是Δy只是一個近似的y軸增大量,不是實際的,但我們可以通過這個方法不斷“逼近”y 的最小值。
三、損失計算
考慮一個簡單的傳播函數:
y = wx + b
其中w是權重、b是閾值、x是輸入、y是預測輸出,我們可以用預測輸出減去實際輸出得到損失(預測與實際之間的差異):
實際操作中我們會取誤差的平方,因為平方差使得導出回歸線更容易。只是為了降低運算難度,使用誤差或誤差的平方來衡量損失本質上沒有區別。
實際使用時,Y其實是個常數(label值),引入傳播函數(Y撇)=wx+b
Cost = (wx+b - Y)^2
四、梯度下降
看上面的損失計算公式,會發現其實它是個拋物線,可以簡化為y = x^2:
讓預測結果趨向於實際結果,本質上就是要找到一個最小的cost,也就是使上圖中y趨向於0。有一點需要注意的是,在下式中:
Cost = (wx+b - Y)^2
我們期望的是找到一個最佳的w和b來求得最小的Cost,其中x和Y其實都是已知的。所以我們是對w和b求導求得Δw和Δb。為便於計算,我們可以做以下變化:
Cost = (Error)^2
Error = wx+b-Y
根據鏈式法則,我們就可以得到:
所以Δw = 2*error*x
類似地可以推導出Δb=2*error
在實際使用時,error值、x值都是已知的所以我們可以求得Δw和Δb
上述反向傳播的實現代碼中,img即是x,Y-label即是error,除以m是因為實際操作時是一次對m個圖片進行處理,這里求dw、db時需要取平均值所以除以m。其次實際代碼中我們把Δw = 2*error*x的常數2忽略了,對實際操作沒有影響。
五、總結
最后在優化參數時,我們會用Δw和Δb乘以一個非常小的浮點數如0.001稱為步幅(learning rate),再用w-Δw、b-Δb。所以本質上來說Δw和Δb只是指明了梯度下降的方向,比如在下面的函數圖形中,在x軸左側應當增大x值,在x軸右側則應該減小x值,我們通過斜率就可以知道具體應該減少還是增大了。
請關注公眾號“零基礎愛學習”一起AI學習。