Stanford機器學習課程筆記——神經網路學習

bigface1234fdfg發表於2015-01-28

Stanford機器學習課程筆記——神經網路學習

    

    前面引入了神經網路的概念,也說了如何通過輸入層、中間層和輸出層來表示一個神經網路,也說了如何通過前向傳遞來得到每一層的元素,最後可以得到輸出層的假設。

    這一篇中,我們來學習如何通過神經網路來訓練它,具體而言,如何通過代價函式來學習每一層的每一個元素。

    要完成神經網路的學習需要有如下兩個步驟:


1) 選擇網狀結構


    這個步驟中,我們需要選擇網路結構,確定神經網路的層數,以及每一層都多少個單元。我們知道第一層的單元數是我們訓練樣本的個數,最後一層的元素數是我們分類結果的類別數。中間層可以是1,那麼就是最簡單的三層神經網路。如果中間層,不只一個的話,那麼最好讓每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越到越好,當時太多了也會影響到模型的複雜程度。


2)訓練神經網路


    這個步驟比較重要。主要是包括:

  • 每層之間權重引數矩陣的隨機初始化(不要初始化為全0矩陣);
  • 利用正向傳遞,先求出每一層中單元,以及最後的假設。這個是可以通過前面一篇得到;
  • 確定代價函式J_theta;
  • 利用反向傳遞,計算代價函式J_theta的在每一層上的偏導數;
  • 利用梯度檢驗的方法,檢驗偏導數求解是否正確;
  • 利用優梯度下降法來迭代求出最小化代價函式的最優theta。

    前面的權重矩陣初始化、正向傳遞求出一個初始的假設,這兩步在前面一篇博文中已經講過了,這邊用下面這個圖來表示:



這篇主要是後面幾步。

    首先我們來說神經網路中的代價函式,它的形式也是和LR中的代價函式類似的。

    LR的代價函式如下:



而神經網路中的代價函式如下:


我們看看二者之間的共同點和不同點。相同點就是大家整體的結構都是一樣的,前面一項都是誤差,後面一項都是正則項。那麼不同點,第一個是引數不同,一個是每個特徵前線上性迴歸下的引數(係數),一個是每層之間的權重係數,我們暫且都成為theta;另一個就是後面的sigma求和變多了。這是因為神經網路中學習到的是一個多類的分類器,K類,這樣我們的誤差肯定是每類都會有的,所有需要額外的一個sigma從k=1:K,而正則項中由於權重係數增多,不再是每個特徵維度一個係數,而是一個矩陣形式的,一共有L-1層有權重係數,而是是從s_l到s_l+1的匹配(一一對應的),所以我們需要3個sigma來表示正則項。這也算是詳細解讀了神經網路中的代價函式了。


    然後,我們需要利用反向傳遞技術來確定代價函式的偏導數。這部分比較重要。

    為什麼需要求代價函式的偏導數呢?因為我們要令代價函式最小,為什就使用反向傳遞技術呢?因為神經網路中的誤差是一級一級傳遞的,我們可以直接獲得的是最後一層輸出層和真實輸出的誤差,所以我們需要一層層的往前推導,求得代價函式的偏導。

    舉個例子:


這一部分有比較詳細的推導。

    我們需要求的是代價函式J關於每一層權重係數theta_j_i的偏導,如下:


解釋一下,為什麼把原始的偏導公式拆開。因為這樣方便求解,而為什麼是z_l+1呢,而不是z_l呢?這就要聯絡上面的z關於a的表示式了,我們都是通過權重係數,結合第l層的單元,來表示第l+1層的單元,而要求z關於theta的偏導的話,我們就一定只有通過z_l+1啦!所以這部分是合理的。

    這個偏導公式包括兩項。

    第一項,因為是偏導,所以這裡的z_l+1已經被精確到每個單元i了,也就是z_l+1_i單元了。這也從另一個角度來說明每一層的誤差都是前面一層中每個單元疊加起來的。好了,現在我們需要求第l+1層的第i個單元對誤差E的貢獻,也就是偏導,我們引入error變數delta.它的求解需要分最後一層和中間層。如下:

(這部分在Rachel Zhang的博文中已經講的比較清楚了,我就直接貼過來)



我們可以發現,第l層的delta是需要前面第l+1層的delta的,這也就是反向傳遞技術的關鍵點。


    第二項,因為是z_l+1對於theta_l的偏導,而前面提到了公式,它們之間是有個表示關係的,也就是:


所以它們的偏導就等於a_l_j。

    這樣我們原始的誤差E關於theta的偏導就可以求得,如下:


有了偏導公式,我們就可以用下面的公式來更新theta:


這樣從後往前,反向傳遞代價函式的偏導,可以更新每一層的theta。


    接著是梯度檢驗法來核實前面的偏導求解是否正確。

    這種思路的基本思路就是通過估計某一點的梯度值,來檢驗上面偏導求解是否正確。比如,對於某個theta, 我們可以計算theta-eps和theta+eps兩個點的代價函式值,即選擇2個非常接近的點,計算它們的平均值來估計theta處的梯度。看看和前面求得的是否相似。其實這個思路就是回到了梯度,或者說是求導的本質,它們的定義公式一開始就是這樣子的。

    記住,雖然梯度檢驗法也是可以得到每個theta的偏導值的,當時我們只把它當作一種檢驗的方法,而不是所有學習更新的theta的梯度都是它來做,因為它的計算速度是很慢的,就像我們求x^2的導數會直接用公式來計算,而不是同兩個接近的點函式值的平均值來算。


    好了,有了上面的偏導和檢驗的方法,我們就有了梯度下降法所有的東西了,算是萬事俱備了。後面的就是梯度下降法的步驟了。

    這樣就可以學習到讓代價函式最小化的最優解theta了。

    


參考:

Coursera機器學習筆記

http://blog.csdn.net/abcjennifer/article/details/7758797




相關文章