梯度下降算法的任務是尋找參數θ,使之能夠最小化損失函數。
那么梯度下降法中的學習速率α應該如何選擇呢?通常我們畫出損失函數隨迭代次數增加而變化的曲線。
可能會得到如下的一條曲線,x軸表示迭代次數,y軸表示梯度下降算法迭代相應次數之后算出的損失函數值。
可以看到,當迭代300次之后,損失函數的值並沒有下降多少,也就是說在這里梯度下降算法基本上已經收斂了。因此,這條曲線還可以幫助你判斷梯度下降算法是否已經收斂。(對於某一個特定的問題,梯度下降算法所需要的迭代次數相差很大,可能對於某一個問題只需要30步,但是對於另一個問題則需要30000步,我們沒有辦法提前進行判斷。)
如果梯度下降算法工作正常,那么每一步迭代之后,損失函數的值都應該下降。
如下圖左上角所示,如果你發現隨着迭代次數的增加,損失函數的值在變大,這通常是因為學習速率α選擇的太大,需要將它調小。(如下圖右面所示,我們從初始θ出發,但是由於學習速率α太大,一下子跑到了最低點的左邊,然后下一次迭代又一下子跑到了最低點的右邊,如此往復,損失函數就會越來越大。)
如下圖左下角所示,你也會遇到這樣的一種情況:隨着迭代次數的增加,損失函數的值一會上升,一會下降,這通常也是因為學習速率α太大,需要使用較小的學習速率。
總結來說,如果學習速率α太小,梯度下降收斂速度會很慢;如果學習速率α太大,損失函數的值在每次迭代后不一定能下降,算法最后可能會發散。對於學習速率α,可以先選擇0.001,然后按10倍來進行調整。