BFGS演算法剖析與實現
05-17
BFGS演算法剖析與實現
來自專欄 ML隨筆
之前介紹DFP演算法是用以進行Hessian逆矩陣的近似,這裡所的BFGS是從逼近Hessian原始矩陣出發,然後進行一系列推導的過程。其最後通過Sherman-Morrison公式將輸出進行變換,仍然以更新Hessian逆矩陣來實現的,所不同的是由於其推導的初始目標不同,因此最後的迭代公式與DFP不同。最後一步的更新公式為:其它步驟可見擬牛頓法之DFP演算法剖析。
代碼
代碼位置見:https://github.com/sloth2012/scalaML/blob/master/src/main/scala/com/lx/algos/ml/optim/newton/BFGS.scala。
使用見:https://github.com/sloth2012/scalaML/blob/master/src/test/scala/com/lx/algos/ml/NewtonTest.scala。小收穫(bug fix備忘)
修正版的DFP或者BFGS,其要求正定,其中以及。這裡的並非是輸入,而是權重。計算需要知道的是用一階原始梯度就行,不用加負號,之前加了負號後,導致迭代無法正定約束。因此之前的DFP演算法剖析中,那個正定放鬆約束可去除,即直接。
數值實驗指出, BFGS演算法是最好的變尺度演算法, 當變數個數不超過100時, 通常BFGS法比共軛梯度法效果好.
參考文獻
- 牛頓法與擬牛頓法學習筆記(四)BFGS 演算法
推薦閱讀:
※從建立清晰的步驟開始——Machine Learning Project Checklist
※深入機器學習系列4-KMeans
※深度學習與故障診斷的另一次嘗試
※機器學習之邏輯回歸分類
※Valse2018參會小結——生成對抗網路系列1
TAG:機器學習 |