數學優化方法在機器學習算法中相當重要,本篇博客主要來簡單介紹下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)的殘差
,記第一個搜索方向爲
,搜索步長爲
.spa
2. 如今假設咱們已經按照某個迭代公式在第k步求出了,此時的殘差
,前面k次的搜索方向分別爲
,很明顯這些變量都是已知的,而如今咱們須要求的是第k次的搜索方向
.在CG理論中,有這麼一個假設,即
爲
,
的線性組合,記爲
.blog
3. 爲了求出,就必須求出係數
,怎麼求呢?CG理論中另一個性質就是:
和
這k個向量關於A共軛,即知足共軛方程
,其中0<=j<=k-1. 下面就能夠利用該性質列出k個方程來求解這些係數了,其結果爲:當0<=j<k-1時,係數
;當j=k-1時,係數
. 所以此時的搜索方向
.博客
4. 既然的值有了,搜索方向
也有了,下一步就改肯定搜索步長
了,求它的思想是使
取得極值,即導數爲0。一旦求出了,則下一個迭代點
也就求出了。表達式對求導爲0後可求得
.數學
5. 循環步驟2,3,4,直到知足收斂條件。it
上面只是CG算法的基本版本,而常見的CG算法版本是針對上面的計算公式和
做了進一步推導,利用Krylov 子空間的一些性質,最後簡化爲:
和
,同時對殘差也是通過迭代獲得(此處省略)。 由簡化先後(此處省略N公式)對比可知,將原先表達式中一些矩陣和向量的乘積運算量減少了,由於很大一部分矩陣乘向量都轉換成了向量乘向量。io
最後附上論文中關於CG算法的流程圖,你們能夠參考上面5個步驟來理解CG的主要思路,本博客中的符號可能和論文中的不必定相同,且公式也不必定是正確的,博文只是讓你們知道這些公式是由什麼理論推出的,有個宏觀認識,一切需以論文中的內容爲主。
參考資料:
Shewchuk, J. R. (1994). An introduction to the conjugate gradient method without the agonizing pain, Carnegie Mellon University, Pittsburgh, PA.