梯度下降法和牛頓下降法


泰勒公式可以表示為:

\[f(\boldsymbol{x}+\boldsymbol{\delta})=f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta}+\frac{1}{2}\boldsymbol{\delta}^{\rm T}\boldsymbol{h}\boldsymbol{\delta}+O(\boldsymbol{\delta^3}) \tag{1} \]

在(2)中

\[\boldsymbol{x}=[x_1,...,x_n]^{\rm T} \\ \boldsymbol{\delta}=[\delta_1,...,\delta_n]^{\rm T}\\ \boldsymbol{g}=[\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_n}]^{\rm T}\\ \boldsymbol{h}= \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n}\\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n}\\ \vdots & \vdots & \ddots & \vdots\\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix} \]

在上面的表達式中\(\boldsymbol{x}\)表示函數自變量,\(\boldsymbol{\delta}\)中每個元素分別對應自變量的擾動,\(\boldsymbol{g}\)表示梯度矩陣,\(\boldsymbol{h}\)表示海參矩陣,它是一個實對稱矩陣。以下推導梯度下降法和牛頓下降法。


(1)梯度下降法

當每個自變量的擾動量足夠小時,可以忽略二階及二階以上的泰勒展開項,此時(2)可以表示為:

\[f(\boldsymbol{x}+\boldsymbol{\delta}) \approx f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta} \tag{2} \]

我們希望每次運動后的函數值都小於運動前的函數值,即\(f(\boldsymbol{x}+\boldsymbol{\delta})< f(\boldsymbol{x})\),所以顯然此時需要滿足\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}=||\boldsymbol{g}||||\boldsymbol{\delta}||{\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)< 0\),需要注意的函數在已知點處的梯度是確定的,也就是說在某點上\(\boldsymbol{g}\)是一個常向量,所以\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}\)中能改變的只有\(\boldsymbol{\delta}\),顯然,當\({\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)< 0\),即向量\(\boldsymbol{g}\)\(\boldsymbol{\delta}\)之間的夾角為鈍角時,該擾動量能夠使函數值下降,且當\({\rm cos}(<\boldsymbol{g},\boldsymbol{\delta}>)=-1\),即該擾動向量的方向和該點處的梯度向量反向時,函數值下降最快。梯度下降法就是在每個點上均朝着該點梯度反方向運動,經過不斷迭代使函數值取得最小值的方法。
函數\(f(\boldsymbol{x})\)是一個超曲面(如圖1所示),令\(f(\boldsymbol{x})=C\),其中\(C\)為常數,即用一個超平面去切\(f(\boldsymbol{x})\)對應的超曲面,則當\(C\)取不同值時,可以得到如圖1所示的等值線圖,函數\(f(\boldsymbol{x})\)上某一點的梯度方向與該點切線方向垂直,且指向等值線增大的方向,因此,梯度下降法的運動路線即如圖1所示,始終沿着函數梯度反方向運動。

圖1 梯度下降示意圖

梯度下降法的具體操作步驟如下:
a) 設第\(k\)次迭代的對應的點為\((\boldsymbol{x}_k,f(\boldsymbol{x}_k))\),計算該點的梯度向量\(\boldsymbol{g}_k\);
b) 根據梯度下降法可得迭代公式\(\boldsymbol{x}_{k+1}=\boldsymbol{x}_k-\alpha \boldsymbol{g}_k\),其中\(\alpha\)表示學習率;
c) 不斷重復上面的迭代過程,直到滿足一定的停止准則。
以一個例子進行說明,設函數\(f(\boldsymbol{x})=f(x_1,x_2)=x_1^2+x_2^2\),顯然(0,0)即為該函數的最小值點,梯度向量為\(\boldsymbol{g}=[2x_1,2x_2]^{\rm T}\),設初始時刻\(\boldsymbol{x}_0=(1,3)\),學習率\(\alpha=0.1\),則迭代過程如下:

\[ \boldsymbol{x}_0=(1,3)\\ \boldsymbol{x}_1=\boldsymbol{x}_0-\alpha \boldsymbol{g}_0=(1,3)-0.1(2,6)=(0.8,2.4)\\ \boldsymbol{x}_2=\boldsymbol{x}_1-\alpha \boldsymbol{g}_1=(0.8,2.4)-0.1(1.6,4.8)=(0.64,1.92)\\ \boldsymbol{x}_3=(0.512,1.536)\\ \vdots\\ \boldsymbol{x}_{10} \approx (0.107374,0.322122)\\ \vdots\\ \boldsymbol{x}_{100} \approx (1.6296e^{-10},4.8888e^{-10})\\ \]

顯然,經過多次迭代后,已逐漸靠近最優點。


(2)牛頓下降法

梯度下降法只利用到泰勒展開式的一次項,將泰勒展開至二次項可得到:

