反向傳播算法(Backpropagation)----Gradient Descent的推導過程

BP算法是適用於多層神經網絡的一種算法,它是建立在梯度下降法的基礎上的。本文着重推導怎樣利用梯度下降法來minimise Loss Function。

給出多層神經網絡的示意圖:
在這裏插入圖片描述

1.定義Loss Function

假設有一組數據樣本x1x^{1}x2x^{2},… ,每一個x都有很多個特徵,輸入x,會得到一個輸出y,每一個輸出都對應一個損失函數L,將所有L加起來就是total loss。
那麼每一個L該如何定義呢?這裏還是採用了交叉熵,如下所示:
在這裏插入圖片描述
這裏的yiy^{i}是真實輸出,y^y\hat{}是y target,是人爲定義的。最終Total Loss的表達式如下:
在這裏插入圖片描述

2.Gradient Descent

L對應了一個參數,即Network parameters θ(w1,w2…b1,b2…),那麼Gradient Descent就是求出參數θ\theta^{*}來minimise Loss Function,即:
在這裏插入圖片描述
梯度下降的具體步驟爲:
圖源:李宏毅機器學習講稿

3.求偏微分

從上圖可以看出,這裏難點主要是求偏微分,由於L是所有損失之和,因此我們只需要對其中一個損失求偏微分,最後再求和即可。
先抽取一個簡單的神經元來解釋:在這裏插入圖片描述
先理一理各個變量之間的關係:我們要求的是Total Loss對參數w的偏導,而Total Loss是一個個小的l累加得到的,因此,我們只需要求得lw\frac{\partial l}{\partial w},而l=y^lnyl=-\hat{y}lny,其中y^\hat{y}是人爲定義的,跟w沒有關係,因此我們只需要知道yw\frac{\partial y}{\partial w}。l跟z有關係,根據鏈式求導法則,我們需要求lz\frac{\partial l}{\partial z}zw\frac{\partial z}{\partial w},其中zw\frac{\partial z}{\partial w}的求解較爲容易,如下圖所示:
在這裏插入圖片描述
lz\frac{\partial l}{\partial z}是一個難點,因爲我們並不知道後面到底有多少層,也不知道情況到底有多複雜,我們不妨先取一種最簡單的情況,如下所示:
在這裏插入圖片描述

4.反向傳播

在第一張圖裏面,我們經過正向傳播很容易求出了zw\frac{\partial z}{\partial w},而對於lz\frac{\partial l}{\partial z},則並不是那麼好求。上圖其實就是運用了反向傳播的思想, 對於上圖中lz\frac{\partial l}{\partial z}最後的表達式,我們可以換一種結構,如下所示:
在這裏插入圖片描述
l對兩個z的偏導我們假設是已知的,並且在這裏是作爲輸入,三角形結構可以理解爲一個乘法運算電路,其放大係數爲σ(z)\sigma {}'(z)。但是在實際情況中,l對兩個z的偏導是未知的。假設神經網絡最終的結構就是如上圖所示,那麼我們的問題已經解決了:
在這裏插入圖片描述
其中:
在這裏插入圖片描述
但是假如該神經元不是最後一層,我們又該如何呢?比如又多了一層,如下所示:
在這裏插入圖片描述
那麼我們只要知道lza\frac{\partial l}{\partial z_{a}}lzb\frac{\partial l}{\partial z_{b}},我們同樣可以算出lz\frac{\partial l}{\partial z{}'}以及lz\frac{\partial l}{\partial z{}''},原理跟上面類似,如下所示:

在這裏插入圖片描述
lzb\frac{\partial l}{\partial z_{b}}同樣是l先對y求導,y再對zbz_{b}求導。

那假設我們再加一層呢?再加兩層呢?再加三層呢?。。。,情況還是一樣的,還是先求l對最後一層z的導數,乘以權重相加後最後再乘上σ(z,z,...)\sigma {}'(z{}'',z{}''',...)即可。
最後給一個實例:
在這裏插入圖片描述
它的反向傳播圖長這樣:
在這裏插入圖片描述
我們可以很輕鬆的算出lz5\frac{\partial l}{\partial z_{5}}lz6\frac{\partial l}{\partial z_{6}},算出這兩個之後,根據上面我們找到的關係式,我們也可以輕易算出lz3\frac{\partial l}{\partial z_{3}}lz4\frac{\partial l}{\partial z_{4}},最後再算出lz1\frac{\partial l}{\partial z_{1}}lz2\frac{\partial l}{\partial z_{2}}。然後lz1\frac{\partial l}{\partial z_{1}}lz2\frac{\partial l}{\partial z_{2}}再分別乘上x1和x2,就是我們最終要找的lw1\frac{\partial l}{\partial w_{1}}lw2\frac{\partial l}{\partial w_{2}}
我們不難發現,這種計算方式很清楚明瞭地體現了“反向傳播”四個字。
好了,目標達成!!
在這裏插入圖片描述

5.總結

通過Forward Pass我們求得zw=a\frac{\partial z}{\partial w}=a,然後通過Backward Pass我們求得lz\frac{\partial l}{\partial z},二者相乘,就是lw\frac{\partial l}{\partial w}。利用上述方法求得所有參數的值之後,我們就可以用梯度下降法來更新參數,直至找到最優解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章