為什麼 feature scaling 會使 gradient descent 的收斂更好?
01-04
從實驗室和經驗上看,一般都會做個歸一化什麼的,但是這如何證明呢?或者說他背後的數學原理是什麼?
如果不歸一化,各維特徵的跨度差距很大,目標函數就會是「扁」的:
@王贇 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的時候如同一個老中醫一樣... 呵呵呵呵推薦閱讀: