反向傳播算法(Backpropagation)是目前用來訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:
(1)將訓(xùn)練集數(shù)據(jù)輸入到ANN的輸入層,經(jīng)過隱藏層,最后達(dá)到輸出層并輸出結(jié)果,這是ANN的前向傳播過程;
(2)由于ANN的輸出結(jié)果與實(shí)際結(jié)果有誤差,則計(jì)算估計(jì)值與實(shí)際值之間的誤差,并將該誤差從輸出層向隱藏層反向傳播,直至傳播到輸入層;
(3)在反向傳播的過程中,根據(jù)誤差調(diào)整各種參數(shù)的值;不斷迭代上述過程,直至收斂。
反向傳播算法的思想比較容易理解,但具體的公式則要一步步推導(dǎo),因此本文著重介紹公式的推導(dǎo)過程。
1. 變量定義
上圖是一個(gè)三層人工神經(jīng)網(wǎng)絡(luò),layer1至layer3分別是輸入層、隱藏層和輸出層。如圖,先定義一些變量:
表示第層的第個(gè)神經(jīng)元連接到第層的第個(gè)神經(jīng)元的權(quán)重;
表示第層的第個(gè)神經(jīng)元的輸入,即:
表示第層的第個(gè)神經(jīng)元的輸出,即:
其中表示激活函數(shù)。
2. 代價(jià)函數(shù)
代價(jià)函數(shù)被用來計(jì)算ANN輸出值與實(shí)際值之間的誤差。常用的代價(jià)函數(shù)是二次代價(jià)函數(shù)(Quadratic cost function):
其中,表示輸入的樣本,表示實(shí)際的分類,表示預(yù)測的輸出,表示神經(jīng)網(wǎng)絡(luò)的最大層數(shù)。
3. 公式及其推導(dǎo)
本節(jié)將介紹反向傳播算法用到的4個(gè)公式,并進(jìn)行推導(dǎo)。如果不想了解公式推導(dǎo)過程,請直接看第4節(jié)的算法步驟。
首先,將第層第個(gè)神經(jīng)元中產(chǎn)生的錯(cuò)誤(即實(shí)際值與預(yù)測值之間的誤差)定義為:
本文將以一個(gè)輸入樣本為例進(jìn)行說明,此時(shí)代價(jià)函數(shù)表示為:
公式1(計(jì)算最后一層神經(jīng)網(wǎng)絡(luò)產(chǎn)生的錯(cuò)誤):
其中,表示Hadamard乘積,用于矩陣或向量之間點(diǎn)對點(diǎn)的乘法運(yùn)算。公式1的推導(dǎo)過程如下:
公式2(由后往前,計(jì)算每一層神經(jīng)網(wǎng)絡(luò)產(chǎn)生的錯(cuò)誤):
推導(dǎo)過程:
公式3(計(jì)算權(quán)重的梯度):
推導(dǎo)過程:
公式4(計(jì)算偏置的梯度):
推導(dǎo)過程:
4. 反向傳播算法偽代碼
- 對于訓(xùn)練集中的每個(gè)樣本x,設(shè)置輸入層(Input layer)對應(yīng)的激活值:
,
- 計(jì)算輸出層產(chǎn)生的錯(cuò)誤:
- 使用梯度下降(gradient descent),訓(xùn)練參數(shù):
|