【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 9_Neural Networks learning


神經網絡的學習(Neural Networks: Learning)

9.1 代價函數 Cost Function

參考視頻: 9 - 1 - Cost Function (7 min).mkv

  假設神經網絡的訓練樣本有𝑚個,每個包含一組輸入 𝑥 和一組輸出信號 𝑦,𝐿 表示神經網絡層數,𝑆𝐼表示每層神經元的個數( 𝑆𝑙 表示輸出層神經元個數),𝑆𝐿代表最后一層中處理單元的個數。
  神經網絡分類分兩種:
  (1)二類分類:𝑆𝐿 = 0, 𝑦 = 0 𝑜𝑟 1表示哪一類;
  (2)𝐾類分類:𝑆𝐿 = 𝑘, 𝑦𝑖 = 1表示分到第 i 類;(𝑘 > 2)

之前定義邏輯回歸的Cost Function如下(前半部分表示hypothesis與真實值之間的距離,后半部分是對參數進行regularization的bias項):

神經網絡的 cost function 同理:

原理都是希望得到預測結果與真實情況的誤差。不同的是結果有k個。hypothesis與真實值之間的距離為 每個樣本—每個個類輸出的加和。

對參數進行regularization的bias項是排除了每一層𝜃0后,每一層的 𝜃 矩陣平方和。即所有參數的平方和。

9.2 反向傳播算法

參考視頻: 9 - 2 - Backpropagation Algorithm (12 min).mkv

為了最小化 J(Θ),需要求偏導。

采用一種反向傳播算法:首先計算最后一層(最右)的誤差,然后再反向(向左)求出各層的誤差,直到倒數第二層(第一層是輸入變量,不存在誤差)。

 

(1)最后一層誤差是激活單元的預測 aj(4) 與實際值 𝑦j之間的誤差( j = 1:𝑘),設其為 𝛿j(4)

            𝛿(4) = 𝑎(4) - 𝑦

(2)計算第三層的誤差:

            𝛿(3) = (𝛩(3))𝑇𝛿(4) ∗ 𝑔′(𝑧(3))

      其中(𝜃(3))𝑇𝛿(4) 則是權重導致的誤差的和, 𝑔′(𝑧(3))是 sigmoid函數的導數,sigmoid函數導數有一個特點:

            𝑔′(𝑧(3)) = 𝑎(3)∗(1−𝑎(3))。

(3)計算第二層的誤差:

            𝛿(2)=(𝛩(2))𝑇𝛿(3)∗𝑔′(𝑧(2))

(4)有了誤差,開始計算代價函數的偏導。假設 𝜆=0(即不做任何正則化處理),有:

  𝑙 :目前所計算的是第幾層。 

  𝑗 :目前層中的激活單元下標(下一層的第 j 個輸入變量的下標)

  𝑖 :下一層中誤差單元的下標(受到權重矩陣中第 𝑖 行影響的下一層中誤差的下標)

 

上面得到了error變量δ的計算,下面來看backpropagation算法的偽代碼

然后計算代價函數的偏導數,公式如下:

9.3 反向傳播算法的直觀理解

參考視頻 : 9 - 3 - Backpropagation Intuition (13 min).mkv

現在說反向傳播模型的學習過程。

首先,前向傳播算法forward propagation 從前往后計算z(j),a(j) 的過程如下:

 然后將原cost function 進行簡化,去掉regularization項,得到 cost(i):

 

 

即對於每一層來說,δ分量都等於后面一層所有的δ的加權和,其中權值就是參數θ

9.4 實現注意:展開參數

參考視頻 : 9 - 4 - Implementation Note_ Unrolling Parameters (8 min).mkv

在Octave中,如果要使用fminc這樣的優化算法來求解權重矩陣,需要將矩陣展開成為向量,再利用算法求出最優解后再重新轉回矩陣。

假設有三個權重矩陣:Theta1,Theta2,Theta3 。下面是將其向量化 unroll into vector,再變回矩陣的方法。

實例代碼如下:

