為什麼要對特徵進行縮放(歸一化)
在Andrew Ng的機器學習課程裡面,講到使用梯度下降的時候應當進行特徵縮放(Feature Scaling)。進行縮放後,多維特徵將具有相近的尺度,這將幫助梯度下降演算法更快地收斂。 為了解釋為什麼特徵縮放會幫助梯度下降演算法更快地收斂,Andrew給了兩幅圖來解釋:
Feature Scaling
Idea: Make sure features are on a similar scale.
E.g.
歸一化前,代價函數關於參數和的關係等高線圖可能如下圖:
而如果進行了,歸一化,那麼其等高線圖可能就變成了下圖:
而如果進行了,歸一化,那麼其等高線圖可能就變成了下圖:
關於等高線圖的變化,Andrew並沒有細說原因,只是直接這麼說了。一種常見的誤解是:
原來和的尺度不一樣,所以等高線圖是狹長的,而歸一化以後,大家尺度(甚至取值範圍)一樣了,等高線圖被壓扁了,所以就是一個圓形了唄。
但是問題在於,等高線圖的變數(即軸)是和,而不是和!對和做的縮放,導致關於和的等高線圖產生的變化根本不是直觀上的那麼一目了然。
本文的目標就在於把這個問題解釋清楚:對和的縮放是怎麼把以,為變數的等高線圖變得更加圓,從而使得梯度下降效率變高的。
首先我們把問題定義一下,我們是要預測房價,目前有兩個特徵:
– : 面積,以平方英尺計,取值範圍在0 ~ 2,000– : 卧室數,取值範圍在0 ~ 5
假設,房價是關於這兩個特徵的線性關係:
那麼,在進行梯度下降的時候,目標最小化的代價函數(Cost Function)則為:
在縮放(scaling)前,由於的尺度比較大(0 ~ 2,000),而的尺度小(0 ~ 5),因此和同等大小的變化,對的影響差距巨大,即對影響要比大很多。進而,會造成對更加敏感(即的單位變化比的單位變化對的影響更大)。因此在等高線圖上,在方向上更扁平,即較小的變化會造成取值的劇烈變化,而在方向上更加狹長,即較大的變化才會造成取值的較大變化。
那麼縮放(scaling)以後,和的尺度是一致的,故和同等大小的變化,對的影響不再含有特徵尺度上的因素,這也同樣反映在上。那麼在等高線圖上的表現就是,在方向上等高線圖會拉長,即對相較於縮放前變得"遲鈍"了。
如果我們只觀察和,那麼二者的關係在進行特徵縮放前後的圖形可能如下:
即關於更加緩和,且在上被拉長了(縮放後,參數的最優解跟縮放前幾乎不會是同一個值,因此上圖中的最小值點對應的值並不相同)。
因此,Andrew的縮放前後的圖形,並不是在(縱軸)方向上被壓扁了,而是在(橫軸)方向上被拉長了!
而從梯度下降迭代上看,每次迭代使用的公式為:
注意到,每次迭代的時候,的更新幅度是和相關的,因此如果某個的尺度相較其他維度特徵大很多的話,勢必造成該維度對應的參數的更新非常劇烈,而其他維度特徵對應的參數更新相對緩和,這樣即造成迭代過程中很多輪次實際上是為了消除特徵尺度上的不一致。
另一個角度,實際上就是當前的梯度方向,它和是相關的,因為對於而言,是它的參數。所以,當我們迭代更新的時候,梯度下降的方向會因特徵的尺度產生劇烈變化,即在尺度大(導致梯度大)的方向上持續迭代。而這種變化顯然不是迭代的目的,它僅僅是為了消除尺度差距上的懸殊。
故,因為的梯度是跟特徵取值相關的,而梯度下降迭代就是不斷在梯度方向上尋找最優點。所以如果特徵在尺度上差距顯著,那麼迭代中就會有一些(甚至大量)輪次主要在抹平尺度上的差異。在理論上,如果迭代輪次足夠多,仍然能夠得到最優解,但在實際中往往會限定一個迭代輪次上限,可能會出現找到的解並不是最優解。
因為要抹平尺度上的差異,迭代到最優解的輪次勢必增加,即表現為常說的"收斂速度慢"。
推薦閱讀:
※機器學習技法筆記3:核函數SVM
※第二章:機器學習對配電網健康指數分析
※複習:PCA有關
※ML6-Keras1 "hello world of deep learning "(李宏毅筆記)
※機器學習基石筆記1:基礎概念
TAG:機器學習 |