\[f(\boldsymbol{x}+\boldsymbol{\delta}) \approx f(\boldsymbol{x})+\boldsymbol{g}^{\rm T}\boldsymbol{\delta}+\frac{1}{2}\boldsymbol{\delta}^{\rm T}\boldsymbol{h}\boldsymbol{\delta} \tag{3} \]

可以看出,此時在很小的一個區域內函數\(f(\boldsymbol{x}+\boldsymbol{\delta})\)可以看成一個關於\(\boldsymbol{\delta}\)的二階曲面,並可通過對\(\boldsymbol{\delta}\)求導得到該二階曲面的最小值,將(3)對\(\boldsymbol{\delta}\)求導可得

\[\frac{\partial f(\boldsymbol{x}+\boldsymbol{\delta})}{\partial \boldsymbol{\delta}}=\boldsymbol{g}+\boldsymbol{h}\boldsymbol{\delta}=\boldsymbol{0} \rightarrow \boldsymbol{\delta}=-\boldsymbol{h}^{-1}\boldsymbol{g} \tag{4} \]

(4)中得到的\(\boldsymbol{\delta}\)即為牛頓下降法對應的運動向量。牛頓下降法屬於二階收斂,因此收斂速度很快,但是它每次迭代都要計算海森矩陣的逆矩陣,計算量比較大。此外,牛頓下降法還存在一些問題,以下進行分析:
從第(1)節中梯度下降法的分析我們知道,一個運動向量,如果滿足\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}< 0\),即該向量與梯度向量的夾角為鈍角時,那么該運動方向就是有效的運動方向。所以對於(4)中\(\boldsymbol{\delta}\),當\(\boldsymbol{g}^{\rm T}\boldsymbol{\delta}=-\boldsymbol{g}^{\rm T}(\boldsymbol{h}^{-1}\boldsymbol{g})< 0 \rightarrow \boldsymbol{g}^{\rm T}\boldsymbol{h}^{-1}\boldsymbol{g}>0\)時,才能保證牛頓下降法給出的方向是有效的方向,即必須要保證\(\boldsymbol{h}^{-1} \succ 0\),由於\(\boldsymbol{h}\)為實對稱矩陣,即\(\boldsymbol{h}=\boldsymbol{h}^{\rm T}\),所以\(\boldsymbol{h}^{-1}=(\boldsymbol{h}^{\rm T})^{(-1)}=(\boldsymbol{h}^{-1})^{\rm T}\),所以\(\boldsymbol{h}^{-1}\)也是實對稱矩陣,所以它可以進行正交對角化且其特征值全為實數,\(\boldsymbol{h}^{-1}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^{\rm T}\),其中\(\boldsymbol{\Sigma}={\rm diag}(\lambda_1,...,\lambda_n)\),當\({\rm min}(\lambda_1,...,\lambda_n)>0\)時,矩陣\(\boldsymbol{h}^{-1}\)滿足正定性要求,此時牛頓下降法給出的方向是有效的方向。
當海森矩陣的逆矩陣不滿足正定性要求時,可對牛頓下降方向進行適當修正,具體做法如下:
\({\rm min}(\lambda_1,...,\lambda_n)=\lambda_n< 0\),則可以令\(\hat{\boldsymbol{h}}=\boldsymbol{h}^{-1}+\sigma\boldsymbol{I}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{U}^{\rm T}+\sigma\boldsymbol{U}\boldsymbol{I}\boldsymbol{U}^{\rm T}=\boldsymbol{U}(\boldsymbol{\Sigma}+\sigma\boldsymbol{I})\boldsymbol{U}^{\rm T}=\boldsymbol{U}\hat{\boldsymbol{\Sigma}}\boldsymbol{U}^{\rm T}\),其中\(\sigma=|\lambda_n|+\epsilon\)\(\epsilon\)表示很小的正數,\(\hat{\boldsymbol{\Sigma}}={\rm diag}(\lambda_1+\sigma,...,\lambda_n+\sigma)\),則牛頓下降方向可以修正為\(\boldsymbol{\delta}=-\hat{\boldsymbol{h}}^{-1}\boldsymbol{g}\)


牛頓下降法是二階收斂,梯度下降是一階收斂,所以牛頓法的收斂速度更快。形象一點說明就是,如果想找一條最短的路徑到盆地的最底部,梯度下降法每次都朝當前位置處坡度最大的方向走,而牛頓法不僅會考慮當前坡度大不大,還會考慮下一步之后,坡度是否會變得更大,因此牛頓法比梯度下降法看得更遠,能更快走到最底部。從幾何的觀點看,牛頓法是用一個二次曲面去擬合當前所在位置的局部曲面,而梯度下降法適用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合效果會比平面更好,因此牛頓法能夠選擇出更符合真實情況的最優下降路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM