1. 程式人生 > >機器學習(臺灣李巨集毅版)學習筆記 gradient descent

機器學習(臺灣李巨集毅版)學習筆記 gradient descent

       梯度下降屬於線性迴歸的一個重要的部分。但是這種方法具有侷限性,在一般的情況下,並不能保證找到的區域性最小就是全域性最小。所以這種方法適用於目標函式是凸函式的情況(local minimum == global minimum)。即使是在凸函式中也不能保證最後找到的點就是最小值,這取決於演算法的中止條件(即變化率小於一個定值)和所取的引數λ。所以演算法很可能在找到一個相對平滑而並非最小值的地方以後就終止。

       在梯度下降中,λ的選擇尤為重要。λ偏大的話,演算法會一直徘徊在最小值左右的兩個點而陷入死迴圈;λ偏小的話,會導致梯度下降的速率偏慢。基於這種情況,我們不再將λ設定成為一個定值,而是隨著演算法不斷變化。一般來說,我們選擇先快後慢,即初始的λ較大,而第k次更迭的λ與k-1次的λ成正比,與1+k的開方成反比。現在考慮另一個問題:對於同一個特徵X來說,若w1處的導數值大於w2處的導數值,那麼在w1處移動的距離將會大於在w2處移動的距離,這樣正好滿足了我們對於梯度下降的要求,即越靠近可能是最小值的點時,移動的距離越小。但是對於所有的特徵來說都通用嗎?試想Y=1000X^2 這個函式,相當陡峭,即使是在靠近X=0這個點,附近的導數也很大,這樣依然是很容易越過最小值點而陷入死迴圈。那麼如何解決這個問題呢?我們注意到,這裡涉及到了變化率的大小這個問題,也就是說λ的設定不僅與更迭的次數有關,還與該特徵變化的快慢(即導數的大小)有關係。很明顯,對於導數偏大的特徵,我們需要降低下降的速率,對於導數偏小的特徵,我們需要加快下降的速率。故第k次的λ還與前k-1次的導數平方的累加成反比,為了避免該值過大,我們取其均值的開方放在分母上。

       好的,當自由變數λ設定好以後,又出現了新的問題:如果一個特徵的變化範圍在10000到100000中,而另一個特徵的變化範圍在10^(-9)到10^(-8)中。這樣的情況下,引數w的變化對於小範圍的特徵來說微乎其微,而對於大範圍的引數來說,會更加放大w的變化。而且過大或者過小的特徵的值,不僅會很大程度地影響梯度下降的速率,而且對於設定演算法終止條件也很困難。所以需要進行feature scaling ,來消除特徵本身範圍對於梯度下降的影響。這樣既保證了最後找到的點是全域性相對平滑的點,又保證了梯度下降的速率和準確度。

那麼, 如何來進行feature scaling 呢?其實方法有很多種,關鍵是控制放縮比例。常見的方法是:

       mi 是特徵X的均值,σi 是特徵X的標準差。這樣一來,得到的所有例子的特徵X的新值,均值為0,方差為1。