標籤:

為什麼要對特徵進行縮放(歸一化)

在Andrew Ng的機器學習課程裡面,講到使用梯度下降的時候應當進行特徵縮放(Feature Scaling)。進行縮放後,多維特徵將具有相近的尺度,這將幫助梯度下降演算法更快地收斂。 為了解釋為什麼特徵縮放會幫助梯度下降演算法更快地收斂,Andrew給了兩幅圖來解釋:

Feature Scaling

Idea: Make sure features are on a similar scale.

E.g.

x_1 = size; (0-2000 feet^2)

x_2 = number, of, bedrooms; (1-5)

歸一化前,代價函數J(	heta)關於參數	heta_1	heta_2的關係等高線圖可能如下圖:

而如果進行了,歸一化,那麼其等高線圖可能就變成了下圖:

而如果進行了,歸一化,那麼其等高線圖可能就變成了下圖:

關於等高線圖的變化,Andrew並沒有細說原因,只是直接這麼說了。一種常見的誤解是:

原來x_1x_2的尺度不一樣,所以等高線圖是狹長的,而歸一化以後,大家尺度(甚至取值範圍)一樣了,等高線圖被壓扁了,所以就是一個圓形了唄。

但是問題在於,等高線圖的變數(即軸)是	heta_1theta_2,而不是x_1x_2x_1x_2做的縮放,導致J(	heta)關於	heta_1	heta_2的等高線圖產生的變化根本不是直觀上的那麼一目了然。

本文的目標就在於把這個問題解釋清楚:x_1x_2的縮放是怎麼把以	heta_1,	heta_2為變數的J(	heta)等高線圖變得更加圓,從而使得梯度下降效率變高的。

首先我們把問題定義一下,我們是要預測房價,目前有兩個特徵:

x_1: 面積,以平方英尺計,取值範圍在0 ~ 2,000

x_2 : 卧室數,取值範圍在0 ~ 5

假設,房價是關於這兩個特徵的線性關係:

y = 	heta_0 + 	heta_1x_1 + 	heta_2x_2

那麼,在進行梯度下降的時候,目標最小化的代價函數(Cost Function)則為:

J(	heta) = frac{1}{2m}sum_{i=1}^m (h_	heta(x^{(i)})-y^{(i)})^2

在縮放(scaling)前,由於x_1的尺度比較大(0 ~ 2,000),而x_2的尺度小(0 ~ 5),因此	heta_1	heta_2同等大小的變化,對y的影響差距巨大,即	heta_1y影響要比	heta_2大很多。進而,會造成J(	heta)	heta_1更加敏感(即	heta_1的單位變化比	heta_2的單位變化對J(	heta)的影響更大)。因此在等高線圖上,在	heta_1方向上更扁平,即較小的變化會造成J(	heta)取值的劇烈變化,而在	heta_2方向上更加狹長,即較大的變化才會造成J(	heta)取值的較大變化。

那麼縮放(scaling)以後,x_1x_2的尺度是一致的,故	heta_1	heta_2同等大小的變化,對y的影響不再含有特徵尺度上的因素,這也同樣反映在J(	heta)上。那麼在等高線圖上的表現就是,在	heta_1方向上等高線圖會拉長,即J(	heta)	heta_1相較於縮放前變得"遲鈍"了。

如果我們只觀察	heta_1J(	heta),那麼二者的關係在進行特徵縮放前後的圖形可能如下:

	heta_1關於J(	heta)更加緩和,且在	heta_1上被拉長了(縮放後,參數	heta的最優解跟縮放前幾乎不會是同一個值,因此上圖中J(	heta)的最小值點對應的	heta_1值並不相同)。

因此,Andrew的縮放前後的圖形,並不是在	heta_2(縱軸)方向上被壓扁了,而是在	heta_1(橫軸)方向上被拉長了!

而從梯度下降迭代上看,每次迭代使用的公式為:

	heta_j := 	heta_j - alphafrac{1}{m}sum_{i=1}^m (h_	heta(x^{(i)})-y^{(i)})x_j^{(i)}

注意到,每次迭代的時候,	heta_j的更新幅度是和x_j相關的,因此如果某個x_j的尺度相較其他維度特徵大很多的話,勢必造成該維度對應的參數	heta_j的更新非常劇烈,而其他維度特徵對應的參數更新相對緩和,這樣即造成迭代過程中很多輪次實際上是為了消除特徵尺度上的不一致。

另一個角度,frac{1}{m}sum_{i=1}^m (h_	heta(x^{(i)})-y^{(i)})x_j^{(i)}實際上就是當前	heta_j的梯度方向,它和x_j是相關的,因為對於而言,x_j是它的參數。所以,當我們迭代更新	heta_j的時候,梯度下降的方向會因特徵x_j的尺度產生劇烈變化,即在尺度大(導致梯度大)的方向上持續迭代。而這種變化顯然不是迭代的目的,它僅僅是為了消除尺度差距上的懸殊。

故,因為	heta的梯度是跟特徵x取值相關的,而梯度下降迭代就是不斷在梯度方向上尋找最優點。所以如果特徵在尺度上差距顯著,那麼迭代中就會有一些(甚至大量)輪次主要在抹平尺度上的差異。在理論上,如果迭代輪次足夠多,仍然能夠得到最優解,但在實際中往往會限定一個迭代輪次上限,可能會出現找到的解並不是最優解。

因為要抹平尺度上的差異,迭代到最優解的輪次勢必增加,即表現為常說的"收斂速度慢"。


推薦閱讀:

機器學習技法筆記3:核函數SVM
第二章:機器學習對配電網健康指數分析
複習:PCA有關
ML6-Keras1 "hello world of deep learning "(李宏毅筆記)
機器學習基石筆記1:基礎概念

TAG:機器學習 |