無約束最優化的經常使用方法

11/22/2017 12:40:56 PM算法

優化問題在不少領域有着重要的應用。爲了往後查閱方便,本文列舉常見的無約束優化方法的計算公式。網絡

須要說明的是,本文的大部份內容選自圖書《算法筆記》。機器學習

1、梯度降低法

梯度降低法(Gradient Descent Method)也叫作最速降低法(Steepest Descent Method),由於負梯度是函數局部降低最快的方向。函數

梯度降低

梯度降低法的迭代格式爲學習

\[x_{k+1}=x_{k}-\alpha_k\nabla f(x_k)\]優化

梯度降低法很是簡單,只須要知道如何計算目標函數的梯度就能夠寫出迭代格式。所以,儘管在很多狀況下梯度降低法的收斂速度都很慢,也依然不影響它在工業界的普遍應用。梯度降低法應用到一些具體模型上有時也會被視做一類特定的算法,例如神經網絡中的後向傳導算法(Back Propagation Algorithm)。spa

隨機梯度降低

在機器學習中常常有\(f(x)=\sum_{i=1}^m \ell_i(x)\),其中\(\ell_i(x)\)是第\(i\)個訓練樣本的損失函數。這時咱們可使用隨機梯度降低法(Stochastic Gradient Descent Method)。其迭代格式爲blog

\[x_{k+1}=x_{k}-\alpha_k\nabla \ell_r(x_k)\]內存

其中\(r\in \\{1,2,\cdots,m\\}\)爲隨機數。這種作法能夠理解爲隨機選擇一個訓練樣本,進行一次梯度降低的訓練。在機器學習的問題中,咱們一般不須要真的求得最優值,這樣不精確的迭代,使得算法不容易過擬合。因爲隨機梯度降低法的普及,與此相對的梯度降低法有時被稱爲批量梯度降低法(Batch Gradient Descent Method),由於它同時考慮全部訓練樣本。介於批量梯度降低法和隨機梯度降低法之間,還有小批量梯度降低法(Min-Batch Gradient Descent Method),也就是每次迭代選擇若干個訓練樣本。get

步長\(\alpha_k\)的選取

梯度降低法可採用BB步長(Barzilai Borwein)。BB步長有兩個計算公式,選擇其一便可。

\begin{aligned}
\alpha_k&=\frac{(\nabla f(x_k)-\nabla f(x_{k-1}))^T(x_k-x_{k-1})}{(\nabla f(x_k)-\nabla f(x_{k-1}))^T(\nabla f(x_k)-\nabla f(x_{k-1}))}\newline
\alpha_k&=\frac{(x_k-x_{k-1})^T(x_k-x_{k-1})}{(x_k-x_{k-1})^T(\nabla f(x_k)-\nabla f(x_{k-1}))}
\end{aligned}

BB步長適合咱們在對步長選擇缺少經驗的時候,它常常會有不錯的效果。

2、共軛梯度法

因爲每次都是沿着當前的負梯度方向逼近極小值,梯度降低法每每不能很快地收斂到極小值點。改進的方法是,在上一次梯度方向的共軛方向上進行迭代。

在這裏,不對原理和公式推導進行過多介紹。下面直接給出迭代的公式。

\[x_{k+1}=x_k+\alpha_k d_k\]

其中,\(d_k\)爲迭代方向,它由下面的式子肯定

\[d_k=-\nabla f(x_k)+\beta_k d_{k-1}\]

這裏使用係數\(\beta_k\)藉助上一次的迭代方向\(d_{k-1}\),對迭代方向\(d_k\)進行一個修正。\(\beta_k\)的表達式不止一種,經常使用的式子以下

\[\beta_k=\frac{(\nabla f(x_k))^T(\nabla f(x_k)-\nabla f(x_{k-1}))}{(\nabla f(x_{k-1}))^T d_{k-1}}\]

3、牛頓法

牛頓方向和梯度方向最大的差異是考慮了Hessian矩陣(咱們記\(x_k\)處的Hessian矩陣爲\(\nabla^2 f(x_k)\))。

牛頓法的迭代格式爲

\[x_{k+1}=x_k-\alpha_k(\nabla^2 f(x_k))^{-1}\nabla f(x_k)\]

這裏的步長\(\alpha_k\)有多種取法。但與梯度降低法不一樣的是,這裏步長取\(1\)的效果一般不錯。值得注意的是,雖然咱們寫做\(d_k=-(\nabla^2 f(x_k))^{-1} \nabla f(x_k)\),但在計算\(d_k\)時,並不真正求逆,而是去求解線性方程組\((\nabla^2 f(x_k))d_k=-\nabla f(x_k)\)

假設\(f(x)\)是一元函數,那麼上式將變爲

\[x_{k+1}=x_k-\alpha\frac{f(x_k)}{f'(x_k)}\]

牛頓法的侷限

牛頓法在計算上有一下侷限性

  • 計算矩陣\(\nabla^2 f(x_k)\)可能要花費很長時間。
  • 可能沒有足夠的內存去存儲矩陣\(\nabla^2 f(x_k)\)
  • \(\nabla^2 f(x_k)\)不必定可逆,也就是\((\nabla^2 f(x_k))^{-1}\)也就不必定存在。

所以通常只有當問題規模比較小,並且\(f(x_k)\)是嚴格凸函數的時候,咱們纔會考慮牛頓法。在其餘情形下使用牛頓法,都須要設法進行一些修正。

4、擬牛頓法

牛頓法的侷限性基本源於\(\nabla^2 f(x_k)\)。在擬牛頓法中,咱們不直接使用\(\nabla^2 f(x_k)\),而是使用\(H_k\)近似代替。

在第一次迭代的時候,咱們沒有任何有效信息能夠用於選取\(H_0\),所以通常直接取\(H_0=I\)。對於\(H_{k+1}\)的肯定方法,下面給出兩種方法,分別爲BFGS(Brotden-Fletcher Goldfard Shanno)和DFP(Davidon Fletcher Powell)公式。爲了書寫方便,咱們令\(s_k=x_{k+1}-x_k\)\(y_k=\nabla f(x_{k+1})-\nabla f(x_k)\)

BFGS公式:

\[H_{k+1}=(I-\frac{s_k y_k^T}{y_k^T s_k})H_{k}(I-\frac{y_k s_k^T}{y_k^T s_k})+\frac{s_k y_k^T}{y_k^T s_k}\]

DFP公式:

\[H_{k+1}=H_k+\frac{s_k s_k^T}{s_k^T y_k}-\frac{H_k y_k y_k^T H_k^T}{y_k^T H_k^T y_k}\]

因而擬牛頓法的迭代公式變爲

\[x_{k+1}=x_k+\alpha_k H_k \nabla f(x_k)\]

這裏的步長\(\alpha_k\)可使用某種線搜索方法進行肯定。(關於線搜索,有時間寫一篇博文)

擬牛頓法很好地解決了Hessian矩陣的計算問題,可是仍然沒有解決存儲問題。一個很好的解決辦法是有限內存BFGS方法。這裏不作進一步的介紹。

參考文獻

[1] 刁瑞,謝研. 電子工業出版社. 2016年. 算法筆記.

本文連接:www.superzhang.site/blog/common-method-of-unconstrained-optimization

相關文章
相關標籤/搜索