AI瘋狂進階——梯度下降

本文作者專注於AI進階算法,正在推出AI瘋狂進階之基礎理論進階篇,如有興趣可持續關注我。

核心導讀:

1.導數、偏導數、方向導數、梯度是什麼關係?

2.梯度下降具體怎麼實現的?

3.梯度下降有哪些弊端?


1.導數,偏導數,方向導數,梯度是什麼關係?

在講解梯度下降之前,需要先了解一些數學概念,因為這些概念很容易搞混淆,下面來梳理下這些概念之間的關係。

(1)導數

反映的是函數y=f(x)在某一點處沿x軸正方向的變化率。再強調一遍,是函數f(x)在x軸上某一點處沿著x軸正方向的變化率/變化趨勢。直觀地看,也就是在x軸上某一點處,如果f’(x)>0,說明f(x)的函數值在x點沿x軸正方向是趨於增加的;如果f’(x)

(2)偏導數

導數與偏導數本質是一致的,都是當自變量的變化量趨於0時,函數值的變化量與自變量變化量比值的極限。直觀地說,偏導數也就是函數在某一點上沿座標軸正方向的的變化率。

(3)方向導數

在前面導 數和偏導數的定義中,均是沿座標軸正方向討論函數的變化率。那麼當我們討論函數沿任意方向的變化率時,也就引出了方向導數的定義,即:某一點在某一趨近方向上的導數值。

(4)梯度

梯度的提出只為回答一個問題:

函數在變量空間的某一點處,沿著哪一個方向有最大的變化率?

梯度定義如下:

函數在某一點的梯度是這樣一個向量,它的方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值。

這裡注意三點:

1)梯度是一個向量,即有方向有大小;

2)梯度的方向是最大方向導數的方向;

3)梯度的值是最大方向導數的值。

最後總結下這幾個概念的關係:

導數和偏導數都是求某一點沿著座標軸正方向的瞬時變化率,但是導數只存在於一元函數中,而偏導數存在於多元函數中。方向導數則是某一點在某一趨近方向上的導數值,相比偏導數,求導的方向從座標軸正方向擴展到任意方向。更進一步,梯度是方向導數中變化率最大的那個。在單變量的函數中,梯度其實就是函數的微分,代表著函數在某個給定點的切線的斜率;在多變量函數中,梯度是一個向量,向量有方向,梯度的方向就指出了函數在給定點的上升最快的方向。


2.梯度下降具體怎麼實現的?

在上面我們講解了梯度的概念,我們知道對於多元函數,某一點上升最快的方向是沿著梯度方向,那麼,通常我們要讓損失函數越小越好,就可以沿著梯度反方向,這就是我們所說的梯度下降法。梯度下降法的數學表達如下:

其中是J關於Θ的一個函數,通常是損失函數,參數減去梯度意味著是朝著梯度反方向走,也就是朝著使損失函數J變小的方向走。α被稱作為學習率或者步長,意味著我們可以通過α來控制每一步走的距離,並且梯度下降法通常是運行多次,也就是一步一步慢慢靠近最優值,因為通常我們很難一步就能求解出最優解。在“凸優化”篇中我們說到神經網絡通常是非凸優化,存在多個局部最小值,那麼,學習率α不能太大也不能太小,太小的話,可能需要很長時間達到局部最小值,太大的話,會導致錯過局部最小值。

下面我們來以一個多元函數來解釋下梯度下降的過程:

我們假設初始的起點為:

初始的學習率為:

函數的梯度為:

進行多次迭代:

我們發現,已經基本靠近函數的最小值點


3.梯度下降有哪些弊端?

(1)不能保證收斂到全局最優解,如下圖,可以看出,初始點也會對最終的結果有影響,這也是為什麼現在神經網絡中會出現非常多不同的初始化算法的原因。

(2)鞍點。鞍點因形狀像馬鞍而得名。鞍點處,梯度在一個方向(X)上是極小值,在另一個方向上則是極大值。可以看到在中間那一塊平坦區域,梯度接近0,就會造成收斂於最小值的錯覺。

(3)梯度消失和爆炸。下一篇中會詳解梯度消失和爆炸以及如何解決這些問題,如果有興趣,可以持續關注我。


4.小結

在神經網紹的訓練中,我們通常不關心能否找到精確的全局最優解,我們僅僅是去降低代價函數的值,使其能夠獲得較好的泛化性能。但我們並不是不想獲得全局最優解,只是理論分析神經網絡算法是一個極其困難的任務。總而言之,深度學習是實踐的產物,還缺乏強有力的理論支持,很多科研人員仍然對其保持著懷疑態度,如何理智地評估深度學習算法性能邊界仍然是機器學習中一個重要的目標。相比於其他機器學習算法而言,神經網絡更像是一個黑盒,神經網絡中存在著大量的訓練技巧,這也使得訓練神經網絡更像是藝術而非科學。