1. 程式人生 > >coursera機器學習課程第五週——課程筆記

coursera機器學習課程第五週——課程筆記

 第五週課程學習結束,一直都是邊上課邊做筆記(紙質),沒有想過在這裡再梳理一遍然後將筆記整理出來,考慮之後覺得這一步很重要,可以藉此對學過的這一週所有知識做一個梳理,方便自己更好的理解這些知識,而且這些筆記放在部落格裡也方便自己以後的回顧,所以要堅持將筆記做下去,待到所有課程結束之後再把前四周的課程筆記整理寫到這裡。

首先上週課程介紹了神經網路的結構和前向傳播過程(feed forward),瞭解了神經網路是如何進行預測的;本週介紹了cost function作為結果比較的標準以及backpropagation方法作為錯誤修改的方法。

1、Cost function

假設給定m個樣本,分別是:

;L代表網路中的總層數;代表在第l層中神經元的數量(不包括偏差神經元)。

當遇到二分類問題時:

當遇到K分類問題時:(y的值應該用這種0-1矩陣表示)

邏輯迴歸和神經網路的損失函式比較(有正則化項,但不包括bias terms):

     

我們知道,邏輯迴歸一般用於二分類問題,但神經網路多用於K分類問題,根據邏輯迴歸方法的損失函式提出了神經網路的損失函式。需要注意的是,正則化項均不包括bias terms。

2、Backpropagation algorithm

神經網路中,我們需要最小化損失函式需要求的值有:

下面先來介紹一下BP神經網路,下面是神經網路的示意圖:


Layer1

,相當於外界的刺激,是刺激的來源並且將刺激傳遞給神經元,因此把Layer1命名為輸入層(Input Layer)Layer2-Layer3,表示神經元相互之間傳遞刺激相當於人腦裡面,因此命名為隱藏層(Hiddenlayers)Layer4,表示神經元經過多層次相互傳遞後對外界的反應,因此Layer4命名為輸出層(Output Layer)

簡單的描述就是,輸入層將刺激傳遞給隱藏層,隱藏層通過神經元之間聯絡的強度(權重)和傳遞規則(啟用函式)將刺激傳到輸出層,輸出層整理隱藏層處理的後的刺激產生最終結果。若有正確的結果,那麼將正確的結果和產生的結果進行比較,得到誤差,再逆推對神經網中的連結權重進行反饋修正,從而來完成學習的過程。這就是BP

神經網的反饋機制,也正是BPBackPropagation)名字的來源:運用向後反饋的學習機制,來修正神經網中的權重,最終達到輸出正確結果的目的!

    當給定一個訓練樣本(x, y)時,前向傳播的過程:


    在後向傳播中定義了,表示第l層節點j的殘差,即實際觀察值與估計值(擬合值)之間的差。那麼對於第四層:

    而對於前面幾層:

    

    不計算第一層的delta值,因為第一層是訓練資料,不需要考慮誤差。

    下面是BP演算法的虛擬碼:

   

    使用Δ來計算

           

上面j的值是否為零決定著bias regularization項的有無。

3、Backpropagation intuition

反向傳播的具體計算:


對於每一層來說,delta分量都等於後面一層所有的delta加權和,其中權值就是引數theta。

4、Implemention note: Unrolling parameters

主要講引數的向量化以及還原,因為有些高階演算法要求所有引數都要展開成一個長向量的形式。


5、Gradient checking

如何確定你的程式碼是否正確呢?這裡就提出了梯度檢測的方法來確定你的方法是否正確,通過將該方法得到的梯

度值與計算得到的D值進行比較,如果近似相等則表示程式碼正確,否則錯誤。

需要注意

a、實現反向傳播演算法來計算梯度向量DVec(此處是由D(1)D(2)D(3)向量化得到的長向量);

b、實現梯度檢測方法計算得到gradApprox;

c、確保DVec和gradApprox值得近似相等;

d、關閉梯度檢測方法,然後使用反向傳播進行學習。

特別注意:

使用梯度檢測方法進行確認程式碼是否正確後,要關閉梯度檢測方法再進行學習。因為該演算法代價高,複雜度高。所以需要及時關閉,而且這也是不使用該方法來在學習過程中計算梯度的原因。

6、Random initialization

theta的值不能像邏輯/線性迴歸中那樣初始化為0,需要隨機初始化。因為當初始化為0時,所有的節點將會反覆更新為同一個值,不會改變,所以需要隨機初始化。隨機初始化的過程如下:


7、Putting it together


首先要選取一個神經網路的結構(即神經元之間的連線模式)。需要確定的有:

a、輸入節點的個數(特徵X的維數)

b、輸出節點的個數(類的數量)

一般預設只有一個隱藏層,當隱藏層大於一的時候,每個隱藏層節點的數量相同。理論上隱藏層的數量越多越好(深度網路),但數量越多計算量就越大,所以要綜合考慮。

在確定完神經網路之後,按下面的步驟進行訓練:

a、隨機初始化權重值(theta);

b、實現前向傳播來為每個得到對應的

c、實現程式碼來計算得到損失函式J(theta);

d、實現反向傳播來計算偏導數:

下面是具體實現:


e、使用梯度檢測方法計算得到梯度值與反向傳播得到的D值進行比較是否近似相等。如果近似相等則進行下一步,切記關閉梯度檢測演算法;

f、使用梯度下降法或者是高階的優化方法(基於反向傳播)來最小化J(theta)(關於引數theta的方程)。

此時J(theta)—non-convex(非凸函式),所以會得到區域性最小值,但是該區域性最小值也已經非常小。

慢慢積累。

By 信念