>> Theta1 = ones(10,11) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> Theta2 = 2*ones(10,11) 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 >> Theta3 = 3*ones(1,11) 3 3 3 3 3 3 3 3 3 3 3

轉成向量:

>> thetaVec = [Theta1(:);Theta2(:);Theta3(:)];
>> size(thetaVec) 231 1

轉回矩陣:

>> reshape(thetaVec(1:110),10,11) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> reshape(thetaVec(111:220),10,11) 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 >> reshape(thetaVec(221:231),1,11) 3 3 3 3 3 3 3 3 3 3 3

9.5 梯度檢驗

參考視頻 : 9 - 5 - Gradient Checking (12 min).mkv

為了驗證復雜模型內部是否呀運行正常,我們是用一種叫做 Numerical gradient checking的方法來驗證梯度是否在下降。

對於下面這個J(θ)圖,取θ點左右各一點(θ+ε),(θ-ε),則點θ的導數(梯度)近似等於(J(Θ+ε)-J(θ-ε))/(2ε)。

 因此,針對每個θ,其導數都可以近似為:

將這個近似值,與back-propagation算法中每一步得到的J(θ)的導數D(derivative)進行比較。如果這兩個結果相近,則code正確,否則錯誤。上面描述的算法如下:

步驟:

- 在 back propagation 中計算出J(θ)對θ的導數D,並向量化成Dvec(unroll D(1),D(2),D(3))
- 用 numerical gradient check 方法計算梯度近似值 gradApprox
- 確保這兩個值很接近
-(這一點非常重要)只在測試的時候進行校驗。真正使用 back propagation 進行神經網絡學習的時候,要停止校驗,否則會非常慢

9.6 隨機初始化

參考視頻 : 9 - 6 - Random Initialization (7 min).mkv

之前對於邏輯回歸,我們將參數θ全部初始化為0。 然而對於神經網絡,此方法不可行: 如果第一層參數θ都相同(不管是不是0),意味着第二層的所有激活單元的值會完全相同。

注:這里考了幾道選擇題。

通常初始參數為正負 ε 之間的隨機值,代碼如下:

 

9.7 綜合起來

參考視頻 : 9 - 7 - Putting It Together (14 min).mkv

 選擇神經網絡。通常情況下隱藏層神經單元的個數越多越好。

訓練神經網絡:

1. 參數的隨機初始化
2. 利用正向傳播方法計算所有的  ℎ𝜃(𝑥)
3. 編寫計算代價函數  𝐽 的代碼
4. 利用反向傳播方法計算所有偏導數
5. 利用數值檢驗方法這些偏導

6. 使用優化算法來最小代價函數

神經網絡的直觀表示如下。因為J(𝜃)不是一個凸函數,因此我們可以到達一個局部最小點。

9.8 自主駕駛

參考視頻 : 9 - 8 - Autonomous Driving (7 min).mkv

ALVINN (Autonomous Land Vehicle In a Neural Network) 是一個基於神經網絡的智能系統

 

 

 

 

https://blog.csdn.net/u010223750/article/details/50534451

神經網絡過擬合有兩種情況,可以通過兩種方式解決:

(1)引入Validate 數據集

(2)規則化

加入規則化因子之后,整個模型其實是奔着選取較小的 w 而進化的,因為如果需要損失函數值小的話,一旦選取了比較大的 w,那么只有等式右邊第一項式子的值比較小的情況下才行,因此規則化的目的其實是減輕比較大的 w 值對損失函數的影響,為什么需要這么做,我們假設對於線性回歸而言,有一個數據特別偏離主模型,這樣的話,往往會導致模型受這個影響比較大,從而偏離主模型,這時候就需要抵消這個數據對結果的影響,這就用到了規范化,目的是消除其某些損失函數值過大的點影響,對於神經網絡,正則化的目的是為了消除太大的 w 對結果的影響,其結果就是局部的變化因素(個別 w 的變化)不會影響整個模型的數據,只有對全部模型起變化的因素才能影響到模型的建立,這樣就消除了局部噪聲的影響。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM