機器學習&數據挖掘筆記_12(對Conjugate Gradient 優化的簡單理解)


 

  數學優化方法在機器學習算法中至關重要,本篇博客主要來簡單介紹下Conjugate Gradient(共軛梯度法,以下簡稱CG)算法,內容是參考的文獻為:An Introduction to the Conjugate Gradient Method Without the Agonizing Pain,具體細節大家還需仔細閱讀那篇文章,這篇博客並不是重現那篇論文的內容,只是簡單的梳理下CG算法的流程,以及它的重要思路,方便大家理解CG算法。

  首先我們需要解決的問題是:求滿足線性方程(1):的解x.

  那么有人就這么認為了:這個解x不就是嗎?對,這樣說也不能算錯,但是如果A不可逆那么x這樣就解不出來了。另外當A矩陣的尺度非常大時(比如幾百萬維),即使其逆存在,這樣計算的計算量也太大。而CG算法則可以通過少數的幾步迭代來求出其近似解,雖然求出的解是近似的,但是其精度可以達到很高,完全可以滿足我們的需求。

  下面就來看看CG算法實現時的大概流程:

  1. 隨機選取一個初始點,記為,並記為此時方程(1)的殘差,記第一個搜索方向為,搜索步長為.

  2. 現在假設我們已經按照某個迭代公式在第k步求出了,此時的殘差,前面k次的搜索方向分別為,很明顯這些變量都是已知的,而現在我們需要求的是第k次的搜索方向.在CG理論中,有這么一個假設,即,的線性組合,記為.

  3. 為了求出,就必須求出系數,怎么求呢?CG理論中另外一個性質就是:這k個向量關於A共軛,即滿足共軛方程,其中0<=j<=k-1. 下面就可以利用該性質列出k個方程來求解這些系數了,其結果為:當0<=j<k-1時,系數;當j=k-1時,系數. 因此此時的搜索方向.

  4. 既然的值有了,搜索方向也有了,下一步就改確定搜索步長了,求它的思想是使取得極值,即導數為0。一旦求出了,則下一個迭代點也就求出了。表達式對求導為0后可求得.

  5. 循環步驟2,3,4,直到滿足收斂條件。

  上面只是CG算法的基本版本,而常見的CG算法版本是針對上面的計算公式作了進一步推導,利用Krylov 子空間的一些性質,最后簡化為:,同時對殘差也是經過迭代得到(此處省略)。 由簡化前后(此處省略N公式)對比可知,將原先表達式中一些矩陣和向量的乘積運算量減小了,因為很大一部分矩陣乘向量都轉換成了向量乘向量。

 

  最后附上論文中關於CG算法的流程圖,大家可以參考上面5個步驟來理解CG的主要思路,本博客中的符號可能和論文中的不一定相同,且公式也不一定是正確的,博文只是讓大家知道這些公式是由什么理論推出的,有個宏觀認識,一切需以論文中的內容為主。

   

 

  參考資料:

  Shewchuk, J. R. (1994). An introduction to the conjugate gradient method without the agonizing pain, Carnegie Mellon University, Pittsburgh, PA.

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM