解讀多層神經(jīng)網(wǎng)絡反向傳播原理
最簡單的神經(jīng)網(wǎng)絡,僅由一個“神經(jīng)元”構成,所謂神經(jīng)網(wǎng)絡就是將許多個單一“神經(jīng)元”聯(lián)結在一起,這樣,一個“神經(jīng)元”的輸出就可以是另一個“神經(jīng)元”的輸入。
文章描述采用反向傳播算法訓練多層神經(jīng)網(wǎng)絡的學習過程。為了說明這個過程,使用了具有兩個輸入和一個輸出的三層神經(jīng)網(wǎng)絡,如下圖所示:
每個神經(jīng)元由兩部分組成。第一部分是輸入信號和權重系數(shù)的加權和。第二部分是非線性函數(shù),稱為神經(jīng)元激活函數(shù)。信號e是加權和的輸出(加法器的輸出)信號。y=f(e)是非線性函數(shù)(元件)的輸出信號。信號y也是神經(jīng)元的輸出信號。
要訓練神經(jīng)網(wǎng)絡,我們需要“訓練數(shù)據(jù)集”。訓練數(shù)據(jù)集是由對應目標z(期望輸出)的輸入信號(x_1和 x_2)組成。神經(jīng)網(wǎng)絡的訓練是一個迭代過程。在每個迭代中,使用來自訓練數(shù)據(jù)集的新數(shù)據(jù)修改網(wǎng)絡節(jié)點的加權系數(shù)。整個迭代由前向計算和反向傳播兩個過程組成。
前向計算:每個學習步驟從來自訓練集的兩個輸入信號開始。前向計算完成之后,我們可以確定每層網(wǎng)絡中每個神經(jīng)元的輸出信號值(譯者注:隱藏層神經(jīng)元的誤差是沒有的,因為訓練數(shù)據(jù)集中沒有隱藏層的目標值)。下圖顯示了信號如何通過網(wǎng)絡傳播,符號w(xm) 表示網(wǎng)絡輸入x_m和神經(jīng)元n之間的連接權重。符號y_n 表示神經(jīng)元n的輸出信號。
隱藏層信號傳播。符號w_mn表示神經(jīng)元m的輸出和后一層神經(jīng)元n的輸入之間的連接權重 。
輸出層信號傳播:
在下一個算法步驟中,將網(wǎng)絡y的輸出信號與訓練數(shù)據(jù)集中的輸出值(目標)進行比較。差異稱為輸出層神經(jīng)元的誤差信號δ。
因為隱層神經(jīng)元的輸出值(訓練集沒有隱藏層的目標值)是未知的,所以不可能直接計算內(nèi)部神經(jīng)元的誤差信號。多年來,一直沒有找到訓練多層神經(jīng)網(wǎng)絡的有效方法。直到在八十年代中期,反向傳播算法才被制定出來。反向傳播算法是將誤差信號δ(在單個訓練步驟中計算)傳播回所有神經(jīng)元,對于神經(jīng)元來說,誤差信號反向傳播。
用于傳播誤差的權重系數(shù)w_mn等于前向計算使用的權重系數(shù),只是數(shù)據(jù)流的方向改變(信號從輸出到輸入一個接一個地傳播)。該技術用于所有網(wǎng)絡層。如果誤差是來自多個神經(jīng)元,則把它們加起來(譯者注:反向來看,也是加權和)。下圖所示:
計算每個神經(jīng)元的誤差信號,用于修改每個神經(jīng)元輸入連接的加權系數(shù)。在下面的公式中, df(e)/de表示神經(jīng)元激活函數(shù)的導數(shù)。影響權重的因素除了神經(jīng)元激活函數(shù)的導數(shù)之外,還有反向傳播的誤差信號,以及神經(jīng)元輸入方向連接的前一個神經(jīng)元。(譯者注:這里忽略了推導過程,直接給出權重的修改方法。具體的推導過程參考我的前一篇文章:《誤差反向傳播算法淺解》。原理是一樣的,影響權重的三個因素體現(xiàn)在下面的公式中。)。
其中系數(shù)η影響網(wǎng)絡訓練速度。有幾種技術來選擇此參數(shù)。第一種方法是開始具有較大參數(shù)值。當權重系數(shù)正在建立時,參數(shù)逐漸減少。第二個方法是開始用小參數(shù)值進行訓練。在訓練過程中,參數(shù)逐漸增加,然后在最后階段再次下降。開始具有低參數(shù)值的訓練過程能夠確定權重系數(shù)。