BP神經網絡基本概念:
1.代價函數:神經網絡的訓練過程就是通過代價函數最小化(J)擬合出最優參數(weight)
【神經網絡的代價函數其實就是一個指標,表明用模型對樣本的擬合程度,可以類比成模型的預測值h(x)和樣本輸出yi的差值的方差(待確定)】
【代價函數最小化可以通過梯度下降法或者反向傳播算法實現。分析兩者優劣】
【神經網絡的代價函數是一個非凸函數,意味着使用優化算法有可能會陷入局部最優解】
【代價函數中的正則項如何理解;可以對比ogistic回歸公式中正則項功能(避免參數過擬合)】
2.反向傳播(Backpropagation)過程描述:
i) 將前向傳播中得到的神經元值和權重值、最后一層輸出值(預測值hi和樣本值yi的誤差作為輸入,
ii) 計算出隱藏層中各個神經元的誤差,累計誤差;【相關公式計算】
iii) 輸出為代價函數J(theta)對權重theta_i的偏導數。
吳恩達機器學習反向傳播過程中的誤差計算
各層各個神經元誤差詳細公式
累計誤差公式
不帶正則項的偏導數公式
帶正則項的偏導數公式
吳恩達機器學習反向傳播算法偽碼
3.向量展開:神經網絡訓練過程中參數向量/矩陣的轉化。【作為優化算法的輸入時,參數轉化為向量;作為前向/反向傳播輸入時,參數采用矩陣形式】
參數的向量和矩陣轉換的matlab實現
向量轉換在算法中的應用位置
4.梯度檢驗:因為反向傳播過程中結果可能會表面看起來合理【合理指的是代價函數在優化過程中變小】,但其實是存在bug的,導致有bug的BP算法和沒有bug的BP算法誤差可能會比較大。所以需要有梯度檢驗的步驟,梯度算法和BP算法的作用相同,都是算出代價函數J(theta)的偏導數,但是梯度法過程中不容易出現誤差,但是運算慢;BP算法實現過程中容易出現錯誤,但是運算快;所以在編程實現BP算法時,用梯度算法算出的偏導數和BP算法得出的導數值相比,看是否基本相等(只有幾位小數的差別)【所謂梯度檢驗】。在確定BP程序沒有錯誤后,再用來進行神經網絡的訓練【訓練過程中用BP算法,不用梯度算法】
梯度法:某一點導數的數值逼近
梯度法matlab公式
對向量形式的theta求偏導
關於梯度檢驗的意見
5.隨機初始化:常見的初始化是將所有參數初始化為0,但是如果在神經網絡算法中零初始化會導致:上一層傳輸給下一層第一個神經元的所有參數和上一層傳輸給下一層第二個神經元的所有參數完全一樣,進而導致單個層中的每個神經元值都是一樣的,導致特征冗余。並且反向傳播過程中同一層各個神經元的誤差也完全一樣,進而偏導數也完全一樣。
【單個神經元可以看作是新構造的一個復雜特征】
若零初始化,則同色系的權重參數相等
隨機初始化的matlab實現【epsilon可以取10^-4】
6.神經網絡框架構建:輸入層unit個數有樣本的特征數決定;隱藏層層數一般為一層,也可以是2、3、4層等,層數越多表示神經網絡越深,計算量越大;隱藏層單層unit個數一般是輸入層unit的倍數,可以是1、2、3倍等;unit個數越多,重構特征越多,能夠擬合出越復雜的非線性函數,但是計算代價越大。
神經網絡常見框架
7.訓練一個神經網絡步驟
①隨機初始化權重系數theta
②前向傳播算法計算出h(xi)和各個unit參數值ai(l);
③計算出誤差最后一層的誤差δ(final_l),再利用反向傳播算法計算出各層的unit的誤差δi(l)
④公式求出每層誤差Δ=Δ’+δ*(a)T和代價函數的偏導數,輸出Dvec【differential vector】
⑤梯度算法檢驗BP算法的准確性
⑥將前向傳播和反向傳播結合,用優化算法對代價函數求解最小值。
output of forward_propagation
output of back_propagation
output of optimization algorithm
【初次實現用簡單的for循環】
【優化算法可以是梯度下降法或其他比較高級的優化算法】
【關於的梯度下降法和之前求導數的梯度法和反向傳播算法的關系:梯度法和反向傳播算法的作用就是算出梯度下降法步驟中所需要的偏導數,換句話說代價函數的最小化通過優化算法的步驟求解,步驟中的偏導數用梯度法或反向傳播算法計算得到。】
參考資料:
1.https://www.bilibili.com/video/BV164411S78V?p=56,B站吳恩達機器學習視頻P43-P56