在BP神經網絡做非線性方面,爲什麼訓練和測試數據一旦絕對值大於1的時候效果就很差呢?

李鑫


歸一化

有一個步驟叫歸一化(normalization),就是將值壓到[-1, 1]之內。歸一化後訓練的效率更高

所以,既然你發現了

當訓練數據和測試數據在-1到1之間的時候效果還不錯

訓練和測試數據一旦絕對值大於1的時候效果就很差

那解決方案很簡單,直接將輸入數據歸一化就可以。歸一化很簡單,假設你的輸入數據(包括訓練集和測試集)中最大的絕對值為|max|,那你直接把每個輸入數據除以|max|就可以(X = X / |max|)。

實際上,不僅是輸入數據,中間的網絡層的輸出通常也最好是在[-1, 1]之間,所以在很多網絡架構中,中間都會插入很多歸一化層(normalization layer)

為何歸一化效率更高

上面解釋了歸一化的概念,以及如何進行歸一化。從實踐層面上來說,你的問題已經得到解決。不過你也許好奇為什麼歸一化後訓練效率更高?

你提到

訓練迴歸(x的平方)

也就是是訓練的目標是最小化均方誤差(MSE)。換句話說,MSE越接近零越好。MSE的差距會反向傳播,通過網絡層一層層地回傳到輸入層。

所以,一方面,不管你輸入層怎麼樣,最終的網絡層的權重應該是在零周圍絕對值較小的數(比如位於[-1, 1]之間),這樣對MSE方面的差距才會比較敏感。舉個極端的例子,MSE減少了0.1——這其實已經是相當大的變動了,但是網絡層的權重都是什麼2000、3000的,那MSE變動導致的那一點更新對權重而言根本感覺不大——所以說,梯度爆炸是不好的。。另一方面,既然輸出這一端權重是,比方說,[-1, 1]之間,而你輸入那段範圍遠遠大於[-1, 1],那其中的網絡層必須至少有一層權重超出[-1, 1]的範圍(除非你的激活函數很奇葩,有放大作用,但你用的ReLU負值歸零,正值保留 ,可沒有放大作用),換言之,

需要梯度爆炸,輸入層和輸出層才接得起來

那梯度都爆炸了,就別指望訓練效率高了。


分享到:


相關文章: