要判斷Stochastic Gradient Descent是否收斂,可以像Batch Gradient Descent一樣打印出iteration的次數和Cost的函數關系圖,然后判斷曲線是否呈現下降且區域某一個下限值的狀態。由於訓練樣本m值很大,而對於每個樣本,都會更新一次θ向量(權重向量),因此可以在每次更新θ向量前,計算當時狀況下的cost值,然后每1000次迭代后,計算一次average cost的值。然后打印出iteration和cost之間的關系。
1、不同曲線圖代表的含義及應對策略
可能會看到的曲線圖有如下幾種:
情況1
這樣的曲線說明算法已經收斂。
如果我們使用小一點的學習率α,那么可能最終會訓練到比較好的θ向量(紅色線)
但是小的學習率也意味着更長的訓練時間。
情況2
如果我們不是1000次迭代計算並打印一次,而是5000次迭代后才計算並打印一次。那么曲線可能會更加平滑一些(綠色線)。
情況3
如果我們得到的曲線(1000次迭代並打印)是波動很劇烈,並且沒有顯示任何下降趨勢,如下圖:
那么有兩種可能,一噪聲太劇烈而無法看出算法收斂的趨勢;二算法沒有收斂。
這種情況下,我們可以調整打印的步長(比如5000次迭代才計算並打印一次),那么可能會得到兩種不同的曲線(如下兩幅圖所示)。
如果得到得是類似這條紅色的曲線,那么說明算法已經收斂或已經表現出收斂的趨勢了。如果得到的是如下圖所示的綠色的線,說明算法沒有收斂。
情況4
還有一種情況,就是曲線不但沒有呈現下降的趨勢,反而出現了上升的趨勢,如下圖:
這說明學習率α設置得過大,需要調小學習率。
2、學習率的設置
當學習率比較小的時候,可以訓練出更優的權重向量。但是較小的學習率也意味着更長的訓練時間,而且如果是非凸問題則還有可能會陷入局部解中。那么,如果使用動態遞減的學習率(即在學習開始之初,學習率較大,然后根據迭代次數的增加,學習率逐漸減小)也許會好一些。這樣我們可以用一個式子來按照迭代次數調整學習率,例如:
常量1和常量2的目的是為了保證學習率在一個正常的范圍內(不至於當循環次數很高或很低時,學習率會變得過大或過小)。
通過調整學習率(手工或如上式自動調整),就可以控制算法收斂的速度。
Reference: