機器學習入門系列04,Gradient Descent(梯度下降法)
什麼是Gradient Descent(梯度下降法)?
Review: 梯度下降法
在迴歸問題的第三步中,需要解決下面的最優化問題:
這裡的parameters是複數,即
θ 指代一堆引數,比如上篇說到的w 和b 。
我們要找一組引數
假設
隨機選取初始值
然後分別計算初始點處,兩個引數對
η 叫做Learning rates(學習速率)
上圖舉例將梯度下降法的計算過程進行視覺化。
Tip1:調整 learning rates(學習速率)
小心翼翼地調整 learning rate
舉例:
上圖左邊黑色為損失函式的曲線,假設從左邊最高點開始,如果 learning rate 調整的剛剛好,比如紅色的線,就能順利找到最低點。如果 learning rate 調整的太小,比如藍色的線,就會走的太慢,雖然這種情況給足夠多的時間也可以找到最低點,實際情況可能會等不及出結果。如果 learning rate 調整的有點大,比如綠色的線,就會在上面震盪,走不下去,永遠無法到達最低點。還有可能非常大,比如黃色的線,直接就飛出去了,update引數的時候只會發現損失函式越更新越大。
雖然這樣的視覺化可以很直觀觀察,但視覺化也只是能在引數是一維或者二維的時候進行,更高維的情況已經無法可視化了。
解決方法就是上圖右邊的方案,將引數改變對損失函式的影響進行視覺化。比如 learning rate 太小(藍色的線),損失函式下降的非常慢;learning rate 太大(綠色的線),損失函式下降很快,但馬上就卡住不下降了;learning rate特別大(黃色的線),損失函式就飛出去了;紅色的就是差不多剛好,可以得到一個好的結果。
自適應 learning rate
舉一個簡單的思想:隨著次數的增加,通過一些因子來減少 learning rate
- 通常剛開始,初始點會距離最低點比較遠,所以使用大一點的 learning rate
- update好幾次引數之後呢,比較靠近最低點了,此時減少 learning rate
- 比如
ηt=η/t+1‾‾‾‾‾√ ,t 是次數。隨著次數的增加,ηt 減小
但 learning rate 不能是 one-size-fits-all ,不同的引數需要不同的 learning rate
Adagrad 演算法
Adagrad 是什麼?
每個引數的學習率都把它除上之前微分的均方根。解釋:
普通的梯度下降為:
Adagrad 可以做的更好:
Adagrad舉例
下圖是一個引數的更新過程
將 Adagrad 的式子進行化簡:
Adagrad 存在的矛盾?
在 Adagrad 中,當梯度越大的時候,步伐應該越大,但下面分母又導致當梯度越大的時候,步伐會越小。
下圖是一個直觀的解釋:
下面給一個正式的解釋:
比如初始點在
這樣可以認為如果算出來的微分越大,則距離最低點越遠。而且最好的步伐和微分的大小成正比。所以如果踏出去的步伐和微分成正比,它可能是比較好的。
結論1-1:梯度越大,就跟最低點的距離越遠。
這個結論在多個引數的時候就不一定成立了。
多引數下結論不一定成立
對比不同的引數
上圖左邊是兩個引數的損失函式,顏色代表損失函式的值。如果只考慮引數
所以結論1-1是在沒有考慮跨引數對比的情況下,才能成立的。所以還不完善。
之前說到的最佳距離