機器學習:神經網路的代價函數及反向傳播演算法
在《機器學習:神經網路的模型構建》中,我記錄了神經網路的一些基礎知識,包括神經網路的邏輯單元、模型表示、前向傳播等等。這篇筆記中,我會整理神經網路的代價函數以及反向傳播演算法~
那麼如何在給定的訓練集下,來為神經網路擬合參數呢?和之前學習的大多數演算法一樣,要從代價函數開始討論起了。
神經網路在分類中的應用
神經網路可以應用在兩種分類問題中:二分類問題和多分類問題。
在二分類問題中,y 等於 0 或 1,神經網路只有一個輸出單元;多分類問題中,y 可能為任何實數,神經網路有多個輸出單元。
神經網路的代價函數
現在我們有一個訓練集: ,其中有 m 個訓練樣本,每個包含一組輸入 和一組輸出 ,我們用 表示神經網路的總層數,用 表示第 層的單元數量,即神經元的數量(不包括偏置單元)。
一般來說,我們使用的神經網路的代價函數是邏輯回歸里代價函數的一般形式。
在邏輯回歸中,我們的代價函數通常為: ,其中第一項表示預測值與實際值之間的差距,第二項為參數的正則化項。
對於神經網路來說,不再是只有一個輸出單元,取而代之的是 K 個,那麼其代價函數就表示為:
其中 (K 維向量), 表示第 i 個輸出。
即每一個的邏輯回歸演算法的代價函數,按輸出的順序 1 ~ K,依次相加。
反向傳播演算法
那麼如何將神經網路的代價函數最小化呢?我們來看一下反向傳播演算法。
在上一個部分中,我們已經得到了代價函數 的表達式,想要用梯度下降法或更高級的優化演算法來求參數,就需要來計算 和 。
先回顧一下前向傳播演算法,如果有一個訓練集,只有一組樣本 ,那麼求訓練集在神經網路中各層的輸出值的過程為:
就是第一層的激勵值,也就是輸入層,所以為 ,那麼 就等於矩陣 乘 ,第二層的激勵值 就為 ,後幾層同理,同樣用前向傳播求出 和 ,其中 為 S 型激勵函數。同樣, 也是假設函數的輸出 。
??接下來,為了計算導數項,我們就需要用到反向傳播演算法了!
簡單來說,我們引入了一個誤差變數 ,代表第 層中第 個節點的誤差,表示了該節點對最終輸出值的殘差產生的影響,也就是說這個誤差捕捉到了該節點的激勵值,然後計算出其誤差,例如:
,
向量化表示就是:
,
其中:向量維數等於輸出的單元個數。
下一步就是計算前幾層的誤差項了:
(推導方法有很多種,式子太複雜就不記錄了……)
到這裡也看出來為什麼叫反向傳播演算法了,因為是從輸出層開始,一層一層往前推算的,一直計算到第二層,因為第一層是輸入層,不存在誤差。
這就是反向傳播演算法的大致過程,那麼面對複雜的訓練集時,如何使用反向傳播演算法呢?
假設訓練集為 ,設誤差 ,下面是一段偽代碼:
For to
{ Set Perform forward propagation to compute for Using , cpmpute Compute } if if
簡單來說就是,從後向前依次計算每一層的 ,用 代表總誤差,每一層都有對應的 ,再引入代價函數對參數進行求導的結果 , 時對應偏置項。
一旦計算出了 ,就可以得到代價函數對每個參數的偏導數,因為可以證明得到:
,
用來累加誤差值,最後幫助我們計算偏微分~
推薦閱讀:
※RSA演算法詳解
※單機事務不同隔離級別的並發問題整理
※精選 TOP45 值得學習的Python項目
※024 Swap Nodes in Pairs[M]
※矩陣中的路徑