本文翻譯自 《Principles of training multi-layer neural network using backpropagation 》。
這篇文章講了用反向傳播(backpropagation)算法的多層神經網絡訓練過程。為了說明這個過程,使用了具有兩個輸入和一個輸出的三層神經網絡,如下圖所示:
每個神經元由兩個單元組成。第一單元計算所有輸入信號與權重系數乘積的和。第二單元是一個非線性函數,稱為神經元激活函數。信號 \(e\) 是加法器的輸出信號, \(y = f(x)\) 是非線性函數的輸出信號。信號 \(y\) 也就是神經元的輸出信號。
我們需要訓練數據集來訓練神經網絡。訓練數據集由帶有相應標簽(期望輸出) \(z\) 的輸入信號( \(x_1\) 和 \(x_2\) )組成。網絡訓練是一個迭代過程。在每個迭代中,使用來自訓練數據集的新數據修改節點的加權系數。使用下面描述的算法計算修改:每個教學步驟從強制來自訓練集的兩個輸入信號開始。在這個階段之后,我們可以確定每個網絡層中每個神經元的輸出信號值。下圖顯示了信號如何通過網絡傳播,符號 \(w_{(xm)n}\) 表示輸入層網絡輸入 \(x_m\) 和神經元 \(n\) 之間的連接的權重。符號 \(y_n\) 表示神經元 \(n\) 的輸出信號。
通過隱藏層傳播信號。符號 \(w_{(xm)n}\) 表示神經元m的輸出和下一層神經元 \(n\) 的輸入之間的連接的權重。
通過輸出層傳播信號。
在下一個算法步驟中,將網絡 \(y\) 的輸出信號與在訓練數據集中找到的所需輸出值(目標)進行比較。差異稱為輸出層神經元的誤差信號 \(δ\) 。
因為中間層神經元的輸出值是未知的,所以不可能直接計算中間層神經元的誤差。一直以來都沒找到有效的方式訓練多層神經網絡。直到八十年代中期,反向傳播算法才被提出。這個想法是將誤差信號 \(δ\) (在每次訓練中計算)傳播回所有神經元,輸出信號又被輸入到之前的神經元。
在反向傳播過程中(信號從輸出到輸入一個接一個地傳播)。中間層神經元的誤差信號等於所有它輸出指向的下一層神經元的誤差和。用於累加誤差的權重系數 \(w_{(xm)n}\) 等於計算輸出值時使用的權重系數。如下圖:
最終每個神經元輸入節點的權重系數將被修改。在下面的公式中, \(\frac{d f(e)}{d e}\) 表示當前計算新權重系數神經元激活函數的導數。
系數 \(η\) 影響網絡訓練速度。有幾種方式來選擇此系數 \(η\) 。第一種方法是在開始訓練時設置較大的系數 \(η\) ,當權重系數不斷修正時,系數 \(η\) 逐漸減少。第二個更復雜的方法是開始用小系數 \(η\) 進行訓練。在訓練過程中,當誤差較大時系數 \(η\) 會增加,然后在最后階段再次下降。在訓練的開始具有較低的系數 \(η\) 可以確定權重系數的正負。