1. 程式人生 > >【吳恩達】機器學習第10章學習收穫

【吳恩達】機器學習第10章學習收穫

神經網路總結

step1:選擇神經網路架構

確定輸入單元數(一般與訓練集特徵數相符)、輸出單元數、以及隱藏層。如果隱藏層大於1層,那麼所有的隱藏層的單元數應該相等。

如圖:輸出單元為3,輸出單元為4,隱藏層單元數為5。如果訓練集(x,y),y有四個值{1,2,3,4}那麼需要用向量來表示如4可以表示為[0 0 0 1]^T

step2:初始化權重

在邏輯迴歸或者線性迴歸問題中,我們使用梯度下降方法時,初始化\theta為0.這樣一般沒什麼問題,但是在神經網路中,我們不可以初始化\theta為0,因為這樣在每一次更新中,從輸入單元到隱藏層單元的引數一直都是相等的。(需要再次梳理)這樣會導致神經網路失效。因此我們需要使用隨機函式rand()來初始化\theta

.我們將\theta放在一個小的區間[-\varepsilon ,\varepsilon ]裡。

其中,rand(10,11)是生成一個10*11的矩陣,其中矩陣裡面的值位於0~1之間。INIT_EPSILON是自定義的一個值,如上處理之後就讓theta位於[-\varepsilon ,\varepsilon ]了。

step3:實現前向傳播,求得所有x對應的h

分析:a^{(1)}為輸入層,按照如上計算,就算出第四層也是最終的h(怎麼知道每個x對應的h??)

step4:求解代價函式J

與邏輯迴歸相比,由於神經網路輸出單元可能不止一個因此需要使用一層\sum_{k=1}^{K}來求解每個單元的輸出。除此之外,正規化懲罰項部分:由此存在多個\theta以及上節提及的定義:\theta_{ji}^{l}:表示的是第L層第j個單元到第L+1第j+1個單元的權重。因此我需要使用兩次求和符號,兩層之間一共需要求解S_{l}*(S_{l}+1)

\theta,然後再從層數進行求和。

step5:使用後向傳播方法求解J(\theta)的偏導數:

首先定義\delta _{j}^{l}:第L層第j個單元的誤差。

例:\delta _{j}^{4}=a_{j}^{4}-y_{j}

注意:沒有\delta ^{1},因此輸入層x輸入的是真實的資料,不存在誤差。(不清楚這些推導)

Step6:梯度檢查,確認後向傳播中沒有出現bug

用雙側查分來檢查\frac{\partial J(\theta ) }{\partial \theta }

如果雙側差分的結果和後向傳播的結果相近,那麼認為沒有出現bug,則可以使用這個偏導。此時,記得關閉或者禁用梯度檢查,以免拖慢速度影響效率。

step7:使用梯度下降或者其他方法對J進行最小化,得到\theta

這裡使用的偏導是通過後向傳播得到的那個偏導。