神經網絡學習筆記二——反向傳導
參考自 http://deeplearning.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95
神經網絡的代價函數
假設我們有一個固定樣本集。當使用批量梯度下降法求解時,單個樣例的代價函數為:
這是個方差代價函數,對於整體的代價函數則為:
後面的項為規則化項,目的是防止過擬合
我們的目標是針對參數W,和b(其實可以設定一個x0=1以及W0來把b規避掉)來求其函數J(W,b)的最小值。這裏的處理方式與普通的線性回歸和邏輯回歸不同,參數的初始化不能再簡單的全部置0,而是使用隨機值,比如使用正態分布 Normal(0,ε2
使用梯度下降法中每一次叠代都按照如下公式對參數W和b進行更新:
α是學習速率
其關鍵在於計算偏導數,這裏有一種有效的方法,就是後向傳播算法(BP)
後向傳播算法
後向傳播的實質是在求各層的損失函數的導函數時,由於每一層的輸入是前一層的輸出的線性組合,所以該層的導函數一定與前一層的損失函數的導數相關相關
具體來說,各層的代價函數的導函數如下:
下面少一項是因為規則項不作用於常數項上
反向傳播的具體執行思路為,
1)先進行前導計算,算出直到最後一層(輸出層)的激活值(輸出值)
2)最後一層的每個輸出單元i,根據以下公式計算殘差:
(其實和普通的線性回歸沒差)
3)對於l = nl-1,nl-2,nl-3...的各層,第l層的第i個節點的殘差計算方法如下:
推導公式如下(以nl和nl-1層為例,其他的類推即可)
4)計算我們需要的偏導數,方法為:
以上步驟寫作向量形式為:
1)前向計算
2)對於輸出層
中間的大黑點表示matlab中.*的運算
3)對於輸出層前面的各層
4)計算最終需要的偏導數值:
若f(z)是sigmoid的函數,且我們在前向計算中已經算到了。我們可以利用前面的結論得到
最後整個算法可以表示如下:
1)對於所有l,有,(設為全零向量或全零矩陣)這是為了存儲所有的損失函數導函數
2)對於i = 1 to m(所有訓練樣本)
a.使用反向傳播算法計算和
b.計算
c.計算
3)更新權重參數:
這只是一次叠代的操作,反復進行該操作,以減小代價函數(損失函數)J,最終求解該神經網絡
神經網絡學習筆記二——反向傳導