coursera機器學習課程第五週——課程筆記
第五週課程學習結束,一直都是邊上課邊做筆記(紙質),沒有想過在這裡再梳理一遍然後將筆記整理出來,考慮之後覺得這一步很重要,可以藉此對學過的這一週所有知識做一個梳理,方便自己更好的理解這些知識,而且這些筆記放在部落格裡也方便自己以後的回顧,所以要堅持將筆記做下去,待到所有課程結束之後再把前四周的課程筆記整理寫到這裡。
首先上週課程介紹了神經網路的結構和前向傳播過程(feed forward),瞭解了神經網路是如何進行預測的;本週介紹了cost function作為結果比較的標準以及backpropagation方法作為錯誤修改的方法。
1、Cost function
假設給定m個樣本,分別是:
當遇到二分類問題時:;
當遇到K分類問題時:(y的值應該用這種0-1矩陣表示)
邏輯迴歸和神經網路的損失函式比較(有正則化項,但不包括bias terms):
我們知道,邏輯迴歸一般用於二分類問題,但神經網路多用於K分類問題,根據邏輯迴歸方法的損失函式提出了神經網路的損失函式。需要注意的是,正則化項均不包括bias terms。
2、Backpropagation algorithm
神經網路中,我們需要最小化損失函式需要求的值有:、。
下面先來介紹一下BP神經網路,下面是神經網路的示意圖:
Layer1
簡單的描述就是,輸入層將刺激傳遞給隱藏層,隱藏層通過神經元之間聯絡的強度(權重)和傳遞規則(啟用函式)將刺激傳到輸出層,輸出層整理隱藏層處理的後的刺激產生最終結果。若有正確的結果,那麼將正確的結果和產生的結果進行比較,得到誤差,再逆推對神經網中的連結權重進行反饋修正,從而來完成學習的過程。這就是BP
當給定一個訓練樣本(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 信念