使用反向傳播訓練多層神經網絡的原理
文章《Principles of training multi-layer neural network using backpropagation 》提供了直觀理解反向傳播的完整例子。以下是原文翻譯。
文章描述采用反向傳播算法訓練多層神經網絡的學習過程。為了說明這個過程,使用了具有兩個輸入和一個輸出的三層神經網絡,如下圖所示:
每個神經元由兩部分組成。***部分是輸入信號和權重系數的加權和。第二部分是非線性函數,稱為神經元激活函數。信號e是加權和的輸出(加法器的輸出)信號。y=f(e)是非線性函數(元件)的輸出信號。信號y也是神經元的輸出信號。
要訓練神經網絡,我們需要“訓練數據集”。訓練數據集是由對應目標z(期望輸出)的輸入信號(x_1和 x_2)組成。神經網絡的訓練是一個迭代過程。在每個迭代中,使用來自訓練數據集的新數據修改網絡節點的加權系數。整個迭代由前向計算和反向傳播兩個過程組成。
前向計算:每個學習步驟從來自訓練集的兩個輸入信號開始。前向計算完成之后,我們可以確定每層網絡中每個神經元的輸出信號值(譯者注:隱藏層神經元的誤差是沒有的,因為訓練數據集中沒有隱藏層的目標值)。下圖顯示了信號如何通過網絡傳播,符號w(xm) 表示網絡輸入x_m和神經元n之間的連接權重。符號y_n 表示神經元n的輸出信號。
隱藏層信號傳播。符號w_mn表示神經元m的輸出和后一層神經元n的輸入之間的連接權重 。
輸出層信號傳播:
在下一個算法步驟中,將網絡y的輸出信號與訓練數據集中的輸出值(目標)進行比較。差異稱為輸出層神經元的誤差信號δ。
因為隱層神經元的輸出值(訓練集沒有隱藏層的目標值)是未知的,所以不可能直接計算內部神經元的誤差信號。多年來,一直沒有找到訓練多層神經網絡的有效方法。直到在八十年代中期,反向傳播算法才被制定出來。反向傳播算法是將誤差信號δ(在單個訓練步驟中計算)傳播回所有神經元,對于神經元來說,誤差信號反向傳播。
用于傳播誤差的權重系數w_mn等于前向計算使用的權重系數,只是數據流的方向改變(信號從輸出到輸入一個接一個地傳播)。該技術用于所有網絡層。如果誤差是來自多個神經元,則把它們加起來(譯者注:反向來看,也是加權和)。下圖所示:
計算每個神經元的誤差信號,用于修改每個神經元輸入連接的加權系數。在下面的公式中, df(e)/de表示神經元激活函數的導數。影響權重的因素除了神經元激活函數的導數之外,還有反向傳播的誤差信號,以及神經元輸入方向連接的前一個神經元。(譯者注:這里忽略了推導過程,直接給出權重的修改方法。具體的推導過程參考我的前一篇文章:《誤差反向傳播算法淺解》。原理是一樣的,影響權重的三個因素體現在下面的公式中。)。
其中系數η影響網絡訓練速度。有幾種技術來選擇此參數。***種方法是開始具有較大參數值。當權重系數正在建立時,參數逐漸減少。第二個方法是開始用小參數值進行訓練。在訓練過程中,參數逐漸增加,然后在***階段再次下降。開始具有低參數值的訓練過程能夠確定權重系數。
【本文是51CTO專欄作者石頭的原創文章,轉載請通過作者微信公眾號補天遺石(butianys)獲取授權】