見到乙個有意思的討論,在此複述。
無容置疑,歸一化的確可以避免一些不必要的數值問題。輸入變數的數量級未致於會引起數值問題,因為tansig的非線性區間大約在[-1.7,1.7]。意味著要使神經元有效,tansig( w1x1 + w2x2 +b) 裡的 w1x1 +w2x2 +b 數量級應該在 1 (1.7所在的數量級)左右。
這時若輸入較大,就意味著權值必須較小,乙個較大,乙個較小,兩者相乘,就引起數值問題了。
要知道,計算機內的計算為近似計算:如:0.001235 * 42 != 0.042 *1.235,存在誤差。
1、初始化
例如,某個神經元的值為tansig(w1x1+w2x2+b),由於tansig函式只有在[-1.7,1.7]的範圍才有較好的非線性,所以w1x1+w2x2+b的取值範圍就要與 [-1.7,1.7]有交集(實際上需要更細膩的條件),這個神經元才能利用到非線性部分。
我們希望初始化的時候,就把每個神經元初始化成有效的狀態,所以,需要知道w1x1+w2x2+b的取值範圍,也就需要知道輸入輸出資料的範圍。
一般討論初始化方法時,我們都假設它的範圍就是[0,1]或者[-1,1],這樣討論起來會方便很多。若資料已經歸一化的話,能給初始化模組帶來更簡便,清晰的處理思路。
2、梯度
以輸入-隱層-輸出這樣的三層bp為例,我們知道對於輸入-隱層權值的梯度有2ew(1-a^2)*x的形式(e是誤差,w是隱層到輸出層的權重,a是隱層神經元的值,x是輸入),若輸出層的數量級很大,會引起e的數量級很大,同理,w為了將隱層(數量級為1)映身到輸出層,w也會很大,再加上x也很大的話,從梯度公式可以看出,三者相乘,梯度就非常大了,會給梯度的更新帶來數值問題。
3、學習率
由 「2、梯度」 中可知,若不做歸一化,有可能梯度非常大,此時學習率就必須非常小,因此,學習率(學習率初始值)的選擇需要參考輸入的範圍,不如直接將資料歸一化,這樣學習率就不必再根據資料範圍作調整。
4、搜尋軌跡
前面已說過,輸入範圍不同,其對應的 w 的有效範圍就不同。假設 w1 的範圍在 [-10,10],而w2的範圍在[-100,100],梯度每次都前進1單位,那麼在w1方向上每次相當於前進了 1/20,而在w2上只相當於 1/200!**某種意義上來說,在w2上前進的步長更小一些,而w1在搜尋過程中會比w2「走」得更快。這樣會導致,在搜尋過程中更偏向於w1的方向。**所以不歸一化,擬合的時間會明顯增加,甚至不收斂,歸一化則能加快收斂。
源於:
神經網路為什麼要歸一化
神經網路為什麼要歸一化 1.數值問題。無容置疑,歸一化的確可以避免一些不必要的數值問題。輸入變數的數量級未致於會引起數值問題吧,但其實要引起也並不是那麼困難。因為tansig的非線性區間大約在 1.7,1.7 意味著要使神經元有效,tansig w1 x1 w2 x2 b 裡的 w1 x1 w2 x...
神經網路為什麼要歸一化
這裡是分割線 1.數值問題。無容置疑,歸一化的確可以避免一些不必要的數值問題。輸入變數的數量級未致於會引起數值問題吧,但其實要引起也並不是那麼困難。因為tansig的非線性區間大約在 1.7,1.7 意味著要使神經元有效,tansig w1 x1 w2 x2 b 裡的 w1 x1 w2 x2 b 數...
神經網路為什麼要歸一化
這裡是分割線 1.數值問題。無容置疑,歸一化的確可以避免一些不必要的數值問題。輸入變數的數量級未致於會引起數值問題吧,但其實要引起也並不是那麼困難。因為tansig的非線性區間大約在 1.7,1.7 意味著要使神經元有效,tansig w1 x1 w2 x2 b 裡的 w1 x1 w2 x2 b 數...