最優化五:梯度法(梯度下降法、最優梯度法、共軛梯度法)

梯度下降法沿着負梯度方向逐步更新優化參數

最優梯度法利用梯度計算步長,減小在谷底的來回振動

共軛梯度法每次搜索方向與上次方向共軛,理論上K維變量經過k次迭代可找到最優解

1 梯度下降法

函數在某一點的梯度是,在該方向單位步長上升最快的向量。梯度下降法是利用待優化變量,沿着負梯度方向不斷迭代尋找最優值。

直觀理解:

                                                      

梯度下降法算法流程:

                   

(PPT畫個圖可真難)

梯度下降法證明:通過泰勒展開表達式證明沿着梯度下降最快。

對函數f(x)在初值x_0處進行一階泰勒展開可以得到:

                                                                    f(x) \approx f(x_0) + (x-x_0)f{}'(x_0)                           (1-1)

由於是在x_0處泰勒展開,即在x_0附近近似程度才較高,因此x-x_0是微小向量,可以令:

                                                                                x-x_0 = \alpha v

\alpha是步長,v是單位向量,則有:((1-1)用約等於,後序採用等於號)

                                                                        f(x) = f(x_0) + \alpha vf{}'(x_0)

目的是找到新的x,使f(x) < f(x_0),即f(x) - f(x_0) < 0,令:

                                                                    f(x) - f(x_0) = \alpha vf{}'(x_0) < 0

得到目的轉化爲:

                                                                                \alpha vf{}'(x_0) < 0

\alpha是正標量忽略,得到:

                                                                                 vf{}'(x_0) < 0

由於向量v爲單位向量,設\beta爲v與f{}'(x_0)之間的夾角,由:

                                                                    vf{}'(x_0)=|v|\cdot |f{}'(x_0)|cos(\beta )

當且僅當v與f{}'(x_0)方向相反時,vf{}'(x_0)取得最小值,由f(x) - f(x_0) = \alpha vf{}'(x_0)可知,此時f(x)在此方向下降最快,即在梯度反方向下降最快。

2 最優梯度法

梯度法設置固定步長,可能出現的情況是在谷底左右來回波動難以收斂。最優梯度法根據梯度模長設置步長,在越接近最優點,步長越短。算法如下:

                     

相比梯度下降法,最優梯度法的核心在於利用梯度計算步長,步長計算公式推導如下:

最優化方程可以寫成如下形式:

                                                      minf(x) = f(x_i + \alpha \theta _i) = f(x_{i+1})

f(x)x_i處進行二階泰勒展開得到:

                                                f(x) = f(x_i) + \bigtriangledown ^Tf(x_i)\bigtriangleup x+\frac{1}{2}\bigtriangleup x^TA\bigtriangleup x

其中,A是f(x)的二階偏導矩陣。用\alpha \theta _i替換\bigtriangleup x可以得到:

                                                f(x) = f(x_i) + \bigtriangledown ^Tf(x_i)(\alpha \theta _i)+\frac{1}{2}(\alpha \theta _i)^TA(\alpha \theta _i)

在極小值處有:

                                                             \frac{\partial f}{\partial \alpha} = \bigtriangledown^T f(x) \theta_i + \alpha _i \theta_i^TA\theta_i = 0

即可得到:

                                                                      \alpha _i =- \frac{\bigtriangledown^T f(x_i) \theta_i}{\theta_i^TA\theta_i}

 3 共軛梯度法

共軛梯度法對最優梯度法進行了修正,搜索方向爲共軛方向,將負梯度方向旋轉了一個角度,每次往最優方向需要在負梯度方向進行修正。算法如下:

                                            

共軛梯度法證明:

對於二次型優化問題:

                                                                   f(x) = \frac{1}{2}x^TQx + c^Tx + k                                 (3-1)

下一次的搜索方向需要與上一次搜索方向共軛,即:

                                                                            P_{i+1}QP_i = 0                                               (3-2)

計算梯度:

                                                      \bigtriangledown f(x_{i+1}) = Qx_{i+1} + k, \bigtriangledown f(x_{i}) = Qx_{i} + k                  (3-3)

兩梯度相減可得:

                                                             \bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) = Q(x_{i+1} - x_{i})                       (3-4)

由參數更新公式:

                                                                               x_{i+1} = x_i + \lambda_i P_i                                      (3-5)

代入(3-4)可得:

                                                                P_i = \frac{Q^{-1}(\bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) )}{\lambda_i}                           (3-6)

將方向更新公式:

                                                                   P_{i+1} = -\bigtriangledown f(x_{i+1}) + \alpha_i P_i                               (3-7)

及(3-6)代入(3-2)可得:

                                  (-\bigtriangledown f(x_{i+1}) + \alpha_i P_i)\cdot Q\cdot \frac{Q^{-1}(\bigtriangledown f(x_{i+1}) - \bigtriangledown f(x_{i}) )}{\lambda_i}=0            (3-8)

因爲P_i\bigtriangledown f(x_{i+1})正交,乘積爲0。化簡(3-8)可得:

                                     -\left \| \bigtriangledown f(x_{i+1}) \right \| ^2+ \bigtriangledown f(x_i)\bigtriangledown f(x_{i+1}) - \alpha_i\bigtriangledown P_i f(x_i) =0            (3-9)

P_{i} = -\bigtriangledown f(x_{i}) + \alpha_{i-1} P_{i-1}代入3-9得到:

                                                        \alpha _i =\frac{\left \| \bigtriangledown f(x_{i+1}) \right \| ^2-\bigtriangledown f(x_i)\bigtriangledown f(x_{i+1})}{\left \| \bigtriangledown f(x_{i}) \right \| ^2}                     (3-10)

可以近似成:

                                                                         \alpha _i =\frac{\left \| \bigtriangledown f(x_{i+1}) \right \| ^2}{\left \| \bigtriangledown f(x_{i}) \right \| ^2}                                        (3-11)

表格中步長計算採用了一維搜索法,當然也可以固定步長或者採用最優梯度法中的步長計算方法進行替換。

梯度下降法在不同的迭代輪數中會選擇非常近似的方向,說明沿着這個方向的誤差沒有一次更新完成,優化過程呈鋸齒狀。共軛梯度法的思想是,選擇一個優化方向後,本次選擇的步長能夠將這個方向的誤差更新完,在以後的優化更新過程中不再需要朝這個方向更新了。由於每次將一個方向優化到了極小,後面的優化過程將不再影響之前優化方向上的極小值,所以理論上對N維問題求極小只用對N個方向都求出極小就行了。

共軛梯度法計算流程如下圖:

                               

 

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