冒泡~周末愉快鴨!
反向傳播算法(BackPropagation)
概念
1.什么是BP 算法?
BP算法全稱叫作誤差反向傳播(error Back Propagation,或者也叫作誤差逆傳播)算法。BP神經網絡是由一個輸入層、一個輸出層和一個或多個隱層構成的,它的激活函數采用sigmoid函數。在這其中,輸入信號經輸入層輸入,通過隱層計算由輸出層輸出,輸出值與標記值比較,若有誤差,將誤差反向由輸出層向輸入層傳播,在這個過程中,利用梯度下降算法對神經元權值進行調整。
2.為什么要使用BP算法?直接使用梯度下降不行嗎?
不行的,縱然梯度下降神通廣大,卻不是萬能的。梯度下降可以應對帶有明確求導函數的情況,或者說可以應對那些可以求出誤差的情況,比如邏輯回歸,我們可以把它看做沒有隱層的網絡;但對于多隱層的神經網絡,輸出層可以直接求出誤差來更新參數,但其中隱層的誤差是不存在的,因此不能對它直接應用梯度下降,而是先將誤差反向傳播至隱層,然后再應用梯度下降,其中將誤差從末層往前傳遞的過程需要鏈式法則(Chain Rule)的幫助,因此反向傳播算法可以說是梯度下降在鏈式法則中的應用。
舉個例子:
如下圖所示,這是帶有一個隱層的三層神經網絡,
-小女孩→隱藏層節點
-小黃帽→輸出層節點
-哆啦A夢→誤差
小女孩左側接受輸入信號,經過隱層節點產生輸出結果,哆啦A夢則指導參數往更優的方向調整。由于哆啦A夢可以直接將誤差反饋給小黃帽,所以與小黃帽直接相連的左側參數矩陣可以直接通過誤差進行參數優化(實縱線);而與小女孩直接相連的左側參數矩陣由于不能得到哆啦A夢的直接反饋而不能直接被優化(虛棕線)。但由于反向傳播算法使得哆啦A夢的反饋可以被傳遞到小女孩那進而產生間接誤差,所以與小女孩直接相連的左側權重矩陣可以通過間接誤差得到權重更新,迭代幾輪,誤差會降低到最小。(也就是說小男孩得到的是直接誤差,小女孩是間接誤差)
具體過程
接下來將用例子演示整個過程
假設有下圖這樣一個帶權值的網絡層,第一層是輸入層,包含兩個神經元i1,i2,和截距項b1;第二層是隱含層,包含兩個神經元h1,h2和截距項b2,第三層是輸出o1,o2,每條線上標的wi是層與層之間連接的權重,激活函數我們默認為sigmoid函數。
輸入數據 i1=0.05,i2=0.10;
輸出數據 o1=0.01,o2=0.99;
初始權重 w1=0.15,w2=0.20,w3=0.25,w4=0.30;w5=0.40,w6=0.45,w7=0.50,w8=0.55
目標:給出輸入數據i1,i2(0.05和0.10),使輸出盡可能與原始輸出o1,o2(0.01和0.99)接近。
步驟一:前向傳播
通過前向傳播我們得到輸出值為[0.75136079 , 0.772928465],與實際值[0.01 , 0.99]相差還很遠,接下來我們對誤差進行反向傳播,更新權值,重新計算輸出。
步驟二:反向傳播
進行完這一小步之后,需要先引入一個概念:鏈式法則
補充:
3.輸入層---->隱含層的權值更新:
在上文計算總誤差對w5的偏導時,是從out(o1)---->net(o1)---->w5,但是在隱含層之間的權值更新時,是out(h1)---->net(h1)---->w1,而out(h1)會接受E(o1)和E(o2)兩個地方傳來的誤差,所以這個地方兩個都要計算。
進入計算:
此過程具體參考感謝(https://www.cnblogs.com/charlotte77/p/5629865.html)
總結
根據BP算法的過程演示,可以得到BP算法的一般過程:
1. 正向傳播FP(求損失)
此過程中,我們根據輸入的樣本、給定的初始化權重值W和偏置項的值b, 計算最終輸出值以及輸出值與實際值之間的損失值。(注意:如果損失值不在給定的范圍內則進行接下來反向傳播的過程, 否則停止W,b的更新。)
2.反向傳播BP(回傳誤差)
將輸出以某種形式通過隱層向輸入層逐層反傳,并將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此誤差信號即作為修正各單元權值的依據。(主要為: ①隱層到輸出層的參數W的更新 ②從輸入層到隱層的參數W的更新。)
Ending~理解計算和公式還是很重要的鴨!