梯度下降中的特徵值縮放/均值歸一化以及學習率的選擇

特徵縮放(feature scaling)

其中,特徵縮放(feature scaling)大致的思路是這樣的:梯度下降算法中,在有多個特徵的情況下,如果你能確保這些不同的特徵都處在一個相近的範圍,這樣梯度下降法就能更快地收斂。

舉個例子來說明:

x1=size(0−2000)feet2x1=size(0−2000)feet2 
x2=臥室的數量(1−5)x2=臥室的數量(1−5)

假如你有一個具有兩個特徵的問題,其中x1x1是房屋面積大小,它的取值在0到2000之間;x2x2是臥室的數量,可能這個值的取值範圍在1到5之間。其代價函數J(θ)J(θ)是一個關於參數θ0,θ1和θ2θ0,θ1和θ2的函數。但這裏我們暫時不考慮θ0θ0並假想一個函數的變量只有θ1和θ2θ1和θ2。

如果x1x1的取值範圍遠遠大於x2x2的取值範圍的話,那麼最終畫出來的代價函數J(θ)J(θ)的輪廓圖就會呈現出這樣一種非常偏斜並且橢圓的形狀:

這裏寫圖片描述

如果你用這個代價函數來運行梯度下降的話,你要得到梯度值最終可能需要花很長一段時間,並且可能會來回波動,然後會經過很長時間最終才收斂到全局最小值。

這裏寫圖片描述

事實上如果這些輪廓再被放大一些的話,如果你畫的再誇張一些把它畫的更細更長,那麼可能情況會更糟糕,梯度下降的過程可能更加緩慢,需要花更長的時間反覆來回振盪,最終才找到一條正確通往全局最小值的路。

在這樣的情況下一種有效的方法是進行特徵縮放(feature scaling)。

具體來說把特徵xx定義爲:

x1=size(feet2)2000x1=size(feet2)2000

x2=臥室的數量5x2=臥室的數量5

通過這樣的變化,表示代價函數J(θ)J(θ)的輪廓圖的形狀就會變得偏移沒那麼嚴重,可能看起來更圓一些了。

這裏寫圖片描述

如果你用這樣的代價函數來執行梯度下降的話,那麼可以從數學上來證明梯度下降算法將會找到一條更捷徑的路徑通向全局最小,而不是像剛纔那樣 沿着一條讓人摸不着頭腦的路徑,來找到全局最小值。

因此在這個例子中,通過特徵縮放,我們最終得到的兩個特徵x1x1和 x2x2都在0和1之間,這樣你得到的梯度下降算法就會更快地收斂。

更一般地,我們執行特徵縮放時,我們通常的目的是將特徵的取值約束到−1到+1的範圍內。其中,特徵x0x0總是等於1,因此這已經是在這個範圍內了,但對於其他的特徵,你可能需要通過除以不同的數來讓它們處於同一範圍內。

−1和+1這兩個數字並不是太重要,所以如果你有一個特徵x1x1它的取值在0 ~ 3之間,這沒問題 如果你有另外一個特徵取值在-2 ~ +0.5之間,這也沒什麼關係,因爲這也非常接近-1 ~ +1的範圍。

但如果你有另一個特徵x3,假如它的範圍在-100 ~ +100之間,那麼這個範圍跟-1 ~ +1就有很大不同了。所以這可能是一個不那麼好的特徵。類似地,如果你的特徵在一個非常非常小的範圍內,比如另外一個特徵x4,它的範圍在-0.0001 ~ +0.0001之間,那麼這同樣是一個比-1 ~ +1小得多的範圍,因此我同樣會認爲這個特徵也不太好。所以可能你認可的範圍,也許可以大於或者小於-1 ~ +1,但是也別太大或太小,只要與-1 ~ +1範圍偏差不多就可以接受。

因此,總的來說不用過於擔心你的特徵是否在完全相同的範圍或區間內,但是隻要它們足夠接近的話,梯度下降法就會正常地工作。

均值歸一化(mean normalization)

 

特徵縮放的範圍:一般把特徵的範圍縮放到-1到1,和這接近就行,沒必要同一範圍。梯度下降就能很好的工作。如下圖所示,x1 的範圍爲0到3,x2的範圍爲-2到0.5都是可以的。但不能相差的很大,-100到100則是不可以的。
 
 
 
特徵縮放的方法:直接先看圖再解釋,主要是均值歸一化
 
 
 
一般的均值歸一化公式爲: ,其中爲均值,s爲特徵的範圍,即max-min。也可以用標準差。
 
其實歸一化主要有兩種方法:
  • 第一種是min-max標準化(Min-Max Normalization)
它把原始數據映射到[0-1]之間,公式爲:
 
  • 第二種是0均值標準化(z-score標準化)
公式爲:
 
其中,爲均值,標準差。標準差是方差的開方,把標註差公式也貼上來吧:
這兩種歸一化方法的適用場景爲:
  • 在不涉及距離度量、協方差計算、數據不符合正太分佈的時候,可以使用第一種方法或其他歸一化方法。比如圖像處理中,將RGB圖像轉換爲灰度圖像後將其值限定在[0 255]的範圍
  • 在分類、聚類算法中,需要使用距離來度量相似性的時候、或者使用PCA技術進行降維的時候,第二種方法(Z-score standardization)表現更好。

 

 

 

2. 學習速率

梯度下降算法中,最合適即每次跟着參數θ變化的時候,J(θ)的值都應該下降 到目前爲止,我們還沒有介紹如何選擇學歷速率α,梯度下降算法每次迭代,都會受到學習速率α的影響

  1. 如果α較小,則達到收斂所需要迭代的次數就會非常高;
  2. 如果α較大,則每次迭代可能不會減小代價函數的結果,甚至會超過局部最小值導致無法收斂。如下圖所示情況
687474703a2f2f696d672e6d792e6373646e2e6e65742f75706c6f6164732f3230313230392f30362f313334363930323330305f343137392e706e67uploading.4e448015.gif轉存失敗重新上傳取消

觀察下圖,可以發現這2種情況下代價函數 J(θ)的迭代都不是正確的

687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f672f3636333836342f3230313431302f3237323230313135333738333131302e706e67uploading.4e448015.gif轉存失敗重新上傳取消

  1. 第一個圖,曲線在上升,明顯J(θ)的值變得越來越大,說明應該選擇較小的α
  2. 第二個圖,J(θ)的曲線,先下降,然後上升,接着又下降,然後又上升,如此往復。通常解決這個問題,還是選取較小的α

根據經驗,可以從以下幾個數值開始試驗α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …

α初始值位0.001, 不符合預期乘以3倍用0.003代替,不符合預期再用0.01替代,如此循環直至找到最合適的α

然後對於這些不同的 α 值,繪製 J(θ)隨迭代步數變化的曲線,然後選擇看上去使得 J(θ)快速下降的一個 α 值。

所以,在爲梯度下降算法選擇合適的學習速率 α 時,可以大致按3的倍數再按10的倍數來選取一系列α值,直到我們找到一個值它不能再小了,同時找到另一個值,它不能再大了。其中最大的那個 α 值,或者一個比最大值略小一些的α 值 就是我們期望的最終α 值。

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章