一、代價函數
首先我們定義:
L = 神經網絡的總層數
si = 第L層的單元數量(不含偏置單元)
K = 輸出單元/類型的數量
hΘ(x)k = 假設函數中的第k個輸出
因爲邏輯迴歸裏的代價函數爲:
推廣到神經網絡中:
二、代價函數的優化算法——反向傳播算法(backpropagation algorithm)
1、含義
神經網絡的代價函數已經求出來了,那麼現在要進行min J也就是優化算法。這一節的主要目的是計算J的偏導數。
每當模型預測發生錯誤時,就需要調整模型參數,進行提高識別精度,這種情況中最有代表性的就是“誤差反向傳播”。
反向傳播算法從直觀上說,就是對每一個節點,我們計算這樣一項:
當得到最後一層的預測誤差後,我們便通過取微分調整,使得上一層的誤差變小。這樣逐層遞推回去,就使得總體的誤差變小了。
2、簡要步驟
首先我們可以得到最後一層的誤差項和激活項的關係:
然後我們可以得到前幾層的誤差項:
PS:因爲第一層沒有誤差,因此第一個誤差項不存在。
3、一般步驟
對於一個給定的訓練集:
結束for循環後:
三、理解反向傳播
反向傳播和前向傳播的過程其實極爲類似,只是計算方向不一樣而已,都是權重乘以單元值。
前向傳播:
反向傳播:
PS:一些編程小技巧:矩陣和向量的轉換:octave中使用reshape命令。
四、梯度檢測(gradient checking)
1、目的:
反向傳播算法有許多細節,實現起來比較困難,而且有一個不好的特性,就是容易產生bug。有時候神經網絡可能在迭代過程中確實得到了很好的結果,但是有bug的情況下會比無bug高出一個量級。梯度檢測就是專門解決這種bug的存在的。它將完全保證你的前向傳播和反向傳播是百分百正確。
2、數學方法
使用雙側差分算法:
3、僞代碼:
一般的,epsolon被設置爲10-4.
PS:注意!一旦使用梯度檢測算法驗證正確,就要關閉,不然會導致神經網絡算法的速度減慢。
五、隨機初始化(random initialization)
在神經網絡開始梯度下降之前,我們都要Θ設置一個初始值。如果都設置爲0,就會出現對稱問題(symmetry breaking),即所有的單元值相等。
隨機初始化就是解決這種問題的方法。
具體做法:
六、總體回顧
總而言之,訓練一個神經網絡的方法:首先要將權重隨機初始化爲一個接近0的數,然後進行反向傳播,再進行梯度檢驗,最後使用梯度下降或者其他高級優化算法來最小化代價函數J。
具體步驟如下:
1、選擇一種網絡構架:
輸入單元是由特徵數目決定的。
輸出單元是由所要區分的類別個數確定
隱藏層單元個數與數目:只使用單個隱藏層,如果隱藏層大於1 ,那麼默認每一
個隱藏層都有相同數目的單元數(單元數越多越
好)。
2、訓練一個神經網絡:
(1)隨機初始化權重
for循環:
(2)前向傳播,得到h值
(3)計算代價函數J
(4)反向傳播,得到偏導值
結束循環
(5)梯度檢測
(6)停用梯度檢測,梯度下降法計算J的最小值
PS第四次作業:1.求代價函數時,是X和對應的Y相乘,也就是對應元素相乘。