為什麼 feature scaling 會使 gradient descent 的收斂更好?

從實驗室和經驗上看,一般都會做個歸一化什麼的,但是這如何證明呢?或者說他背後的數學原理是什麼?


如果不歸一化,各維特徵的跨度差距很大,目標函數就會是「扁」的:

(圖中橢圓表示目標函數的等高線,兩個坐標軸代表兩個特徵)

這樣,在進行梯度下降的時候,梯度的方向就會偏離最小值的方向,走很多彎路。如果歸一化了,那麼目標函數就「圓」了:

看,每一步梯度的方向都基本指向最小值,可以大踏步地前進。


@王贇 Maigo 已經指出不歸一化會走彎路。這裡進一步解釋一下,為何會這樣。

Full batch 的方式雖然是朝著梯度最大的方向下降,但是當錯誤橫截面不是圓形的時候,前進的方向並不指向錯誤最小點,恰恰相反,指向了切向方向,如圖所示。

對於線性神經元,使用 PCA (Principal Component Analysis) 方法可以去除掉各個成分之間的相關性。

對於球形錯誤面,梯度方向直接指向最小值處。

相關內容詳見 Hinton 的神經網路教程:Neural Networks for Machine Learning by Geoffrey Hinton (6)


我寫過一篇博客,講的是神經網路里的一個特殊的逐層歸一化方法。不過我在第一節先講了歸一化的作用,你可以參考下。

《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》閱讀筆記與實現


推薦 @王峰 回答中提到的文章

還有 Geoffrey Hinton 課程"Neural Networks for Machine Learning" 的lecture6 http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

首先,對於gradient descent演算法來說,learning rate的大小對其收斂速度至關重要。

如果feature的scale不同,理論上不同的feature就需要設置不同的learning rate,但是gradient descent只有一個learning rate,這就導致不同feature的收斂效果不同,從而影響總體的收斂效果。

所以在求解模型之前歸一化不同feature的scale,可以有效提高gradient descent的收斂速度。

除此之外,如果feature的scale相差很大,則會出現scale越大的feature,對模型的影響越大。比如對於multivariate regression, 極端情況下, 有一個特徵的值特別特別大,其他特徵的值都特別特別小,那麼cost function就被這個特別大的特徵主導,甚至退化為univariate。


凸優化裡面有探討過這個問題, 具體證明可參考一般的凸優化課本. 想補充的一點是, 這也是Newton"s method優於gradient descent的一個方面. Newton"s method是affine invariant的, 就是收斂速度不受坐標系變換影響


個人經驗:的確能使收斂速度加快,但是得到的解不一定是最好的!


Gradient descent method 的收斂性是和data的condition number 線性相關。

normalization 是一種precondition的方法,可以改善ill-problem的condition...直接說就是把最大和最小的特徵值差距拉進。幾何上理解上面有朋友的圖很直接和明顯了.

BTW, stochastic gradient 和Gradient Descent + Line Search不可以一概而論,尤其前者如果連收斂都沒法保證的時候,是否能稱為Descent Method都是問題...

Convex 和nonconvex多少也不一樣

搞Machine Learning的還是得學下Optimization姿勢水平不是么,省的調SG的時候如同一個老中醫一樣... 呵呵呵呵


推薦閱讀:

尋找全局最小值和防止過擬合之間是不是矛盾的?

TAG:機器學習 | 梯度下降 |