[斯坦福大學2014機器學習教程筆記]第四章-多元梯度降低法演練Ⅱ:學習率

    在這節中,咱們將集中討論學習率α。算法

    這是梯度降低算法的更新規則。在這節中,咱們將學習調試(Debugging)是什麼以及一些小技巧來確保梯度降低法是在進行正常工做的。此外,咱們還將學習如何選擇學習率α。函數

    梯度降低算法所作的事情就是爲你找到一個θ值,而且但願它可以最小化代價函數J(θ)。所以,一般在梯度降低算法運行時,描出代價函數J(θ)的值。學習

                                        

    在這裏x軸再也不表示參數向量θ,這裏的x軸表示的是梯度降低算法的迭代次數,隨着梯度降低算法的運行,咱們可能會獲得如上面右圖所示的一條曲線。測試

    當迭代次數爲100時,這個函數的值對應的是通過100次迭代後獲得的θ所算出的的J(θ)。因此這個函數表示的是:梯度降低的每步迭代後代價函數的值。若是梯度降低算法正常工做的話,每一步迭代以後J(θ)都應該降低。這條曲線的一個用處在於它能夠告訴你何時開始J(θ)降低的速度開始變慢了,咱們經過觀察曲線是否開始變得平坦來判斷梯度降低算法是否差很少已經收斂了。順便一提,對應每一個特定的問題,梯度降低算法所需的迭代次數可能會相差很大。因此,可能對於某一個問題只需30步就收斂,對於另外一個問題須要30000步。因此,咱們很難提早判斷梯度降低算法須要多少步才能收斂。spa

    另外,也能夠進行一些自動的收斂測試。也就是讓一些算法來告訴你梯度降低算法是否已經收斂。下面是一個自動收斂測試的一個很經典的例子。調試

    若是代價函數J(θ)一步迭代的降低小於一個很小的值ε,那麼這個測試就判斷函數已經收斂(ε能夠是10-3)。可是,一般要選擇一個合適的ε是至關困難的。所以,爲了檢查梯度降低算法是否收斂,咱們仍是經過看曲線圖要更好一點。blog

    看曲線圖還有一個好處就是:它能夠提早告訴你算法沒有正常工做。具體地說,若是你畫出的圖以下圖數學

    J(θ)在不斷上升,這就代表梯度降低算法並無正常工做。而這樣的曲線一般意味着你應該使用較小的學習率α。若是J(θ)在不斷上升,一般代表你在嘗試最小化一個以下圖(左)的函數。可是因爲學習率α太大,隨着迭代次數的增長,咱們離最小值愈來愈遠,以下圖(右)所示。技巧

                                      

    因此,這種狀況的解決方法就是使用一個較小的α值。固然也要確保你的代碼沒bug。bug

    一樣,有的時候咱們會看到以下圖像

    這種狀況的解決方法也是使用一個較小的α值。

    一些數學家已經證實,當α的值足夠小的時候,每一次迭代以後代價函數J(θ)都會降低。所以,若是代價函數沒有降低,那麼就頗有多是由於學習率α的值太大。這時,咱們就要選用一個較小的值。

    可是,咱們並不但願學習率α的值過小,由於這樣可能會致使梯度降低算法收斂得很慢。那樣,咱們就要迭代不少次纔可以到達最低點。


總結:

  • 若是學習率α的值過小,可能會致使梯度降低算法收斂得很慢。
  • 若是學習率α的值太大,代價函數J(θ)可能不會在每次迭代都降低,甚至可能不收斂。
  • 咱們經過繪製曲線圖來觀察梯度降低算法的運行狀況。
  • 在運行梯度降低算法時,咱們一般會嘗試一系列的α值,如:0.001,(0.003),0.01,(0.03),0.1,(0.3),1等。而後根據這些值繪製代價函數J(θ)隨迭代步數變化的曲線。而後選擇使代價函數J(θ)快速降低的一個α值。
相關文章
相關標籤/搜索