Processing math: 14%

3/20/2014

[最佳化理論] Conjugate Direction Methods (2) - The Conjugate Gradient Algorithm for Quadratic Objective function

OK,現在接續前面兩篇
1. [最佳化理論] Conjugate Direction Methods (0) -Theory
2. [最佳化理論] Conjugate Direction Methods (1) - Basic Algorithm for Quadratic Objective function

這次要來解決如何找到 Conjugate Direction的辦法。幫助我們找到 Conjugate Direction 的方法稱作 共軛梯度演算法 (Conjugate Gradient algorithm) 。

此演算法 藉由 梯度的幫助,使得在任意跌代步驟中,Conjugate Direction 可以由 前一個跌代步的方向 與 現在的 梯度做線性組合來計算出來。且用此法所產生的 Direction 可以保證是 每個方向都是互為 Q-conjugate。故名為 Conjugate Gradient Algorithm;最後我們會給出一個以 二階具有 n=3 個變數的目標函數 作為例子來展示這套方法。

===============

如前所述,考慮標準二階目標函數
J(u)=12uTQuuTb, uRn
其中 Q=QT>0

現在我們來看看Conjugate Gradient Algorithm 是如何找到 Conjugate Direction:

對 初始跌代步:k=0
給定任意初始值 x(0) ,且設定 初始方向為最陡坡度(steepest descent)方向,亦即

d(0)=J(u(0))

因此 u(1)=u(0)+α0d(0)

其中 α0 一般而言是由line search (一般而言使用MATLAB fminsearch 指令較為簡便)得到,亦即 α0=argmin
不過如果是 考慮 二階目標函數中,則我們可以求得精確的 \alpha_k 如下式
\alpha_0 = \arg \min J(x^{(0)} + \alpha d^{(0)}) =  - \frac{{\bigtriangledown^T J({u^{(k)}}){d^{(k)}}}}{{{d^{(k)T}}Q{d^{(k)}}}} 在算出 u^{(1)}  之後,接著我們移動到下一個跌代步。
因為我們要找到 d^{(1)} 且 此方向與 d^{(0)} 互為Q-conjugate。所以如前所述我們選擇
d^{(1)} = \text {linear combination of } \bigtriangledown J(u^{(1)}) \ \& \ d^{(0)} 亦即,對 k+1 跌代步的時候 我們選
d^{(k+1)} = - \bigtriangledown J(u^{(k+1)}) + \beta_k \cdot d^{(k)} \ \ \ ,k=0,1,2,...
其中 \beta_k = - \frac{{\bigtriangledown^T J({u^{(k+1)}}){d^{(k)}}}}{{{d^{(k)T}}Q{d^{(k)}}}}

=========================
我們將 Conjugate Gradient Algorithm (for Quadratic Objective Function) 總結如下8個步驟:

  1. k=0 時候給定初始值 u^{(0)}
  2. 計算初始梯度  \bigtriangledown J(u^{(0)}) ,且設令其為初始方向 d^{(0)} = - \bigtriangledown J(u^{(0)}) :注意,如果 \bigtriangledown J(u^{(0)}) = 0 則跌代停止
  3. 決定 \alpha_k = - \frac{{\bigtriangledown^T J({u^{(k)}}){d^{(k)}}}}{{{d^{(k)T}}Q{d^{(k)}}}}
  4. 計算 u^{(k+1)} = u^{(k)} + \alpha_k d^{(k)}
  5. 計算下一個跌代的梯度:   \bigtriangledown J(u^{(k+1)});如果 \bigtriangledown J(u^{(0)}) = 0 則跌代停止
  6. 計算 \beta_k = - \frac{{\bigtriangledown^T J({u^{(k+1)}}){d^{(k)}}}}{{{d^{(k)T}}Q{d^{(k)}}}}
  7. 計算下一個Conjugate 方向 d^{(k+1)} = - \bigtriangledown J(u^{(k+1)}) + \beta_k \cdot d^{(k)}
  8. k=k+1 並重覆到step 3

下面我們將給個例子來驗證上述的方法。

=================

Example:
考慮下列二階 目標函數
J({u_1},{u_2},{u_3}) = \frac{3}{2}u_1^2 + 2u_2^2 + \frac{3}{2}u_3^2 + u_1u_3 + 2u_2u_3 - 3{u_1} - {u_3} 令初始值為 u^{(0) } = [0, \ 0, \ 0]^T 求使用 Conjugate Gradient Method 找出最佳解。

