ADMM優化算法

從等式約束的最小化問題說起:                                  
                                                     image 
上面問題的拉格朗日表達式爲:
                                             image 
也就是前面的最小化問題可以寫爲:
                                              minxmaxyL(x,y) 。
它對應的對偶問題爲:
                                             maxy minxL(x,y) 。
下面是用來求解此對偶問題的對偶上升迭代方法
                                   image 
這個方法在滿足一些比較強的假設下可以證明收斂。

 

爲了弱化對偶上升方法的強假設性,一些研究者在上世紀60年代提出使用擴展拉格朗日表達式(augmented Lagrangian)代替原來的拉格朗日表達式:
                                 image 
其中ρ>0。對應上面的對偶上升方法,得到下面的乘子法(method of multipliers)
                                                    image 

 

注意,乘子法裏把第二個式子裏的αk改成了擴展拉格朗日表達式中引入的ρ。這不是一個隨意行爲,而是有理論依據的。利用L(x,y)可以導出上面最小化問題對應的原始和對偶可行性條件分別爲(Ly=0Lx=0):
                                              image 
既然xk+1 最小化 Lρ(x,yk),有:
                                      image  
上面最後一個等式就是利用了yk+1=yk+ρ(Axk+1b)。從上面可知,這種yk+1的取法使得(xk+1,yk+1)滿足對偶可行條件Lx=0。而原始可行條件在迭代過程中逐漸成立。

 

乘子法弱化了對偶上升法的收斂條件,但由於在x-minimization步引入了二次項而導致無法把x分開進行求解(詳見[1])。而接下來要講的Alternating Direction Method of Multipliers (ADMM)就是期望結合乘子法的弱條件的收斂性以及對偶上升法的可分解求解性。ADMM求解以下形式的最小化問題:
                                             image 
其對應的擴展拉格朗日表達式爲: 
                   image 
ADMM包括以下迭代步驟:
                                       image 
ADMM其實和乘子法很像,只是乘子法裏把xz放一塊求解,而ADMM是分開求解,類似迭代一步的Gauss-Seidel方法。其中(3.4)中的推導類似於乘子法,只是使用了zk+1最小化Lρ(xk+1,z,yk)
                                    image   
其中用到了z對應的對偶可行性式子:
                                                   Lz=g(z)+BTy=0

 

定義新變量u=1ρy,那麼(3.2-3.4)中的迭代可以變爲以下形式:
                          image 
在真正求解時通常會使用所謂的over-relaxation方法,也即在zu中使用下面的表達式代替其中的Axk+1
                                         αkAxk+1(1αk)(Bzkc)
其中αk爲relaxation因子。有實驗表明αk[1.5,1.8]可以改進收斂性([2])。

 

下面讓我們看看ADMM怎麼被用來求解大型的機器學習模型。所謂的大型,要不就是樣本數太多,或者樣本的維數太高。下面我們只考慮第一種情況,關於第二種情況感興趣的讀者可以參見最後的參考文獻[1, 2]。樣本數太多無法一次全部導入內存,常見的處理方式是使用分佈式系統,把樣本分塊,使得每塊樣本能導入到一臺機器的內存中。當然,我們要的是一個最終模型,它的訓練過程利用了所有的樣本數據。常見的機器學習模型如下:
                                    minimize xJj=1fj(x)+g(x)
其中x爲模型參數,fj(x)對應第j個樣本的損失函數,而g(x)爲懲罰係數,如g(x)=||x||1

 

假設把J個樣本分成N份,每份可以導入內存。此時我們把上面的問題重寫爲下面的形式: 
                                           image 
除了把目標函數分成N塊,還額外加了N個等式約束,使得利用每塊樣本計算出來的模型參數xi都相等。那麼,ADMM中的求解步驟(3.2)-(3.4)變爲: 
                            image 
例如求解L1懲罰的LR模型,其迭代步驟如下(u=1ρyg(z)=λ||z||1): 
                                   image 
其中x¯1NNixiy¯的定義類似。

 

在分佈式情況下,爲了計算方便通常會把u的更新步驟挪在最前面,這樣ux的更新可以放在一塊: 
                                     image

 

ADMM的框架確實很牛逼,把一個大問題分成可分佈式同時求解的多個小問題。理論上,ADMM的框架可以解決大部分實際中的大尺度問題。我自己全部實現了一遍這個框架,主要用於求解LR問題,下面說說我碰到的一些問題:
1. 收斂不夠快,往往需要迭代幾十步。整體速度主要依賴於xi更新時所使用的優化方法,個人建議使用liblinear裏算法,但是不能直接拿來就用,需要做一些調整。
2. 停止準則和ρ的選取:停止準則主要考量的是xiz之間的差異和它們本身的變動情況,但這些值又受ρ的取值的影響。它們之間如何權衡並無定法。個人建議使用模型在測試集上的效果來確定是否停止迭代。
3. 不適合MapReduce框架實現:需要保證對數據的分割自始至終都一致;用MPI實現的話相對於其他算法又未必有什麼優勢(如L-BFGS、OwLQN等)。
4. relaxation步驟要謹慎α的取值依賴於具體的問題,很多時候的確可以加快收斂速度,但對有些問題甚至可能帶來不收斂的後果。用的時候不論是用x -> z -> u的更新步驟,還是用u -> x -> z的更新步驟,在u步使用的x_hat要和在z步使用的相同(使用舊的z),而不是使用z步剛更新的z重算。
5. warm start 和子問題求解逐漸精確的策略可以降低xi更新時的耗時,但也使得算法更加複雜,需要設定的參數也增加了。


[References]
[1] S. Boyd. Alternating Direction Method of Multipliers (Slides).

[2] S. Boyd et al. Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers, 2010.


原文鏈接

http://www.cnblogs.com/breezedeus/p/3496819.html


stanford的比較好的一個源碼和實例鏈接

http://www.stanford.edu/~boyd/papers/admm/


先轉載了,抽時間仔細研究後,再詳細說明該算法的實例

發佈了22 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章