在上篇的部落格介紹的“标準BP算法”每次僅針對一個訓練樣例更新連接配接權和門檻值,也就是說,BP算法中的更新規則是基于單個的
推導而得,如果類似的推導出基于累積誤差最小化的更新規則,就得到了累積誤差逆傳播算法。累積BP算法與标準BP算法都很常用(标準BP算法和累積BP算法的差別類似于随機梯度下降(Stochastic gradient descent,簡稱 SGD)于标準梯度下降之間的差別)。一般來說,标準BP算法每次更新隻針對單個樣例,參數更新得非常頻繁,而且對不同樣例進行更新的效果可能出現“抵消”現象。是以,為了達到同樣的累積誤差極小點,标準BP算法往往需要更多次數的疊代。累積BP算法直接針對累積誤差最小化,它在讀取整個訓練集D一遍之後才對參數進行更新,其參數更新的頻率低的多。但在很多任務中,累積誤差下降到一程度之後,進一步下降會非常緩慢,這時标準BP往往會更快獲得較好的了解,尤其是訓練集D非常大時更明顯。
正是由于其強大的表示能力,BP神經網絡經常遭遇過拟合,其訓練誤差持續降低,但測試誤差卻可能上升。
通常有兩種政策來緩解BP網絡的過拟合。第一種政策是“早停”(early stopping):将資料分成訓練集合驗證集,訓練集用來計算梯度、更新連接配接權和門檻值,驗證集用來估計誤差,若訓練集誤差降低但驗證集誤差升高,則停止訓練,同時傳回具有最小驗證集誤差的連接配接權和門檻值。第二種政策是“正則化”(regularization),其基本思想是在誤差目标函數中增加一個用于描述網絡複雜度的部分,例如連接配接權和門檻值的平方和。仍令
表示第k個訓練樣例上的誤差,
表示連接配接權和門檻值,則誤差目标函數(5.16)改變為
其中,
用于對經驗誤差與網絡複雜度這兩項進行折中,常通過交叉驗證法來估計。
參考:
《機器學習》 周志華 著