Solution

首先觀察二階 目標函數,我們可以將其改寫成矩陣型式如下

J(u) = \frac{1}{2} u^T Q u - u^T b

\Rightarrow J(u)= \frac{1}{2}\left[ {\begin{array}{*{20}{c}}{{u_1}}&{{u_2}}&{{u_3}}\end{array}} \right]\left[ {\begin{array}{*{20}{c}}3&0&1\\0&4&2\\1&2&3\end{array}} \right]\left[ {\begin{array}{*{20}{c}}{{u_1}}\\{{u_2}}\\{{u_3}}\end{array}} \right] - \left[ {\begin{array}{*{20}{c}}{{u_1}}&{{u_2}}&{{u_3}}\end{array}} \right]\left[ {\begin{array}{*{20}{c}}3\\0\\1\end{array}} \right]

接著我們計算梯度:

 \bigtriangledown J(u) = Q u - b = \left[ {\begin{array}{*{20}{c}}{3{u_1} + {u_3} - 3}\\{4{u_2} + 2{u_3}}\\{{u_1} + 2{u_2} + 3{u_3} - 1}\end{array}} \right]

在使用 Conjugate Gradient Method之前我們可以先看看其最佳解落在哪裡:
由一階必要條件  \bigtriangledown J(u^*)=0  與二階充分條件 \bigtriangledown^2 J(u^*) >0 可知最佳解為

 u^* = Q^{-1}b = [1, 0, 0]^T

現在我們開始用 Conjugate Gradient Method 來看看會
現在由步驟2可知初始梯度為

 \bigtriangledown J(u^{(0)}) = Q u^{(0)} - b = \left[ {\begin{array}{*{20}{c}}{ - 3}\\{0}\\{ - 1}\end{array}} \right]

故 初始Conjugate direction

d^{(0)} = -\bigtriangledown J(u^{(0)}) =\left[ {\begin{array}{*{20}{c}}{  3}\\{0}\\{  1}\end{array}} \right]

接著由步驟3 我們可以計算 初始 \alpha_k

 \alpha_0 = - \frac{{\bigtriangledown^T J({u^{(0)}}){d^{(0)}}}}{{{d^{(0)T}}Q{d^{(0)}}}} = \frac{10}{36} = 0.2778

接著由步驟4 : u^{(k+1)} = u^{(k)} + \alpha_k d^{(k)} 可以算出

u^{(1)} = u^{(0)} + \alpha_0 d^{(0)} = [0.8333,\ 0, \ 0.2778]^T

接著由步驟5:計算下一個跌代的梯度:   \bigtriangledown J(u^{(k+1)})

 \bigtriangledown J(u^{(1)}) = Q u^{(1)} - b =  [-0.2222,\ 0.5566, \ 0.6667]^T

接著由步驟6:計算  \beta_k

\beta_0 = - \frac{{\bigtriangledown^T J({u^{(1)}}){d^{(0)}}}}{{{d^{(0)T}}Q{d^{(0)}}}} = 0.08025

再者由步驟7 :計算下一個Conjugate 方向 d^{(k+1)}

 d^{(1)} = - \bigtriangledown J(u^{(1)}) + \beta_0 \cdot d^{(0)} = [0.4630, -0.5556, -0.5864]^T

再來回到步驟3 重複前述步驟

最後會得到 u^{(3)} = u^{(2)} + \alpha_2 d^{(2)} = [1, \ 0, \ 0]^T\bigtriangledown J(u^{(3)}) = 0

上述表示在第三步的時候收斂到最佳解。此結果確實說明了 Conjugate Direction Method 保證對二階 具有 n變數的 目標函數 能夠在 n次跌代之內收斂。此例 n=3 故在第3次跌代的時候即收斂到最佳解。

ref: E. K. P. Chong, S. H. Zak, An Introduction to Optimization 2nd.

---
延伸閱讀

沒有留言:

張貼留言

[人工智慧] 本地端 DeepSeek R1 快速安裝:以 Macbook Pro M4 Chip為例

最近火熱的 DeepSeek R1 模型由於採用了 distill 技術,可以大幅降低計算成本,使得一般人有機會在自家筆電上跑性能逼近 Open AI ChatGPT o1的大語言模型。本文簡單介紹一步安裝在 Macbook Pro 的方法以及使用方法,以下測試採用 Macboo...