工作中遇到優化的問題,回顧一下當初學過的基本優化算法。
本博客主要考慮無約束且非線性的極小化優化問題:
在工作中遇到的變量和函數值均爲1維變量,方便理解和處理。
一、牛頓法
直接貼合工作目標,考慮變量的維度爲的情形。
牛頓法的算法思想:給定一個隨機初始點,在該點附近對目標函數作二階泰勒展開,找到下一個迭代點,重複上述方式直至找到極值點。
設爲當前迭代點(即當前極值點),則當前泰勒展開式如下所示:
其中,表示的高於2階的無窮小,忽略該值後使用近似表示。
此時,對於函數根據求極值的必要條件(極值點導數趨近於0)有:
根據上述公式及牛頓法算法思想,給定初試迭代點,則可以構造如下迭代公式:
從初始迭代點開始可以通過公式迭代產生序列逼近目標函數的極小值點。
對於的情況,可以將二階泰勒展開式作如下推廣:
爲的梯度向量(簡記爲,),爲的海塞矩陣(Hessian Matrix,簡記爲,),即:
根據極值的必要條件對公式求導可得:
此時,根據公式可知,那麼類似公式可得基本迭代公式如下所示:
矩陣非奇異 => => 原始牛頓迭代法
該迭代公式的搜索方向定義爲,也稱爲牛頓方向。
注意:原始牛頓法中,只有搜索方向,而缺少步長。那麼當遇到非二次型目標函數時,可能出現更新後目標函數值變大的的情況,即原始牛頓法不能保證目標函數值一直下降。
二、擬牛頓法
第一節詳細介紹了牛頓法的公式推導,整個原始牛頓法的核心就是公式。
注意其中需要計算當前迭代點的一階導數、二階導數的逆,這可能導致計算複雜度加大、且有可能遇到Hessian矩陣非正定而無法求逆的情況,從而導致原始牛頓迭代法失效。
爲了克服上述問題,擬牛頓法就被提出了。顧名思義,擬牛頓法類似牛頓法,不同的是:擬牛頓法不直接求二階導數,而是採用近似的方式擬合Hessian矩陣或Hessian矩陣的逆,該近似矩陣保證正定,從而進行優化迭代。
2.0 擬牛頓條件
對求極值的必要條件(即公式)代入可得:
在公式中引入記號:
則公式可以通過公式的記號轉化爲:
公式和公式即爲擬牛頓條件。在擬牛頓法中使用近似矩陣 or 使用近似矩陣:
接下來,就按照不同的近似方式介紹擬牛頓法的具體實現方式。
2.1. DFP
DFP算法的核心思想:使用近似Hessian矩陣的逆,
DFP算法的迭代格式:
其中,初始化的取單位矩陣,接下來推導校正矩陣的構造方式,
TRICKY METHOD:
爲保證的對稱正定性,直接假設
將公式和公式代入公式可得,
注意,公式和公式中紅色括號內的內容均爲實值,所以DFP的Tricky1就是對這兩個數字做簡單賦值:
通過公式和公式可得和的值:
至此,我們想要求依舊需要確定和的值,通過將公式代入公式可得:
此時,DFP的Tricky2就是直接將公式左右兩邊對應位置的元素取相等,即:
將公式分別代入公式可得和的值:
此時,根據公式可推導出的值:
DFP算法流程:
1 給定初始迭代點 和迭代精確到閾值 ,初始的近似Hessian矩陣,迭代次數;
2 計算 和 來確定搜索方向 ;
3 利用Wolfe方法(步長搜索的方式)得到搜索步長 ,更新迭代點位置 ;
4 若滿足 ,達到終止條件,結束;
5. 否則,計算 ;
6 計算 ;
7 令 ,轉至步驟2繼續。
2.2. BFGS
BFGS算法的思想與DFP類似,推導流程也類似。
算法的核心思想:使用使用近似Hessian矩陣,
BFGS算法的迭代格式:
其中,初始化的取單位矩陣,接下來類似DFB直接推導校正矩陣的構造方式,
TRICKY METHOD:
爲保證的對稱正定性,直接假設
之後就是完完全全的公式推導過程:
進入BFGS的Tricky:
此時,根據公式可推導出的值:
對比DFP的公式和BFGS的公式可以發現,更新方式只是 和 的位置互換。
通過公式可以得到近似的Hessian矩陣,但在實際更新中使用的搜索方向是,這裏使用 公式直接給出 與 間的關係:
至此,BFGS算法可以使用類似DFP的算法流程進行迭代更新。