當前位置: 華文世界 > 科學

徹底弄懂,神經網路的誤差反向傳播演算法

2024-03-27科學

大家好,今天要講的內容是,誤差反向傳播演算法。

誤差反向傳播演算法,是神經網路中的學習難點。

而理解誤差反向傳播演算法,是理解神經網路模型訓練過程的關鍵一環。

希望這個篇文章,能幫助同學們,徹底弄懂誤差反向傳播演算法。

1.誤差反向傳播有什麽用

神經網路的訓練目標,是最小化網路的代價函式E。

為了找到使E取得最小值時的參數值,會使用梯度下降演算法。

而執行梯度下降演算法,就需要計算出E關於網路中各個參數w和b的偏導數:

誤差反向傳播演算法,基於鏈式法則,將E關於參數的偏導數計算,分解為一系列簡單的步驟:

誤差反向傳播從輸出層開始,逐層的向前計算E關於各層之間參數的偏導數,最後到達輸入層。

由於這個過程是從後向前的,因此它被稱為「反向傳播演算法」。

誤差反向傳播演算法,有一個通用的公式:

根據這個公式,可以計算E關於各層之間參數的偏導數:

它是誤差反向傳播演算法的核心公式。

今天我們不討論這個公式的推導,而是使用一個具體的三層神經網路:

舉例說明誤差反向傳播的計算過程。

這裏會具體的計算出,E關於w1到w8,E關於b1到b4的偏導數:

有了這些偏導數,就可以對這個神經網路,執行梯度下降演算法了。

2.神經網路的前向傳播

為了說明反向傳播演算法,需要先弄明白,神經網路前向傳播的計算過程。

在這個過程中,我們將使用計算圖來詳細說明這個神經網路。

在樣例神經網路中,使用sigmoid啟用函式和交叉熵誤差E:

其中x1和x2是輸入的特征值。

a1和a2是第2層神經元的輸出。

p1和p2是第三層的輸出。

另外,使用w1到w8表示8個w參數。

b1到b4表示4個偏置參數。

z1到z4表示4組線性累加和的結果。

3.畫出神經網路的計算圖

首先畫出輸入層到隱藏層的前向傳播計算圖:

其中包括了兩組線性方程式求和,與sigmoid函式計算。

具體來說,在第一組計算中,輸入層的兩個特征x1和x2對應參數w1和w2。

將它們相乘後,再加上偏置b1等於z1,將z1代入到sigmoid中,得到a1。

按照同樣的方式,計算第2組的輸出。

其中,z2=x1*w3+x2*w4+b2,a2=sigmoid(z2)。

這樣就完成了輸入層到隱藏層的計算,結果是a1和a2。

然後畫出隱藏層到輸出層的前向傳播計算圖,其中同樣包括兩組計算:

在第一組計算中,輸入的a1和a2與參數w5和w6相乘,再加上偏置b3,得到z3。

將z3代入到sigmoid,得到輸出層第1個神經元的輸出p1。

同理,可以計算出第2組的結果p2。

我們將這兩組計算圖合並,就得到了神經網路前向傳播的完整計算圖:

為了計算誤差E關於參數的偏導數,還需要將E加到計算圖中:

這裏我們只關註某一個樣本產生的誤差E,從而忽略掉西格瑪求和符號。

在輸出層中,包括兩個神經元,它們的人工標記結果是y1和y2,神經網路的輸出結果是p1和p2。

根據交叉熵誤差,分別計算兩個神經元的誤差,為E1和E2,總誤差E=E1+E2。

這樣,我們就得到了這個三層神經網路的完整計算圖:

接下來,我們要根據這個計算圖,使用鏈式法則。

從後向前,推匯出代價函式E,關於參數w1到w8、b1到b4的偏導數。

這實際上,就是反向傳播演算法的手動計算過程。

4.誤差發現傳播演算法

先來研究神經網路的後半段,也就是w5、6、7、8對整體誤差E產生的影響。

具體以w5為例,說明E關於w5的偏導數的計算過程。

在計算時,需要基於鏈式法則,將E關於w5的偏導數,拆解為E對p1、乘p1對z3、乘z3對w5的偏導數。

5.E關於w5偏導數的詳細計算過程

首先計算E對p1的偏導數:

在計算時,需要基於log函式的求導方法,計算結果為-y1/p1+(1-y1)/(1-p1),其中y1是常數。

然後計算p1對z3的偏導數:

在計算時,需要基於sigmoid函式的求導:

設g(z)為sigmoid函式,g(z)的導數為g(z)*(1-g(z))。

p1=sigmoid(z3),因此p1對z3的偏導數,就是p1*(1-p1)。

最後基於線性方程式,計算z3對w5的偏導數:

它等於w5的系數a1。

將三組計算結果相乘,消去重復的項,就得到了E對於w5的偏導數:

它等於神經元的輸出值p1減標記值y1乘對應的輸入特征a1。

仔細觀察可以發現,這個結果與邏輯回歸中的梯度計算結果是一樣的。

按照同樣的方式,可以計算出E對w6、w7、w8和b3、b4的偏導數:

這種基於鏈式法則,從後向前計算偏導數的方式,就被稱為向後傳播演算法。

接下來,我們繼續推導E對於w1到w4,b1和b2的偏導數。

觀察計算圖的前半部份:

可以發現藍色標記的待求參數,會經過a1和a2,再傳導到E。

因此,如果可以先求出E對a1和a2的偏導數,再基於鏈式法則,就能推匯出E關於藍色參數的偏導數了。

6.E關於a1和a2的偏導數計算

在求E關於a1、a2的偏導數時,會發現z3、z4同時出現在a1、a2到E的路徑上:

這說明a1和a2與z3和z4都是有關系的。

因此我們需要先求出E對z3、z4的偏導數。

再求z3、z4對a1、a2的偏導數,最後合並到一起,得到結果。

我們將中間不相關的變量節點全部省略掉,得到了一個更簡單的計算圖:

其中E對a1的偏導數,可以基於a1、z3、E和a1、z4、E兩條路徑計算。

而E對a2的偏導數,可以基於a2、z3、E和a2、z4、E兩條路徑計算。

我們已經推匯出E關於z3、z4的偏導數,它等於神經元的輸出值p減去該輸出對應的標記值y:

另外,z3和z4對於a1的偏導數,是a1的系數w5和w7。

z3和z4對於a2的偏導數,是a2的系數w6和w8。

求出鏈式法則需要的中間結果後,將它們代入到E關於a1和a2的偏導數公式中,就得到了最終的結果:

有了E關於a1和a2的偏導數後,就可以繼續透過鏈式法則,求出E關於參數w1到w4、b1和b2的偏導數了。

我們以E關於參數w1的偏導數,來說明計算過程:

根據鏈式法則,E對w1的偏導數,等於E對a1、a1對z1、z1對w1這三個偏導數結果的乘積。

其中E對a1的偏導數,已經求出,a1對z1是sigmoid函式求導。

而z1對w1求導,是w1對應的特征x1:

將這三個值相乘,就得到了E對w1偏導數的具體值了:

按照同樣的方法,可以繼續求出E對於w2、w3、w4和b1、b2的偏導數。

這樣我們就使用誤差反向傳播演算法,將E關於神經網路中所有參數的偏導數,都求出來了。

後面可以直接使用這些偏導數,進行梯度下降演算法的叠代。

那麽到這裏,誤差反向傳播演算法就講完了,感謝大家的觀看,我們下節課再會。