1. 程式人生 > >機器學習入門系列04,Gradient Descent(梯度下降法)

機器學習入門系列04,Gradient Descent(梯度下降法)

什麼是Gradient Descent(梯度下降法)?

Review: 梯度下降法

在迴歸問題的第三步中,需要解決下面的最優化問題:

θ=argminθL(θ) L:lossfunction θ:parameters

這裡的parameters是複數,即 θ 指代一堆引數,比如上篇說到的 wb

我們要找一組引數 θ ,讓損失函式越小越好,這個問題可以用梯度下降法解決:

假設 θ 有裡面有兩個引數 θ1,θ2

隨機選取初始值 θ0=[θ01θ02],這裡可能某個平臺不支援矩陣輸入,看下圖就好。

然後分別計算初始點處,兩個引數對 L

的偏微分,然後 θ0 減掉 η 乘上偏微分的值,得到一組新的引數。同理反覆進行這樣的計算。黃色部分為簡潔的寫法,L(θ)即為梯度

η叫做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+1t 是次數。隨著次數的增加,ηt 減小

但 learning rate 不能是 one-size-fits-all ,不同的引數需要不同的 learning rate

Adagrad 演算法

Adagrad 是什麼?

每個引數的學習率都把它除上之前微分的均方根。解釋:

普通的梯度下降為:

wt+1wtηtgt ηt=ηt+1

w 是一個引數

Adagrad 可以做的更好:

wt+1wtηtσgt gt=L(θt)w

σt:之前引數的所有微分的均方根,對於每個引數都是不一樣的。

Adagrad舉例

下圖是一個引數的更新過程

將 Adagrad 的式子進行化簡:

Adagrad 存在的矛盾?

在 Adagrad 中,當梯度越大的時候,步伐應該越大,但下面分母又導致當梯度越大的時候,步伐會越小。

下圖是一個直觀的解釋:

下面給一個正式的解釋:

比如初始點在 x0,最低點為 b2a,最佳的步伐就是 x0 到最低點之間的距離 |x0+b2a|,也可以寫成 |2ax0+b|2a。而剛好 |2ax0+b| 就是方程絕對值在x0這一點的微分。

這樣可以認為如果算出來的微分越大,則距離最低點越遠。而且最好的步伐和微分的大小成正比。所以如果踏出去的步伐和微分成正比,它可能是比較好的。

結論1-1:梯度越大,就跟最低點的距離越遠。

這個結論在多個引數的時候就不一定成立了。

多引數下結論不一定成立

對比不同的引數

上圖左邊是兩個引數的損失函式,顏色代表損失函式的值。如果只考慮引數 w1,就像圖中藍色的線,得到右邊上圖結果;如果只考慮引數 w2,就像圖中綠色的線,得到右邊下圖的結果。確實對於a和b,結論1-1是成立的,同理c和b也成立。但是如果對比a和c,就不成立了,c比a大,但c距離最低點是比較近的。

所以結論1-1是在沒有考慮跨引數對比的情況下,才能成立的。所以還不完善。

之前說到的最佳距離|2ax0+b|2a,還有個分母