【吳恩達】機器學習第10章學習收穫
阿新 • • 發佈:2018-12-09
神經網路總結
step1:選擇神經網路架構
確定輸入單元數(一般與訓練集特徵數相符)、輸出單元數、以及隱藏層。如果隱藏層大於1層,那麼所有的隱藏層的單元數應該相等。
如圖:輸出單元為3,輸出單元為4,隱藏層單元數為5。如果訓練集(x,y),y有四個值{1,2,3,4}那麼需要用向量來表示如4可以表示為
step2:初始化權重
在邏輯迴歸或者線性迴歸問題中,我們使用梯度下降方法時,初始化為0.這樣一般沒什麼問題,但是在神經網路中,我們不可以初始化為0,因為這樣在每一次更新中,從輸入單元到隱藏層單元的引數一直都是相等的。(需要再次梳理)這樣會導致神經網路失效。因此我們需要使用隨機函式rand()來初始化
其中,rand(10,11)是生成一個10*11的矩陣,其中矩陣裡面的值位於0~1之間。INIT_EPSILON是自定義的一個值,如上處理之後就讓theta位於了。
step3:實現前向傳播,求得所有x對應的h
分析:為輸入層,按照如上計算,就算出第四層也是最終的h(怎麼知道每個x對應的h??)
step4:求解代價函式J
與邏輯迴歸相比,由於神經網路輸出單元可能不止一個因此需要使用一層來求解每個單元的輸出。除此之外,正規化懲罰項部分:由此存在多個以及上節提及的定義::表示的是第L層第j個單元到第L+1第j+1個單元的權重。因此我需要使用兩次求和符號,兩層之間一共需要求解
step5:使用後向傳播方法求解J()的偏導數:
首先定義:第L層第j個單元的誤差。
例:
注意:沒有,因此輸入層x輸入的是真實的資料,不存在誤差。(不清楚這些推導)
Step6:梯度檢查,確認後向傳播中沒有出現bug
用雙側查分來檢查:
如果雙側差分的結果和後向傳播的結果相近,那麼認為沒有出現bug,則可以使用這個偏導。此時,記得關閉或者禁用梯度檢查,以免拖慢速度影響效率。
step7:使用梯度下降或者其他方法對J進行最小化,得到
這裡使用的偏導是通過後向傳播得到的那個偏導。