上一週我們學習了 神經網絡 | 多分類問題。我們分別使用 邏輯迴歸 和 神經網絡 來解決多分類問題,並瞭解到在特徵數非常多的情況下,神經網絡是更爲有效的方法。這周的課程會給出訓練 神經網絡 所使用的 代價函數,並使用 反向傳播 算法來計算梯度。筆者會給出 反向傳播 算法中重要的思路和推導,但不會包含所有的計算步驟。
點擊 課程視頻 你就能不間斷地學習 Ng 的課程,關於課程作業的 Python 代碼已經放到了 Github 上,點擊 課程代碼 就能去 Github 查看( 無法訪問 Github 的話可以點擊 Coding 查看 ),代碼中的錯誤和改進歡迎大家指出。
以下是 Ng 機器學習課程第四周的筆記。
假設我們的多分類問題有 個分類,神經網絡共有 層,每一層的神經元個數爲 ,那麼神經網絡的 代價函數 爲:
其中的第二項爲 正則化 項,是網絡中所有權值的平方和。第一項與邏輯迴歸中的 代價函數 類似,但這裏我們需要累加所有輸出神經元的誤差。
爲了能夠使用 梯度下降 算法來訓練網絡,我們需要計算代價函數的梯度。一種很直觀的方法就是使用數值計算,對於某個 ,給它加上減去一個很小的量 來計算梯度:
但稍微分析一下算法的複雜度就能知道,這樣的方法十分緩慢。對於每一組數據,我們需要計算所有權值的梯度,總的計算次數 = 訓練數據個數 x 網絡權值個數 x 前向傳播計算次數 。在通常情況下這樣的複雜度是無法接受的,所以我們僅使用這個方法來驗證 反向傳播 算法計算的梯度是否正確。
爲了能夠理解之後對於 反向傳播 公式的推導,我們首先要了解一個關於多元複合函數求導的 鏈式法則。對於多元函數 ,其中 , ,那麼:
鏈式法則 告訴我們有多個層次的多元複合函數,下一層次的導數可以由上一層次推得。
上圖中筆者有意多加了一層,這裏
是
的函數,
是
的函數,
是
的函數。對於要計算的
與
,上式仍成立,原因是我們可以把
看作
的函數。這相當於我們把:
簡化爲了只與上一層相關,利用上一層計算完成的結果
和
而不用從頭算起:
一般的,對於函數 ,如果它能看做 的函數,而 爲 的函數,則: