【機器學習】最優化方法:梯度下降法

1. 概念

梯度下降法(Gradient Descent)又稱最速下降法(Steepest descent)是一種常用的一階優化方法,是一種用於求解無約束最優化問題的最常用的方法。它選取適當的初始值{x^{\left( 0 \right)}},並不斷向負梯度方向迭代更新x,實現目標函數的極小化,直到收斂。

2. 梯度下降的直觀解釋

以下山法作爲類別,我們想要從山的某個位置下山,但我們並不知道山腳的位置,只能走一步算一步。從當前位置出發,往當前位置的負梯度方向走一步,即往最陡峭的方向往下走一步。然後繼續求解當前位置的梯度,往負梯度方向走一步。不停走下去,一直走到我們認爲已經到了山腳的位置。當然,也有可能,我們沒辦法到山腳,而是到了一個小山丘底部。

當目標函數是凸函數的時候,梯度下降法可以確保找到全局最優解;否則不一定能找到全局最優解,可能會陷入局部最優解。

3. 梯度下降法的原理

考慮最優化問題\min {}_xf\left( x \right),其中f\left( x \right)具有一階連續偏導數。若第k次迭代值爲{x^{\left( k \right)}},對f\left( x \right){x^{\left( k \right)}}處進行一階泰勒展開:

                                    f\left( x \right) = f\left( {{x^{\left( k \right)}}} \right) + \left( {x - {x^{\left( k \right)}}} \right)\nabla f\left( {{x^{\left( k \right)}}} \right)             (1)

凸函數f(\theta)的某一小段[\theta_0,\theta]由上圖黑色曲線表示,可以利用線性近似的思想求出f(\theta)的值,如上圖紅色直線。該直線的斜率等於f(\theta)\theta_0處的導數。則根據直線方程,很容易得到f(\theta)的近似表達式爲:

               f\left( \theta \right) = f\left( {{\theta _0}} \right) + \left( {\theta - {\theta _0}} \right) \cdot \nabla f\left( {{\theta _0}} \right)

這就是一階泰勒展開式的推導過程,主要利用的數學思想就是曲線函數的線性擬合近似

其中,x - {x^{\left( k \right)}}是微小矢量,大小是步長\alpha,類比於下山過程中的一步。\alpha是標量,x - {x^{\left( k \right)}}的單位向量用v表示,則x - {x^{\left( k \right)}}可以表示爲:

                                                      x - {x^{\left( k \right)}} = \alpha v           (2)

此時,(1)可以化爲:

                                             f\left( x \right) = f\left( {{x^{\left( k \right)}}} \right) + \alpha v\nabla f\left( {{x^{\left( k \right)}}} \right)           (3)

我們希望每次迭代,都能使f\left( x \right)變小,也就是說希望有:

                                             f\left( x \right) - f\left( {{x^{\left( k \right)}}} \right) = \alpha v\nabla f\left( {{x^{\left( k \right)}}} \right) < 0           (4)

由於\alpha是標量,且一般設定爲正值,因此\alpha可以忽略。由於v\nabla f\left( {{x^{\left( k \right)}}} \right)都是向量,根據向量的乘積公式可以將(4)轉換爲:

                                    v\nabla f\left( {{x^{\left( k \right)}}} \right) = \left\| v \right\| \cdot \left\| {f\left( {{x^{\left( k \right)}}} \right)} \right\|\cos \left( {v,f\left( {{x^{\left( k \right)}}} \right)} \right) < 0           (5)

v\nabla f\left( {{x^{\left( k \right)}}} \right)反向時,\cos \left( {v,f\left( {{x^{\left( k \right)}}} \right)} \right) = - 1,可以使得\alpha v\nabla f\left( {{x^{\left( k \right)}}} \right)最小,且爲負。即v的方向是使局部的目標函數下降最快的方向。得到v爲:

                                                      v = - \frac{{\nabla f\left( {{x^{\left( k \right)}}} \right)}}{{\left\| { \nabla f\left( {{x^{\left( k \right)}}} \right)} \right\|}}          (6)

以上解釋了爲什麼局部下降最快的方向就是梯度的負方向。

將(6)中的最優解v代入(2)中,得到x的更新表達式爲:

                                             x - {x^{\left( k \right)}} = - \alpha \frac{{ \nabla f\left( {{x^{\left( k \right)}}} \right)}}{{\left\| {\nabla f\left( {{x^{\left( k \right)}}} \right)} \right\|}}          (7)

由於\left\| {f\left( {{x^{\left( k \right)}}} \right)} \right\|是標量,可以吸收入\theta裏面,梯度下降算法的更新表達式就變成了:

                                             x - {x^{\left( k \right)}} = - \alpha \nabla f\left( {{x^{ \left( k \right)}}} \right)          (8)

以上就是梯度下降算法公式的數學推導過程。

4. 算法描述

輸入:目標函數f\left( x \right)、梯度函數\nabla f\left( x \right),計算精度\varepsilon

輸出:f\left( x \right)的極小點{x^*}

(1)初始化相關參數。取初始值{x^{\left( 0 \right)}} \in {R^n},置迭代次數k=0.

(2)計算當前位置的目標函數f\left( {{x^{\left( 0 \right)}}} \right)

(3)計算當前位置的目標函數的梯度\nabla f\left( {{x^{\left( k \right)}}} \right)如果\left\| {\nabla f\left( {{x^{\left( k \right)}}} \right)} \right\| < \varepsilon,則迭代結束,{x^*} = {x^{\left( k \right)}}。否則,繼續往下走。

(4)更新x{x^{\left( {k + 1} \right)}} = {x^{\left( k \right)}} - \alpha \nabla f\left( {{x^{\left( k \right)}}} \right),如果\left\| {{x^{\left( {k + 1} \right)}} - {x^{\left( k \right)}}} \right\| < \varepsilon或者\left\| {f\left( {{x^{\left( {k + 1} \right)}}} \right) - f\left( {{x^{\left( k \right)}}} \right)} \right\| < \varepsilon,則停止迭代,令{x^*} = {x^{\left( {k + 1} \right)}}。否則,將迭代次數置爲k = k + 1,轉到(3)繼續迭代。

在機器學習中,目標函數f\left( x \right)實際上就是代價函數J\left( \theta \right)

5. 梯度下降法種類

5.1 批量梯度下降法(Batch Gradient Descent,BGD)

批量梯度下降法是梯度下降法最常用的形式。每次更新參數要使用所有的樣本進行計算

假設目標函數爲:

                                             J\left( \theta \right) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{\left( {{y_i} - {h_\theta }\left( {{x_i}} \right)} \right)}^2}}

求偏導得:

                                             \frac{{\partial J\left( \theta \right)}}{{\partial {\theta _j}}} = - \frac{1}{m}\sum\limits_{i = 1}^m {\left( {{y_i} - {h_\theta }\left( {{x_i}} \right)} \right){x_{ij}}}

批量梯度下降法的更新公式爲:

                                             {\theta ^{\left( {k + 1} \right)}} = {\theta ^{\left( k \right)}} - \alpha \sum\limits_{i = 1}^m {\left( {{y_i} - {h_\theta }\left( {{x_i}} \right)} \right){x_{ij}}}

5.2 隨機梯度下降法(Stochastic Gradient Descent,SGD)

隨機梯度下降法與批量梯度下降法類似。每次更新參數只使用隨機的一個樣本進行計算。

隨機梯度下降法的更新公式爲:

                                             {\theta ^{\left( {k + 1} \right)}} = {\theta ^{\left( k \right)}} - \alpha \left( {{y_i} - {h_\theta }\left( {{x_i}} \right)} \right){x_{ij}}

批量梯度下降法和隨機梯度下降法的區別是什麼?

(1)批量梯度下降法每次使用所有數據來更新參數,訓練速度慢;

(2)隨機梯度下降法每次只使用一個數據來更新參數,訓練速度快;但迭代方向變化大,不一定每次都朝着收斂的方向,不能很快地收斂到局部最優解。

5.3 小批量梯度下降法(Mini-Batch Gradient Descent,MBGD)

小批量梯度下降法是批量梯度下降法和隨機梯度下降法的一個折中。每次更新參數選擇一小部分數據計算

選擇t個數據,1<t<m

小批量梯度下降法的更新公式爲:

                                             {\theta ^{\left( {k + 1} \right)}} = {\theta ^{\left( k \right)}} - \alpha \sum\limits_{i = 1}^t {\left( {{y_i} - {h_\theta }\left( {{x_i}} \right)} \right){x_{ij}}}

6. 局部最優解解決方法

如第二節(梯度下降的直觀解釋)中描述的,如果目標函數具有多個局部極小值,不能保證找到的解是全局最優解。爲了解決這一問題,常採用以下策略來試圖跳出局部最優:

1. 以多組不同參數值進行初始化,這樣有可能陷入不同的局部極小,從中進行選擇有可能獲得更接近全局最小的結果;

2. 使用“模擬退火”技術,在每一步都以一定概率接收比當前解更差的結果,有助於跳出局部極小;

3. 使用隨機梯度下降,最小化每個樣本的損失函數,而不是最小化整體的損失函數,雖然不是每次迭代得到的損失函數都朝着收斂的方向, 但是整體的方向是朝着全局最優解的,最終的結果往往是在全局最優解附近。

參考文獻:

1.《 統計學習方法》附錄A梯度下降法——李航 

2. 爲什麼局部下降最快的方向就是梯度的負方向?

3. 梯度下降(Gradient Descent)小結

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章