梯度降低法是機器學習和神經網絡學科中咱們最先接觸的算法之一。可是對於初學者,咱們對於這個算法是如何迭代運行的從而達到目的有些迷惑。在這裏給出我對這個算法的幾何理解,有不對的地方請批評指正!算法
(維基百科)梯度降低法,基於這樣的觀察:若是實值函數 在點
處可微且有定義,那麼函數
在
點沿着梯度相反的方向
降低最快。網絡
於是,若是機器學習
對於 爲一個夠小數值時成立,那麼
。函數
考慮到這一點,咱們能夠從函數 的局部極小值的初始估計
出發,並考慮以下序列
使得學習
所以可獲得圖片
若是順利的話序列 收斂到指望的極值。注意每次迭代步長
能夠改變。ip
下面圖片示例了這一過程,這裏假設 定義在平面上,而且函數圖像是一個碗形。藍色的曲線是等高線(水平集),即函數
爲常數的集合構成的曲線。紅色的箭頭指向該點梯度的反方向。(一點處的梯度方向與經過該點的等高線垂直)。沿着梯度降低方向,將最終到達碗底,即函數
值最小的點。get
因爲咱們的任務是求得經驗損失函數的最小值,因此上圖的過程其實是一個「下坡」的過程。在每個點上,咱們但願往下走一步(假設一步爲固定值0.5米),使得降低的高度最大,那麼咱們就要選擇坡度變化率最大的方向往下走,這個方向就是經驗損失函數在這一點梯度的反方向。每走一步,咱們都要從新計算函數在當前點的梯度,而後選擇梯度的反方向做爲走下去的方向。隨着每一步迭代,梯度不斷地減少,到最後減少爲零。這就是爲何叫「梯度降低法」。it
那麼,爲何梯度的方向恰好是咱們下坡的反方向呢?爲何咱們不是沿着梯度的方向下坡呢?這是由於,只有沿着梯度的反方向,咱們才能下坡,不然就是上坡了……舉個例子,在y=f(x)的二維平面上,規定好x軸和y軸的方向後,若是曲線f(x)的值是隨着x的增長上升的,那麼它在某一點的切線的數值必定是正的。反之,若曲線f(x)的值是隨着x的增長降低的,則它在降低的某一點的切線的數值必定是負數。梯度是方向導數在某一點的最大值,因此其值必然是正數。若是沿着梯度方向走,經驗損失函數的值是增長的……因此,咱們要下坡,就必須沿着梯度方向的反方向了。class
相對於梯度降低法,還有梯度上升法。(注意減號變成加號了)
其基本原理與降低法一致,區別在於:梯度上升法是求函數的局部最大值。所以,對比梯度降低法,其幾何意義和很好理解,那就是:算法的迭代過程是一個「上坡」的過程,每一步選擇坡度變化率最大的方向往上走,這個方向就是函數在這一點梯度方向(注意不是反方向了)。最後隨着迭代的進行,梯度仍是不斷減少,最後趨近與零。
有一點我是這樣認爲的:所謂的梯度「上升」和「降低」,一方面指的是你要計算的結果是函數的極大值仍是極小值。計算極小值,就用梯度降低,計算極大值,就是梯度上升;另外一方面,運用上升法的時候參數是不斷增長的,降低法是參數是不斷減少的。可是,在這個過程當中,「梯度」自己都是降低的。