無約束最佳化問題

來源:互聯網
上載者:User

估計有些讀者看到這個題目的時候會覺得很數學,和自然語言處理沒什麼關係,不過如果你聽說過最大熵模型、條件隨機場,並且知道它們在自然語言處理中被廣泛應用,甚至你明白其核心的參數訓練演算法中有一種叫LBFGS,那麼本文就是對這類用於解無約束最佳化演算法的Quasi-Newton Method的初步介紹。
  事實上,這個系列的作者是我的師兄jianzhu,他在中文分詞、語言模型方面的研究很深入,如果大家對於srilm的原始碼感興趣,可以參考他個人部落格上寫的“srilm閱讀文檔系列”,很有協助。我曾經向他約過稿,他說業餘時間在學數學,比較忙,還以為他沒有時間給52nlp寫文章,沒想到今天晚上他突然交給了我這篇文檔,比較長,我會分幾部分陸續放在部落格上。這裡非常感謝他對52nlp的支援,以下內容作者為jianzhu。

  本篇文檔主要介紹無約束最佳化問題,同時初步介紹解該類問題目前常用的一種演算法即Quasi-Newton Method (擬牛頓法)。在介紹無約束最佳化問題之前,我們首先會從直觀上引入無約束最佳化的概念,並在此基礎上引入解這類問題的兩個重要概念:步長和方向。由步長的選擇引入重要概念line search,由方向的選擇引入重要概念Quasi-Newton Method。因此本篇介紹文檔主要分為以下幾個部分:無約束最佳化問題引入,Line Search ,Quasi-Newton Method和演算法總結。

1.無約束最佳化
  對無約束最佳化不熟悉的讀者也許要問,什麼是無約束最佳化。這裡以一個例子來說明該問題。
  
  上圖所示為一元函數f(x)的映像,無約束最佳化問題,即不對定義域或範圍做任何限制的情況下,求解函數f(x)的最小值,上面顯示兩個最小值點:一個為全域最小值點,另一個為局部最小值點。受限於演算法複雜度等問題,目前大部分無約束最佳化演算法只能保證求取局部最小值點。這時讀者不免要問,既然只能求取局部最小值點,那為什麼這類演算法還能應用呢。這是因為實際應用中,許多情形被抽象為函數形式後均為凸函數,對於凸函數來說局部最小值點即為全域最小值點,因此只要能求得這類函數的一個最小值點,該點一定為全域最小值點。
  理解了上面的無約束最佳化問題之後,我們就可以開始介紹無約束最佳化的求解過程了,對於無約束最佳化的求解首先我們需要選擇一個初始點x_0,如下所示:
  
  初始點選擇好之後,就可以按照各種不同的無約束最佳化求解演算法,求解最小值點了。求解過程中主要涉及兩個概念,即從初始點開始沿“哪個方向”以及“走多遠”到達下一個點處。所謂“走多遠”即之前提的“步長”的概念,“哪個方向”即方向概念。

2.Line Search
  Line search主要用於解決之前提到的步長的概念,即方向確定好之後,需要確定從當前點x_k沿著該方向走多遠,以便走到下一個合適的點x_k+1。若用p_k代表從第k個點走向第k+1點的方向,x_k代表當前點,x_k+1代表下一個點,a_k代表步長,則存在如下的等式:

  x_k+1 = x_k + a_k * p_k     (1)

  這裡簡要介紹一下p_k,大部分line search方法要求p_k為下降方向,即從當前點沿著p_k方向移動後導致函數值減少。由於目標是求取一個函數的最小值,因此最優的情況是求取沿p_k方向滿足f(x_k+1)為全域最小的a_k值,可用下式表示為:

  Ø (a_k) = f(x_k+1) = f(x_k + a_k * p_k) (2)

  
  由於直接求取滿足Ø (a_k)為全域最小值的a_k涉及到大量f(x_k + a_k * p_k)的計算,若從求導角度計算最小值,還會涉及到▽f_k+1的計算,計算量較大。因此從計算量角度考慮,可以採用如下較為折中的策略。
  方向確定好之後,每一步的line Search主要涉及兩個問題:1)什麼樣的a_k是合理的 2)如何選擇a_k的長度。下面將沿這兩個面展開討論,首先討論“什麼樣的a_k是合理的”,確定了該問題之後,我們就可以在此基礎上選擇a_k了。

