BP算法是適用於多層神經網絡的一種算法,它是建立在梯度下降法的基礎上的。本文着重推導怎樣利用梯度下降法來minimise Loss Function。
給出多層神經網絡的示意圖:
1.定義Loss Function
假設有一組數據樣本,,… ,每一個x都有很多個特徵,輸入x,會得到一個輸出y,每一個輸出都對應一個損失函數L,將所有L加起來就是total loss。
那麼每一個L該如何定義呢?這裏還是採用了交叉熵,如下所示:
這裏的是真實輸出,是y target,是人爲定義的。最終Total Loss的表達式如下:
2.Gradient Descent
L對應了一個參數,即Network parameters θ(w1,w2…b1,b2…),那麼Gradient Descent就是求出參數來minimise Loss Function,即:
梯度下降的具體步驟爲:
3.求偏微分
從上圖可以看出,這裏難點主要是求偏微分,由於L是所有損失之和,因此我們只需要對其中一個損失求偏微分,最後再求和即可。
先抽取一個簡單的神經元來解釋:
先理一理各個變量之間的關係:我們要求的是Total Loss對參數w的偏導,而Total Loss是一個個小的l累加得到的,因此,我們只需要求得,而,其中是人爲定義的,跟w沒有關係,因此我們只需要知道。l跟z有關係,根據鏈式求導法則,我們需要求和,其中的求解較爲容易,如下圖所示:
求是一個難點,因爲我們並不知道後面到底有多少層,也不知道情況到底有多複雜,我們不妨先取一種最簡單的情況,如下所示:
4.反向傳播
在第一張圖裏面,我們經過正向傳播很容易求出了,而對於,則並不是那麼好求。上圖其實就是運用了反向傳播的思想, 對於上圖中最後的表達式,我們可以換一種結構,如下所示:
l對兩個z的偏導我們假設是已知的,並且在這裏是作爲輸入,三角形結構可以理解爲一個乘法運算電路,其放大係數爲。但是在實際情況中,l對兩個z的偏導是未知的。假設神經網絡最終的結構就是如上圖所示,那麼我們的問題已經解決了:
其中:
但是假如該神經元不是最後一層,我們又該如何呢?比如又多了一層,如下所示:
那麼我們只要知道和,我們同樣可以算出以及,原理跟上面類似,如下所示:
同樣是l先對y求導,y再對求導。
那假設我們再加一層呢?再加兩層呢?再加三層呢?。。。,情況還是一樣的,還是先求l對最後一層z的導數,乘以權重相加後最後再乘上即可。
最後給一個實例:
它的反向傳播圖長這樣:
我們可以很輕鬆的算出和,算出這兩個之後,根據上面我們找到的關係式,我們也可以輕易算出和,最後再算出和。然後和再分別乘上x1和x2,就是我們最終要找的和。
我們不難發現,這種計算方式很清楚明瞭地體現了“反向傳播”四個字。
好了,目標達成!!
5.總結
通過Forward Pass我們求得,然後通過Backward Pass我們求得,二者相乘,就是。利用上述方法求得所有參數的值之後,我們就可以用梯度下降法來更新參數,直至找到最優解。