機器學習-牛頓法詳解

周郎啊發表於2021-07-05

------------恢復內容開始------------

我們現在學習的機器學習演算法,大部分演算法的本質都是建立優化模型,通過特定的最優化演算法對目標函式(或損失函式)進行優化,通過訓練集和測試集選擇出最好的模型,所以,選擇合適的最優化演算法是非常重要的。常見的最優化方法有梯度下降法、牛頓法和擬牛頓法、共軛梯度法,拉格朗日乘數法(約束優化)等等。

本期的主題是牛頓法的詳解,為了更好的理解,會簡明的說一下梯度下降法的內容。

一、梯度下降法

梯度下降法的本質是,用梯度來進行迭代的方法。即用當前位置的負梯度方向作為搜尋方向,可以以理解為切線或者切平面的反方向。因為是切線(切平面),所以此方向為當前位置的最快下降方向。越接近目標值,步長(深度學習中也叫學習率)越小,前進速度越慢。

 

步長是梯度下降法效能的很重要的因素,步長小,效率低;步長大,容易出現震盪現象。那麼當樣本數量很大時,可想而知這種迭代速度會非常慢,因此梯度下降法衍生出了隨機梯度下降法,批梯度下降法,小批梯度下降法。

在求解機器學習模型引數時,梯度下降法是很常用的方法。當目標函式為凸函式時,區域性最優點即為全面據最優點,這也是為什麼凸函式在機器學習最優化領域受歡迎的原因 。

二、牛頓法

牛頓法主要有兩個應用方向:1、求解方程根的問題。2、目標函式最優化求解

先詳細介紹牛頓法的原理,再具體介紹牛頓法的兩個應用方向。

前面說過,梯度下降法是用梯度來建立迭代關係式的方法,而牛頓法則是用切線來建立迭代關係式的演算法(所以也叫切線法)。牛頓法的迭代過程與梯度下降法有相似之處,只不過是用切線與x軸的交點來作為下一輪迭代的起點,如下圖所示。第一次迭代是從f(x0)開始,沿著切線的相反方向一直前進到與x軸的交點x1處。第二次迭代從點x1的值f(x1)開始,前進到f(x1)處的切線與x軸的交點x2處。如此持續進行,逐步逼近x*點。需要注意的是,牛頓法是用來求解方程的,因此f(x)與x軸必須有交點x*,這是牛頓法應用的前提。

 

上述求切線交點的過程,也可以看作是近似的泰勒展開過程。把f(x)在x0處展開成泰勒級數f(x)=f(x0)+(x-x0)f'(x0)+......。在x0附近出取線性部分g(x)作為f(x)的近似,將g(x)與x軸的交點近似作為f(x)與x軸的交點,通過一次次近似來逼近方程的根的過程。所以,牛頓法的本質是泰勒展開。

1、用牛頓法求方程的根

一階泰勒公式:f(x) = f(x0)+(x-x0)f'(x0)+o( (x-x0)^2 )

取線性部分

-------->x(1)=x(0)-f(x(0))/f’(x(0))

-------->x(n+1)=x(n)-f(x(n))/f'(x(n))

Until…

可以看出,在求解方程根時,只用到了一階收斂。而在解決最優化問題中,二階收斂才是牛頓法的精髓所在。

2、目標函式用於最優化求解

在機器學習領域中,牛頓法常用來解極值問題。牛頓法最初時為了求解方程的根,不能直接用來求極值。但是,函式極值的一階導數為0,因此,可以用牛頓法來求解函式一階導數為0的方程的根,得到極值點。

對於簡單的二維函式而言:

二階泰勒展開:f(x) = f(x0)+(x-x0)f'(x0)+1/2f''(x0)(x-x0)^2+o( (x-x0)^3 )

取線性部分

--------->x(n+1)=xn-f'(x)/f''(x),n=0,1,2….

而對於高維函式而言,同樣的道理。

此時f'(xn)為Jacobi(雅克比)矩陣:

f''(xn)為Hessian矩陣:

 

 

牛頓法的精髓就是二階收斂,不僅利用了損失函式的一階偏導數,也用到了損失函式的二階偏導數,即梯度變化的趨勢,因此比梯度下降法更快的確定合適的搜尋方向,具有二階收斂速度。通俗點來說,梯度下降法時選擇下一步能邁出的最大步長,而牛頓法是在選擇下一步能邁出的最大步長的基礎上,同時也考慮了下下步的選擇方向。也就是牛頓法更加具有大局觀(如下圖)。

 

 

注:紅色為牛頓法,綠色為梯度下降法

 

牛頓法公式(高維):xn+1=xn−[Hf(xn)]^−1*∇f(xn), n=0,1,2….

三、用Rosenbrock函式來測試牛頓法的效能

在數學最優化問題中,Rosenbrock函式是一個用來測試最優化演算法效能的非凸函式,也稱為香蕉函式。

f(x,y)=(1-x^2)+100(y-x^2)^2.(100可變,但不影響測試)

Rosenbrock函式的每個等高線大致呈拋物線形,其全域最小值也位在拋物線形的山谷中(香蕉型山谷)。很容易找到這個山谷,但是,因為山谷內的值變化不大,所以迭代到最優點是很有難度的。

Rosenbrock山谷

 

 

 

可以看出,我們可以很明顯的找到谷底所在山谷。

 

 

 

牛頓法用了6次迭代,而相同的起始位置梯度下降法要迭代1000次左右,當然,批梯度和隨機梯度效率要高一些。

四、牛頓法的優缺點

優點:

1、二階收斂,收斂效率高。

2、海森矩陣的逆在迭代過程中不斷減小,所以步長也逐漸減小。

缺點:

1、對目標函式有較為嚴格要求函式必須具有連續的一、二階偏導數,海森矩陣必須正定。

2、計算相當相當相當複雜。

五、牛頓法在非正定Hessian矩陣的使用

那麼問題來了,對於Hessian非正定矩陣來說,牛頓法一定不能使用嗎。

答案是不一定的,這就涉及到牛頓法的實際使用情況。剛才我們說的那些是理想下的情況,而在現實中我們使用牛頓法時,尤其是三維四維這種高維度下的情況,求Hessian矩陣的逆矩陣太複雜了。為了在不影響精確度的情況下儘可能簡化運算,我們用雅可比矩陣乘以雅可比矩陣的轉置來代替Hessian矩陣。具體推導過程如下。(電腦沒有這些符號,直接手寫了)。

(重點!)

 

 

推導過程不需要記住,掌握最後的方法就可以。

六、擬牛頓法

雖然非正定矩陣的問題解決了,但即使這樣,雅可比矩陣乘以雅可比矩陣的轉置計算仍然複雜。所以又有人提出了牛頓法的改進方法——擬牛頓法。它的本質和牛頓法相同,不同的是使用一個正定矩陣來近似Hessian矩陣的逆矩陣,從而簡化了運算的複雜度。擬牛頓法在20世紀50年代由一位美國科學家提出,當時極大的推動了非線性優化這一學科的發展,即使在今天,擬牛頓法也是非線性優化領域最有效的方法之一。

有時間會再出一篇擬牛頓法詳解。

------------恢復內容結束------------

相關文章