2.1 a_k合理性討論
  如下將要討論關於a_k需要滿足的兩個條件,當a_k滿足這兩個條件後,就可以認為從x_k點移動到x_k+1點的步長已經確定下來了。第一個條件為sufficient decrease condition,從直觀角度來看,該條件主要要用保證x_k+1點的函數值要小於x_k點的函數值,滿足該條件後,才有全域收斂 的可能性。第二個條件為curvature condition,從直觀角度來看,該條件主要用於保證x_k點經過步長a_k的移動到達x_k+1後,▽f_k+1小於▽f_k。

2.1.1 sufficient decrease condition
  a_k的選擇一定要使得函數值滿足sufficient decrease condition,該條件可以用如下不等式描述:
     (3)
將公式(1)代入上式,可得:
     (4)
這裡有必要對上面的不等式做一些解釋:
 a) f(x_k) 代表函數在第x_k點的值
 b) ▽f_k代表函數在第x_k點的梯度
 c) p_k代表從第x_k點的走到x_k+1點的方向
 d) a_ k代表從第x_k點沿著p_k方向走到x_k+1點步長
 e) c_1為常量,需滿足 0< c_1 < 1,一般取c_1為1E-4(註:Quasi-Newton Method中要求0< c_1< 0.5)
當p_k為函數下降方向時,有:

      ▽f_k * p_k < 0       (5)

因此不等式4,即要求:

      f(x_k+1) < f(x_k)      (6)

  從圖形角度看,函數位於第k點時,以上各參數中只有a_k為變數,其他均為常量,因此(4)可以用以下不等式重新描述為:

      Ø(a_k) ≤ l(a_k)      (7)

其中:
  
以下為不等式(7)的圖形化表示:
 
因此只要步長a_k的選擇使得函數Ø(a_k)位於acceptable區間,就滿足sufficient decrease condition。

2.1.2 curvature condition
  a_k的選擇一定要使得函數梯度值滿足curvature condition,該條件可以用如下不等式描述:
       (8)
即為
       (9)
這裡有必要對上面的不等式做一些解釋:
 a) ▽f_k+1代表函數在第x_k+1點的梯度
 b) ▽f_k代表函數在第x_k點的梯度
 c) p_k代表從第k點的走到k+1點的方向
 d) c_2為常量,需滿足0< c_1 < c_2 < 1,一般取c_2為0.9
當p_k為函數下降方向時,有:

     ▽f_k * p_k < 0

因此不等式9,即要求:

      ▽f _k+1 ≥ c_2 * ▽f_k       (10)

從圖形角度看,不等式10即要求函數在第x_k+1點的變化速度要低於x_k點的變化速度,這一點可以從這兩點處的梯度處看出,如下圖所示。
  

2.1.3 Wolfe conditions
  所謂Wolfe conditions即sufficient decrease condition和curvature condition的綜合,即a_k需要同時滿足如下兩個條件:
  (11)
  (12)
圖形化表示後,如下圖所示:
 
實際應用中,常常會用到由Wolfe conditions引申出的strong Wolfe conditions,即a_k需要同時滿足如下兩個條件:
與Wolfe condtions唯一的區別是strong Wolfe condtions避免了▽f(x_k + a_k * p_k)取較大的正值情況。

2.2 a_k步長的選擇
  瞭解了a_k的合理性之後,就相當於獲得了尺規,在此基礎上我們可以選擇合適的策略來求取a_k。所有的line search過程在計算每一步的a_k時,均需要提供一個初始點a_0,然後再此基礎上產生一系列的{a_i},直到a_i滿足2.1節所規定的條件為止,此時該a_k即被確定為a_i,或者未找到一個合適的a_k。這裡我們僅介紹目前常用的策略平方插值和立方插值法。因此本節內容分為兩部分,2.2.1節介紹選擇a_k常用的平方插值和立方插值法,2.2.2節介紹由x_k點到x_k+1點,方向確定為p_k後,步長a_k具體計算過程。

2.2.1 平方立方插值法
  當給定一個初始步長a_0,若該初始步長滿足Wolfe conditions(或strong Wolfe conditions),則a_k被確定為a_0,當前點x_k步長計算過程結束,否則,我們可以在此基礎上,利用已知的三個資訊Ø(a_0)、Ø(0)、Ø’(0),構建一個二次(平方)插值多項式來擬合Ø(a_k)。該二次插值多項式如下所示:
 (15)
觀察上面的二次插值多項式可知,其滿足如下插值條件:

Ø_q(0) = Ø(0) Ø_q’(0) = Ø’(0) Ø_q(a_0) = Ø(a_0)

對二次插值多項式(15)求導並令其為零,即可獲得使得該多項式取得最小值的a值,如下所示:
 (16)
