天天看點

5.2 梯度下降算法實用技巧(特征縮放)

5.2 梯度下降算法中的實用技巧一(特征縮放)

    這裡我們将會介紹一個稱為特征縮放 (feature scaling) 的方法。如果我們有一個問題,這個問題有許多的特征,如果你能確定不同的特征都處在相近的範圍,我的意思是不同特征的取值處在相近的範圍内,這樣梯度下降算法就能更快的收斂,具體的說,如果你有一個具有兩個特征的問題,x1是房子的面積大小,取值範圍在0-2000平方英尺,x2是卧室的數量,取值範圍是1-5,如果你畫出代價函數J(θ)的輪廓圖。注意,J(θ)是關于θ0、θ1、θ2的函數,但是我們暫時不考慮θ0,但是如果x1的取值範圍遠大于x2的取值範圍,那麼畫出來的輪廓圖就會呈現如下所示的一種形式,會使橢圓更加的瘦長,會是一個又瘦又高的輪廓圖,如果你使用這個代價函數來運作梯度下降的話,需要花很長的一段時間,并且可能來回波動,才能收斂到最小值,在這種情況下一種有效的方法就是特征縮放。

5.2 梯度下降算法實用技巧(特征縮放)

    具體的說(如上圖右邊是所示),就是将特征x1定義為房子的面積除以2000,将特征x2定義為卧室的數量除以5,那麼J(θ)的輪廓圖就會變得更加的圓一些,如果使用這樣的代價函數來執行梯度下降算法的話,可以從數學上證明,梯度下降算法能夠找到一條更捷徑的路徑,來找到全局最小值點。在這個例子中特征值的範圍都在0到1之間,這樣你得到的梯度下降算法将能更快的收斂。

    更通常的說,當我們執行特征縮放的時候,我們通常的目的是将特征值限制到-1到+1的範圍内,特征x0總是等于1,已經在這個範圍内了,但是對于其他特征你可能需要通過除以某個數讓他們處于同一個範圍内。x1它的取值在0和3之間,這沒問題,如果你有另外一個特征取值在-2到+0.5之間,這也沒什麼關系,這也非常接近 -1 到 +1的範圍,這些都可以 。如果你有一個特征,在 -100 到 +100之間,那麼這個範圍跟-1到+1就有很大不同了,是以,這可能是一個不那麼好的特征,類似地,如果你的特征在一個非常非常小的範圍内,比如另外一個特征 x4它的範圍在 0.0001和+0.0001之間,那麼這同樣是一個 比-1到+1小得多的範圍比-1到+1小得多的範圍,是以,我同樣會認為這個特征也不太好。

    你可能認可的範圍,可以大于+1也可以小于-1,但是也别太大或者太小,隻要不是大的太多就可以接受,不同的人有不同的經驗,但是Ng認為如果特征範圍在-3到+3之間,你可以認為它是可以接受的,-1/3到+1/3也是可以接受的。

    除了将特征值除以最大值外, 有時候也會進行一個稱為均值歸一化(mean normalization)的工作,意思是如果你有一個特征x(i),你就用x(i)- u(i)來替換(u表示特征的平均值),這樣做,讓你的特征值具有為0的平均值,當然這不能應用到x0,因為x0總是擁有為1的特征值,它的均值不可能為0。比如房子的大小,取值介于0-2000之間,如果你知道均值是1000,那麼你可以使用x1減去平均值1000,然後除以2000,類似的,對于卧室的多少,假設你知道每間房子的卧室數量的平均值是2,也可以采用類似的方法;在這兩種情況下,你可以計算出,特征值的範圍在-0.5到+0.5之間。

    更一般的公式是,你可以使用如圖中所示的公式(x1 – u1)/ s1 替換x1,其中u1是特征x1的均值,s1是特征x1的範圍(最大值減去最小值)特征縮放并不需要特别的精确,隻是讓梯度下降收斂的更快一點。

5.2 梯度下降算法實用技巧(特征縮放)

    特征歸一化,了解下面這張圖就夠了:(其中si是标準差,在課程中是喲幹的是範圍,即最大值減去最小值,在程式設計練習中使用的是标準差)

5.2 梯度下降算法實用技巧(特征縮放)

總結,這裡介紹了特征縮放的兩種方法,除以最大值和均值歸一化,他們都能夠加快梯度下降算法收斂的速度,這是因為θ在小範圍的範圍下,減小的更加快速。通常将特征縮放之後,将他們的範圍保持在-1到+1或者-0.5到+0.5之内,這并不是一個精确的要求,隻要大概在這個範圍之内就可以了。

繼續閱讀