哲哲的ML筆記(十八:反向傳播)

正向傳播

在之前介紹的通過神經網絡預測結果,我們使用的其實是一種正向傳播方法,從第一層開始正向一層一層進行計算,直到最後一層的h_\theta(x)


現在,爲了計算代價函數的偏導數\frac{\mathrm{d} J }{\mathrm{d} \theta^{l}_{ij}} >0,我們需要採用一種反向傳播算法,也就是首先計算最後一層的誤差,然後再一層一層反向求出各層的誤差,直到倒數第二層。 以一個例子來說明反向傳播算法。

反向傳播

  1. 不考慮正則
    假設我們的訓練集只有一個樣本(x^1,y^1),我們的神經網絡是一個四層的神經網絡,考慮4分類問題
    K=4, L=4,s_L=4,畫出圖來和上面正向傳播的圖一樣
    引入誤差因子\delta
    從最後一層開始計算,用\delta表示預測值與實際值的差距,y=\delta=a^4-y 也可以看成 \delta^4_j=a^4_j-y
    \delta^4計算前一層的誤差\delta^3=(\Theta^3)^T\delta^4.*g^{'}(z^3)(注意這裏的\Theta不取\theta^3_{10}、\theta^3_{20}…)
    其中g^{'}(z^3)=z^3.*(1-z^3)
    同理,\delta^2=(\Theta^2)^T\delta^3.*g^{'}(z^2)
    第一層是輸入層,不存在誤差
    按照上圖的網絡結構,\Theta^3\in 4*5, \delta^4\in 4,g^{'}(z^3)\in 5

先不做正則化處理,\frac{\mathrm{d} J }{\mathrm{d} \Theta^{l}_{ij}} =a^l_j\delta^{l+1}_i
重要的是清楚地知道上面式子中上下標的含義:
l代表目前所計算的是第幾層。
j代表目前計算層中的激活單元的下標,也將是下一層的第j個輸入變量的下標。
i 代表下一層中誤差單元的下標,是受到權重矩陣中第i行影響的下一層中的誤差單元的下標。

  1. 考慮正則
    \Delta^l_{ij}表示整個誤差矩陣,第l層的第i個激活單元受到第j個參數影響而導致的誤差
    首先用正向傳播方法計算出每一層的激活單元,利用訓練集的結果與神經網絡預測的結果求出最後一層的誤差,然後利用該誤差運用反向傳播法計算出直至第二層的所有誤差。

    代價函數的偏導數\frac{\mathrm{d} J }{\mathrm{d} \Theta^{l}_{ij}} =D^l_{ij}
    D^l_{ij}=\frac{1}{m}(\Delta^l_{ij}+\lambda\Theta^l_{ij}), j\neq0
    D^l_{ij}=\frac{1}{m}(\Delta^l_{ij}), j=0

反向傳播的直觀理解

先從下圖回顧一下前向傳播,一個4層的神經網絡,以圖中的第3層的第1個激活單元z^3_1/a^3_1爲例


反向傳播就按照上面這個過程反過來,從最後一層開始,往前逐層計算\delta

反向傳播算法的目的就是算出梯度下降的方向,而梯度下降的過程就是沿着方向下降,一直到局部最優點


\Theta的初始化

初始所有參數爲0,這樣的初始方法對於邏輯迴歸來說是可行的,但是對於神經網絡來說是不可行的。如果我們令所有的初始參數都爲0,這將意味着我們第二層的所有激活單元都會有相同的值。同理,如果我們初始所有的參數都爲一個非0的數,結果也是一樣的。

通常初始參數爲正負ε之間的隨機值,比如我們要隨機初始一個尺寸爲10×11的參數矩陣

神經網絡使用小結

  1. 選擇網絡結構,即決定選擇多少層以及決定每層分別有多少個單元。
    第一層的單元數即我們訓練集的特徵數量。
    最後一層的單元數是我們訓練集的結果的類的數量。
    如果隱藏層數大於1,確保每個隱藏層的單元個數相同,通常情況下隱藏層單元的個數越多越好。
  2. 訓練神經網絡:
    2.1 參數的隨機初始化
    2.2 利用正向傳播方法計算所有的h_\theta(x^i)
    2.3 編寫計算代價函數J的代碼
    2.4 利用反向傳播方法計算所有偏導數\frac{\mathrm{d} J }{\mathrm{d} \theta^l_{ij}}
    2.5 利用數值檢驗方法檢驗這些偏導數
    2.6 使用優化算法來最小化代價函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章