1. 程式人生 > >[機器學習]—梯度下降法

[機器學習]—梯度下降法

隨機 如果 des 遞歸 數據 span .html aik 影響

機器學習中往往需要刻畫模型與真實值之間的誤差,即損失函數,通過最小化損失函數來獲得最優模型。這個最優化過程常使用梯度下降法完成。在求解損失函數的最小值時,可以通過梯度下降法來一步步的叠代求解,得到最小化的損失函數和模型參數值。

1. 梯度

解釋梯度之前需要解釋導數與偏導數。導數與偏導數的公式如下:

技術分享圖片

技術分享圖片

導數與偏導數都是自變量趨於0時,函數值的變化量與自變量的變化量的比值,反應了函數f(x)在某一點沿著某一方向的變化率。導數中該方向指的是x軸正方向,偏導數中指的是向量x所在空間中一組單位正交基()中某一個基方向的變化率。因為x的坐標已知,所以這組正交基唯一,也就是表示x的坐標軸,而偏導數就是因變量與自變量在x的坐標軸正方向的變化量之比。

上面敘述的變化率都是函數在某一點上函數沿特定方向的變化率,如導數中指x軸正方向,偏導數中指自變量x所在空間中一組正交基的某一個方向。那麽如何表示因變量變化量在某一點沿任意方向上與自變量變化量的比值呢?這裏就需要使用方向導數,方向導數定義如下。

技術分享圖片

偏導數是函數某一點沿著任意方向上因變量與自變量的變化率的比值,是一個向量,有大小也有方向,那麽既然偏導數既有大小也有方向,則肯定存在一個偏導數,其模值(即大小)最大。這個最大的模值就是梯度的模值,模值最大的偏導數的方向就是梯度的方向。梯度的定義如下:

技術分享圖片

2. 梯度下降

前面說到梯度方向是函數最大偏導數的方向,因此沿著與該方向相反的方向,必然可以達到函數的一個極小值點。以一元函數為例,其導數方向就是梯度方向,因此為了求取如下圖所示的函數的極小值,只需要沿著導數相反的反向向下遞歸即可。如圖所示,計算起點在一個較高的點,計算當前點梯度,沿著與梯度相反的方向一步步向下進行,最終會達到函數的極小值點。

技術分享圖片

然後圖中的情況比較特殊,因為圖中函數只有一個極值點,這個極值點也就是函數的最小值點,因此梯度下降法遞歸到極值點後,也就得到了函數的最小值。但是如果函數存在多個極小值點(非凸函數),使用梯度下降法可能使算法陷入局部最小值點,從而得不到全局最優解。

3. 梯度下降法推導

梯度下降法一般用於機器學習算法中,用於最小化損失函數,得到最優的預測模型,這個預測模型就是假設函數,對於線性回歸來說,一般為以下形式:

技術分享圖片

寫成矩陣形式:

技術分享圖片

其中技術分享圖片

線性回歸中損失函數常使用模型預測值與真實值差值的平方刻畫,如下:

技術分享圖片

寫成矩陣形式有

技術分享圖片

其中技術分享圖片是一個mxn矩陣,矩陣每一行都是一個輸入向量,機器學習中每一行即為一個輸入樣本的特征技術分享圖片

,每個點即為輸入樣本對應的標簽。

為了使用梯度下降法計算的最小值,需要先計算損失函數關於的的偏導數,根據矩陣的求導公式,有下式成立:

技術分享圖片

因為技術分享圖片,則:

技術分享圖片

所以:

技術分享圖片

於是對於技術分享圖片,有:

技術分享圖片

對於技術分享圖片則有:

技術分享圖片

根據式(2)式(3)及鏈式法則,可得:

技術分享圖片

上式即為損失函數對於參數的導數,根據梯度下降法,設算法學習率為,則參數的更新策略為:

技術分享圖片

4. 幾種常見的梯度下降法

式(1)為模型的損失函數,矩陣形式的損失函數中,為mxn大小的矩陣,從代數形式的損失函數定義中,可知m為梯度下降法一次輸入的樣本個數,n為樣本特征向量的個數,幾種梯度下降法就是以m的個數來區分的,分別為:、

1) 批量梯度下降法。這種情況下m為所有訓練樣本的大小,即一次將所有樣本特征向量模型中,並根據模型結果,計算損失函數,更新參數,直到達到設定的最優解條件。優點是可以利用所有樣本的數據,計算全局梯度,,從而減小算法了陷入局部極小值情況的出現。而且由於批量梯度下降法使用了所有樣本的信息,算法進行梯度下降時,計算的方向與實際樣本空間中梯度方向相近,使得算法能較快收斂;缺點是計算量大,計算速度慢,對於海量數據集,可能出現內存不足的情況。

2) 隨機梯度下降法。批量梯度下降法中一次性用矩陣乘法將所有樣本的特征向量代入模型中計算,而隨機梯度下降法與之相反,每次只取一個樣本代入模型計算更新參數,即m=1,這個樣本通過隨機的方式從輸入樣本中選擇。這種方法優點是計算速度快;缺點是一次只使用一個樣本進行計算梯度,則每次叠代的過程中,算法梯度下降的方向受當前樣本影響極大(梯度下降時並不能總沿著真實梯度方向進行,而是四處亂撞,因為每個樣本對應的梯度可能會有很大的差別,如前一個樣本計算梯度方向0°,算法沿著0°的方向運行,然後當前樣本計算得到梯度方向為150°,則算法又會往剛才幾乎相反的方向運行,產生震蕩),會造成震蕩,使算法收斂速度減慢,還有可能使算法陷入局部極小值,得不到最優解。

3) 小批量梯度下降法。前兩種梯度下降法都較為極端,實際運用中常從樣本空間中選取一部分樣本(一個batch)作為輸入,計算一次後再選擇一部分樣本輸入,計算更新參數,直到滿足梯度條件。這種算法兼顧了批量梯度下降法和隨機梯度下降法的優點,實際應用中常使用這種方法。

?

參考:

1.梯度下降(Gradient Descent)小結:https://www.cnblogs.com/pinard/p/5970503.html

2. ML重要概念:梯度(Gradient)與梯度下降法(Gradient Descent): https://blog.csdn.net/walilk/article/details/50978864

3. 梯度下降百度百科: https://baike.baidu.com/item/梯度下降/4864937?fr=aladdin

4. 梯度百度百科: https://baike.baidu.com/item/梯度/13014729?fr=aladdin

5. 張凱院:《矩陣論》

[機器學習]—梯度下降法