若a_1滿足Wolfe conditions(或strong Wolfe conditions),則a_k 被確定為a_1。否則在此基礎上構建一個三次(立方)插值多項式,並求得使得該多項式取最小值的a值,該a值的計算公式如下所示:


                           (17)
若a_i+1滿足Wolfe conditions(或strong Wolfe conditions),則a_k 被確定為a_i+1,否則一直使用三次插值多項式進行插值擬合。並且選擇使用a_i+1對應的Ø (a_i+1)和Ø’(a_i+1)替換a_i-1或a_i相應的值,一旦確定好a_i-1或a_i中的一種後,每次都替換對應的值,如替換a_i-1,則每次都使用新的a_i+1對應的值替換a_i-1,直到找到滿足Wolfe conditions(或strong Wolfe conditions)的a_i+1為止,此時a_k被確定為a_i+1,或者沒有找到合適的a_i+1。
  這裡有必要簡略解釋一下為何只使用到三次插值多項式,而沒有使用更高階的插值多項式。原因是三次插值多項式對函數某個點處的具體值有較好的擬合效果,同時又有較好的抗過擬合作用。
  最後有必要解釋一下初始步長a_0的選擇,對於Newton或quasi-Newton methods來說,初始步長a_0總是確定為1,該選擇確保當滿足Wolfe conditions(或strong Wolfe conditions),我們總是選擇單位1步長,因為該步長使得Newton或quasi-Newton methods達到較快的收斂速度。計算第零步長時,將初始步長a_0使用如下公式確定:
      (18)
第1步及其以後的初始步長a_0,直接設定為1。

2.2.2 步長a_k計算
  本節主要做一個總結,即綜合前面步長需要滿足的條件及步長迭代計算公式給出步長計算的具體過程。下面假設我們處於x_k點,因此要從該點選擇一個滿足Wolfe (或strong Wolfe) conditions的步長a_k,以便走到下一點x_k+1。因此我們選擇初始點a_0 = 1,Newton或quasi-Newton method中初始步長總是選擇為1。因此有:

1) 初始化 a_xlefta_yleft0 Ø(a_x) 、 Ø(a_y) 、Ø’(a_x) 、 Ø’(a_y)、a_min、a_max
2) 初始化 a_ilefta_0、Ø’(a_i)、Ø(a_i)
3) 若Ø(a_i) > Ø(a_x)

 說明步長a_i選擇的過大,因此使得Ø(a_i)滿足Wolfe(或strong Wolfe) conditions的步長a_k應位於a_x和a_i之間,使用平方和立方插值法對a_x和a_i分別進行插值,求取兩個新的步長a_quadratic和a_cubic,並取兩者之中和a_x較接近的步長,這裡假設為a_quadratic,將新的步長設為a_qudratic,同時進行以下操作:

a_y left a_i
Ø(a_y) left Ø(a_i)
Ø’(a_y) left Ø’(a_i)
a_i+1 left a_quadrati

同時在此情況下,說明a_k位於a_x和a_y之間

4) 若Ø’(a_i)* Ø’(a_x) < 0
  說明步長a_i選擇的過大,因此使得Ø(a_i)滿足Wolfe(或strong Wolfe) conditions的步長a_k應位於a_x和a_i之間,使用平方和立方插值法對a_x和a_i分別進行插值,求取兩個新的步長a_quadratic和a_cubic,並取兩者之中和a_i較接近的步長,這裡假設為a_quadratic,將新的步長設為a_qudratic,同時進行以下操作:

a_y left a_x
Ø(a_y) left Ø(a_x)
Ø’(a_y) left Ø’(a_x)

a_x left a_i
Ø(a_x) left Ø(a_i)
Ø’(a_x) left Ø’(a_i)

a_i+1 left a_quadrati

同時在此情況下,說明a_k位於a_x和a_y之間

5) 若|Ø’(a_i)| <|Ø’(a_x) |
  說明步長a_i選擇的過小,因此使得Ø(a_i)滿足Wolfe(或strong Wolfe) conditions的步長a_k應位於a_i和a_y之間,使用平方和立方插值法對a_x和a_i分別進行插值,求取兩個新的步長a_quadratic和a_cubic,並取兩者之中和a_i較接近的步長,這裡假設為a_quadratic,將新的步長設為a_qudratic,同時進行以下操作:

a_x left a_i
Ø(a_x) left Ø(a_i)
Ø’(a_x) left Ø’(a_i)

a_i+1 left a_quadrati

同時在此情況下,說明a_k位於a_x和a_y之間

6) 若|Ø’(a_i)| ≥|Ø’(a_x) |
  說明步長a_i選擇的過小,若之前已經確定出了a_k所屬的範圍a_x和a_y,則使得Ø(a_i)滿足Wolfe(或strong Wolfe) conditions的步長a_k應位於a_i和a_y之間,使用立方插值法對a_i和a_y進行插值,求取新的步長a_cubic,新的步長設為a_cubic;否則若a_x小於a_i,說明的新的步長不夠大,因此將新的步長設定為a_max,若a_x大於等於a_i,則說明新的步長不夠小,將其設為a_min,同時進行以下操作:

a_x left a_i
Ø(a_x) left Ø(a_i)
Ø’(a_x) left Ø’(a_i)

if 之前已經確定出了a_k所屬的範圍a_x和a_y

a_i+1 left a_cubic
else if a_x < a_i
a_i+1 left a_max
else if a_x ≥ a_i
a_i+1 left a_min

7) 計算判斷若a_i+1使得以下兩式(strong Wolfe condition)均成立:

則找到合理的步長a_k,將其設定為a_i+1

a_k left a_i+1

則x_k點步長a_k計算結束。
否則轉到2)繼續計算合理步長。

3.Quasi-Newton Method
  在第2節中我們瞭解了步長的概念,以及從x_k走到x_k+1點使用line search方法計算步長的方法。不過我們在那裡忽略了一個重要的概念,即“方向”。從第2節,我們瞭解到從每一點x_k走到下一點x_k+1時,需要給出要走的“方向”,只有“方向”確定好之後,才能在此基礎上應用line search方法找到對應的“步長”,因此在解決了“步長”計算問題之後,這裡我們將和大家一起瞭解一下每一步的“方向”如何確定。本節分為2大部分,首先我們通過newton method引入方向的概念,在此基礎上引入quasi-newton method。然後引入quasi-newton method中的一種重要方法BFGS method,並在BFGS method的基礎上介紹用於大規模計算的LBFGS method演算法,同時以此結束本節的所有內容。

3.1 Newton Method
  我想我們還依稀記得,微積分中用於求一元函數根的Newton法。該方法可用如下所示的圖形來描述:

首先我們選擇一個初始點x_0並計算獲得其對應的f(x_0),然後該方法用曲線y = f(x)在(x_0,f(x_0))的切線近似該曲線,把切線和x軸的交點記作x_1,點x_1通常x_0更接近所要求得根,同樣方法用點x_1處的切線近似該曲線,並求取切線和x軸的交點x_2,一直迭代下去,直到找到滿足我們所需的充分接近真實跟的解為止。因此Newton法從第k次近似值x_k求得第k+1次近似值x_k+1即為求x_k點處的切線和x軸的交點。
切線方程為:

y – f(x_k) = ▽f (x_k)(x – x_k)
=> 0 – f(x_k) =▽ f(x_k)(x – x_k)
=> ▽f(x_k)*x = ▽f(x_k)*x_k – f(x_k)
=> x = x_k – f(x_k)/▽f (x_k)

  因此x_k+1 = x_k – f(x_k)/▽f(x_k)       (19)
  從上面使用Newton Method求函數根的過程可以發現,首先需要選擇一個初始點,並在點處構建一個模型來近似該函數。
  切線模型:
  上面使用了相應點處的切線模型來近似函數,然後求取該近似模型的根以便求得更接近函數根的下一個點,該過程一直迭代下去,直到找到根為止。從上面構建每個點處的近似模型可以發現,該模型相對原函數來說簡化了很多,因此求解要容易一些。
  現在來考慮求取函數的最小值問題,方法類似。首先開始我們選擇一個初始點x_0,並構建函數在該點處的一個近似模型,上面求函數根時,我們構建的近似模型為切線模型。這裡我們構建一個拋物線模型:

  並求解該模型的梯度,同時令其為零,即:▽M_k(x+) = 0,在此基礎上求得x+,該值即使得近似模型取得最小值的點。
  對拋物線模型M_k求導並令其為零後,可得以下公式:
         (20)
  因此      (21)
  從上式可見,使用Newton法時,每一步的方向為p_k,而步長為1。從Newton法方向公式我們不難看出,若使用Newton法,則從每個最小值近似點x_k走到下一個近似點x_k+1的過程中將涉及函數Hessian矩陣▽▽f(x_k) (二階導)計算,而該Hessian矩陣無法保證在每個點處都是正定的,對正定矩陣來說存在如下不等式:
         (22)
  由於矩陣無法保證為正定矩陣,因此下式中
     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.