最近在研究正則化框架如何應用在大數據平台上。找到了《Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers》這篇文章,感覺很適合現在的研究。下面轉載的一篇博客,寫的很細致,很有用。
業界一直在談論大數據,對於統計而言,大數據其實意味着要不是樣本量增加n→∞,要不就是維度的增加p→∞,亦或者兩者同時增加,並且維度與樣本量的增長速度呈線性或者指數型增長。在稀疏性的假設條件下,再加上一些正則性方法,統計學家可以證明各種加penalty的模型所給出的參數估計具有良好的統計性質,收斂速度也有保證,同時還會給出一些比較好的迭代算法,但是,他們並沒有考慮真實環境下的所消耗的計算時間。雖然統計學家也希望盡量尋求迭代數目比較少的算法(比如one-step估計),但是面對真實的Gb級別以上的數據,很多時候我們還是無法直接用這些算法,原因是一般的硬件都無法支撐直接對所有數據進行運算的要求。如果想減少抽樣誤差,不想抽樣,又想提高估計的精度,那么還是需要尋求其他思路,結合已有的模型思想來解決這些問題。在目前條件下,並行化、分布式計算是一種比較好的解決思路,利用多核和多機器的優勢,這些好算法便可以大規模應用,處理大數據優勢便體現出來了。對於統計而言,數據量越大當然信息越可能充分(假設冗余成分不是特別多),因為大樣本性質本身就希望樣本越多越好嘛。
本文是基於Stephen Boyd 2011年的文章《Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers》進行的翻譯和總結。Boyd也給出了利用matlab的CVX包實現的多種優化問題的matlab示例。
1. 優化的一些基本算法思想
ADMM算法並不是一個很新的算法,他只是整合許多不少經典優化思路,然后結合現代統計學習所遇到的問題,提出了一個比較一般的比較好實施的分布式計算框架。因此必須先要了解一些基本算法思想。
1.1 Dual Ascent
對於凸函數的優化問題,對偶上升法核心思想就是引入一個對偶變量,然后利用交替優化的思路,使得兩者同時達到optimal。一個凸函數的對偶函數其實就是原凸函數的一個下界,因此可以證明一個較好的性質:在強對偶性假設下,即最小化原凸函數(primal)等價於最大化對偶函數(dual),兩者會同時達到optimal。這種轉化可以將原來很多的參數約束條件變得少了很多,以利於做優化。具體表述如下:
在強對偶性的假設下,primal和dual問題同時達到最優。
因此,若對偶函數g(y)可導,便可以利用梯度上升法,交替更新參數,使得同時收斂到最優。迭代如下:
當g不可微的時候也可以將其轉化下,成為一個所謂的subgradient的方法,雖然看起來不錯,簡單證明下即可知道xk和yk同時可達到optimal,但是上述條件要求很苛刻:f(x)要求嚴格凸,並且要求α選擇有比較合適。一般應用中都不會滿足(比如f(x)是一個非零的仿射函數),因此dual ascent不會直接應用。
1.2 Dual Decomposition
雖然dual ascent方法有缺陷,要求有些嚴格,但是他有一個非常好的性質,當目標函數f是可分的(separable)時候(參數抑或feature可分),整個問題可以拆解成多個子參數問題,分塊優化后匯集起來整體更新。這樣非常有利於並行化處理。形式化闡述如下:
因此可以看到其實下面在迭代優化時,x-minimization步即可以拆分為多個子問題的並行優化,對偶變量更新不變這對於feature特別多時還是很有用的。
對偶分解是非常經典的優化方法,可追溯到1960年代。但是這種想法對后面的分布式優化方法影響較大,比如近期的graph-structure優化問題。
1.3 Augmented Lagrangians and the Method of Multipliers
從上面可以看到dual ascent方法對於目標函數要求比較苛刻,為了放松假設條件,同時比較好優化,於是就有了Augmented Lagrangians方法,目的就是放松對於f(x)嚴格凸的假設和其他一些條件,同時還能使得算法更加穩健。
從上面可以看到該問題等價於最初的問題,因為只要是可行解對目標函數就沒有影響。但是加了后面的(ρ/2)∥Ax−b∥22懲罰項的好處是使得對偶函數gρ(y)=infxLρ(x,y)在更一般的條件下可導。計算過程與之前的dual ascent基本一樣,除了最小化x時候加了擴增項。
上述也稱作method of multipliers,可能也是因為更新對偶變量y時步長由原來變化的αk轉為固定的ρ了吧。該算法在即使f(x)不是嚴格凸或者取值為+∞情況都可以成立,適用面更廣。同樣可以簡單證明primal變量x和對偶變量y可以同時達到最優。
雖然Augmented Lagrangians方法有優勢,但也破壞了dual ascent方法的利用分解參數來並行的優勢。當f是separable時,對於Augmented Lagrangians卻是not separable的(因為平方項寫成矩陣形式無法用之前那種分塊形式),因此在x−min步時候無法並行優化多個參數xi。如何改進,繼續下面的議題就可以慢慢發現改進思想的來源。
2. Alternating Direction Method of Multipliers(ADMM)
2.1 ADMM算法概述
為了整合dual ascent可分解性與method multiplers優秀的收斂性質,人們就又提出了改進形式的優化ADMM。目的就是想能分解原函數和擴增函數,以便於在對f更一般的假設條件下並行優化。ADMM從名字可以看到是在原來Method of Multipliers加了個Alternating Direction,可以大概猜想到應該是又想引入新變量,然后交叉換方向來交替優化。形式如下:
從上面形式確實可以看出,他的思想確實就是想把primal變量、目標函數拆分,但是不再像dual ascent方法那樣,將拆分開的xi都看做是x的一部分,后面融合的時候還需要融合在一起,而是最先開始就將拆開的變量分別看做是不同的變量x和z,同時約束條件也如此處理,這樣的好處就是后面不需要一起融合x和z,保證了前面優化過程的可分解性。於是ADMM的優化就變成了如下序貫型迭代(這正是被稱作alternating direction的緣故):
后面我們可以看到這種拆分思想非常適合統計學習中的ℓ1-norm等問題:loss + regulazition(注意:一定要保證z分解出來,ADMM借助的就是用一個z變量來簡化問題,不管他是約束還是其他形式也罷,需要構造一個z出來,后面具體到細節問題我們會有更深的體會)。
為了簡化形式,ADMM有一個scaled form形式,其實就是對對偶變量做了scaled處理。先定義每一步更新的殘差為r=Ax+Bz−c,於是稍加計算
此處u=(1/ρ)y稱為scaled dual variable,並令每一步迭代的殘差為rk=Axk+Bzk−c,以及累計殘差uk=u0+∑kj=1rj,於是ADMM形式就可以簡化為如下形式
寫成這種形式有利於后面簡化優化問題,當然可以不作任何處理。
2.2 ADMM算法性質和評價
(1)收斂性
關於收斂性,需要有兩個假設條件:
- f和g分別是擴展的實數函數Rn(Rm)→R⋃+∞,且是closed、proper和convex的;
- 擴增的lagrangian函數L0有一個鞍點(saddle point);對於約束中的矩陣A,B都不需要滿秩。
在此兩個假設下,可以保證殘差、目標函數、對偶變量的收斂性。
Note:實際應用而言,ADMM收斂速度是很慢的,類似於共軛梯度方法。迭代數十次后只可以得到一個acceptable的結果,與快速的高精度算法(Newton法,內點法等)相比收斂就慢很多了。因此實際應用的時候,其實會將ADMM與其他高精度算法結合起來,這樣從一個acceptable的結果變得在預期時間內可以達到較高收斂精度。不過一般在大規模應用問題中,高精度的參數解對於預測效果沒有很大的提高,因此實際應用中,短時間內一個acceptable的結果基本就可以直接應用預測了。
(2)停止准則
對於ADMM的能到到optimal的條件此處就不做贅述了,與基本的primal和dual feasibility 的條件差不多,即各primal variable的偏導和約束條件為0,從最優條件中可以得到所謂的對偶殘差(dual residuals)和初始殘差(primal residuals)形式:
相對而言,此處更難把握的其實是停止准則,因為收斂速度問題,要想獲得一個還過得去可以拿來用的參數解,那么判斷迭代停止還是比較重要的。實際應用中,一般都根據primal residuals和dual residuals足夠小來停止迭代,閾值包含了絕對容忍度(absolute tolerance)和相對容忍度(relative tolerance),設置還是非常靈活和難把握的(貌似網上有不少人吐槽這個停止准則的不靠譜- -!),具體形式如下:
上面的p√和n√分別是維度和樣本量。一般而言,相對停止閾值ϵrel=10−3或者10−4,絕對閾值的選取要根據變量取值范圍來選取(咋選的呢?沒說額,具體比例都不給說- -!)
另外一些細節問題,比如原來懲罰參數ρ是不變的,一些文獻也做了一些可變的懲罰參數,目的是為了降低對於懲罰參數初始值的依賴性。不過變動的ρ會導致ADMM的收斂性證明比較困難,因此實際中假設經過一系列迭代后ρ也穩定,邊可直接用固定的懲罰參數ρ了。還有其他問題,諸如x與z迭代順序問題,實際操作下有所有不同,這些不是特別重要之處,可以忽略。其他與ADMM比較相關算法的有dual ADMM算法,distributed ADMM算法,還有整合了ADMM與proximal method of multiplier的算法
2.3 ADMM一般形式與部分具體應用
當構造了ADMM算法中的f,g,A,B后,便可直接應用該算法了。我們會經常遇到如下三種一般形式的問題
- 二次目標優化項(quadratic objective terms);
- 可分的目標函數和約束(separable objective and constraints);
- 光滑目標函數項(smooth objective terms)。
為下面討論的方便,下面僅寫出x-update的形式,根據ADMM簡化形式,z-update對稱更新即可:
上述更新x時候z和u都定下來,是個常數,z更新時后相同。
Proximity Operator(近鄰算子)
上述形式有種特殊情況:當A=I時,即約束條件沒有x的線性組合形式,只是對於x的可行區域進行限制。這種問題相當常見,目前統計學習也有不少類似的高維優化問題。此時x-update如下
上述右邊可以寫成v的函數proxf,ρ(v)被稱作帶懲罰ρ的f的proximity operator(通常稱作proximal minimization,近鄰最小化),在變分分析中,還被稱作f的Moreau-Yosida正則化。如果f形式很簡單,可以寫出x-update的解析解,比如f是非空的凸包C上的示性函數,那么x-update就可以直接寫成投影形式
投影與懲罰參數ρ無關。若f是非負象限Rn+的投影,則直接有x+=(v)+。
下面再談談上述提到的三種一般形式的優化問題。
(1)Quadratic Objective Terms
假設f是如下(凸)的二次函數
P是對稱的半正定矩陣P∈Sn+。這種形式問題也包含了f是線性或者常數的特殊情況。若P+ρATA可逆,那么x-update步求個導即有如下的顯示解,是v的仿射函數
因此在x-minnimiztion步只需要做兩個矩陣運算即可,求逆與乘積,選用合適的線性運算庫即可以得到不錯的計算性能。當然還可以利用一些矩陣分解技巧,這個要看矩陣大小和稀疏程度。因為對於Fx=g,可以將F=F1F2⋯Fk,然后Fizi=zi−1,z1=F−11g,x=zk,這樣會更節省計算時間。其他矩陣計算技巧,基本都是如何對矩陣大規模求解,利用矩陣的稀疏性、緩存分解等來提高性能。此處不贅述,有個很重要的求逆的定理很有用:
如果對於上述二次函數受限於某仿射集x-update步就更復雜些,如
x-update還有個重要的KKT方程可用:
(2)Smooth Objective Terms
當f光滑時,那么求導即成為可能了。對於一些非線性優化問題,包含梯度算法等方法的L-BFGS算法可以用。對於該算法有些小技巧如下:
- 早終止(early termination):當f(x)+(ρ/2)|Ax−v|22梯度很小時,早點終止迭代,否則后面就很慢了。
- 熱啟動(warm start):即啟動迭代時,利用之前迭代過的值帶入即可。
(3)Separable objective and constraints 可分函數和約束對於並行計算和分布式計算來說是一個好消息。如果ATA是分塊的對角陣,那么約束中|Ax|22也是可分的,則擴增的拉格朗日函數Lρ也是可分的。(注意,此處是指函數中的參數可分成小子塊,而不是說數據可分。)下面有一個很重要的例子,即soft thresholding(針對l1+l2問題):
當f(x)=λ|x|1,λ>0,並且A=I時,那么x-update就變成了
這種形式很常見在目前的高維統計中,雖然第一項在0處不可導,但是也有解析解,被稱作軟閾值(soft thresholding),也被稱作壓縮算子(shrinkage operator)。
在優化領域,軟閾值被稱作是ℓ1-norm問題的近鄰算子(proximity operator)。
3. 一些具體優化應用
3.1受約束的凸優化問題
一般的受約束的凸優化問題可以寫成如下形式
此類問題可以寫成ADMM形式
其中的g函數即C的示性函數,上述是scaled形式,那么具體算法就是
則上述x−min就變成了一個具體的受約束的優化問題。比如對於經典的二次規划問題(QP)
寫成ADMM形式
即受約束的區域就是{x∣x≥0},g是向非負象限投影的示性函數。而x-update就變成了之前在Quadratic Objective Terms中談到的f(x)有仿射集定義域的優化問題,根據KKT條件即可寫出來x-update更新的形式,參見2.3節。
如果上述對x限制不是限制x≥0上,而是一個錐約束(conic constraint)x∈K,那么x-update不變,繼續上述KKT方程,而只需要變一下z-update,將向Rn+投影改成向K投影。比如將上述約束改成{Ax=b,x∈§n+},即x屬於半正定空間,那么向(S^n_{+})投影就變成了一個半正定問題,利用特征值分解可以完成。這種受約束的凸優化問題的形式化對后續許多問題,特別是我們很關注的ℓ1-norm問題很重要,基本上都是轉化成這種形式來直接應用ADMM算法,所以這里要好好把握其核心思想和形式。
雖然我對優化不在行,但是感覺優化問題還是挺有意思的,下面是一個經典問題,即找到兩個非空凸包的交集中的一點。該算法都可以追溯到1930年代的Neumann交替投影算法(alternating projections algorithm):
ΠC,ΠD分別是兩個集合的歐式空間投影。寫成ADMM形式就是
上述問題還可推廣至找到N個非空凸包交集中一個點的問題,這樣其實在x步是可以並行來做的,於是就有
3.2 ℓ1-norm問題
高維統計理論的發展,如果要追溯起來我覺得可以從Lasso解法算起,類似的思想在往前追可能是Huber相關的工作。是對於lasso問題,由於當年大家還沒搞清楚lasso和boosting之間關系,對於sparsity性質不了解,誰也不知道如何很好地解決這個問題。直到后面Efron提出了LARS算法,對兩者的路徑解相似性做了很好的闡述,於是后面關於變量選擇,關於basis-pursuit,compressed sensing,sparse graphical models等各種新問題的產生,隨后各種優化算法也隨之涌現出來,諸如Gradient Projection, Proximal methods,ADMM (Alternating Direction Method of Multipliers), (Split) Bregman methods,Nesterov’s method。不過要能夠大規模部署ℓ1-norm的解決方案,那么這些算法中ADMM可能是首選。此處ℓ1-norm問題並不僅僅指Lasso問題,包含了多種ℓ1-norm類型問題。下面均介紹下。
之所以說ADMM適合機器學習和統計學習的優化問題,因為大部分機器學習問題基本都是“損失函數+正則項”形式,這種分法恰好可以套用到ADMM的框架f(x)+g(z)。因此結合ADMM框架基本可以解決很多已有的問題,以及利用ℓ1-norm構造的新的優化問題。下面將先介紹非分布式計算的版本,后面會單開一節來介紹如何分布式計算。
(1)Least Absolute Deviations
先從一個簡單的問題開始。在穩健估計中,LAD是一個應用很廣的模型,相對於直接優化平方和損失|Ax−b|22,優化絕對損失|Ax−b|1,它的抗噪性能更好。在ADMM框架下,往之前的受約束的凸優化問題靠攏,這個問題有簡單的迭代算法
(2)Huber fitting
Huber問題與上面的其實差不多,只是損失函數形式不同,換成了Huber懲罰函數
因此與LAD除了z-update不在是proximity operator(或稱作軟閾值)之外,其余均是相同的
看着像是proximity operator與一個殘差的加權。
LAD和Huber fitting這種問題只是一些傳統損失不加正則項的ADMM化,注意一定要構造個z出來即可,x可以基本不用管,總是需要解的,下面的帶有正則項的優化問題,ADMM形式就會更明顯。
(3)Basis Pursuit
基追蹤法師系數信號處理的一種重要方法。目的是想找到一組稀疏基可以完美恢復信號,換套話說就是為一個線性方程系統找到一個稀疏解。原始形式如下,與lasso有些像:
修改成ADMM形式,注意往之前受約束的凸優化問題的那種形式回套,將ℓ1看做約束,然后構造帶定義域的f(x),於是就有解
其中Π(zk−uk)是向一個線性約束的歐式空間中投影x∈Rn∣Ax=b,這也是有直接的顯示解的
對於矩陣求逆、分解等用之前矩陣那些小技巧即可加快計算,節省計算資源。
最近還有一類算法來解決ℓ1問題,被稱作Bregman iteration methods,對於基追蹤相關問題,加正則項的Bregman iteration就是method of multiplier,而所謂的split Bregman iteration就等同於 ADMM。我沒有繼續深究,應該就是類似於並行化的ADMM算法來解決基追蹤問題。
(4)一般化的損失函數 + ℓ1正則項問題
這類問題在高維統計開始時便是一個非常重要的問題,而即使到了現在也是一個非常重要的問題,比如group lasso,generalized lasso,高斯圖模型,Tensor型圖模型,與圖相關的ℓ1問題等算法的開發,都可以在此框架上直接應用和實施,這正是ADMM一個優勢所在,便於快速實施,也便於可能的大規模分布式部署。
可以看到與Basis Pursuit解法只是在x-update上有區別:Basis Pursuit是構造出來一個投影函數f(x),而一般化的損失函數f(x)+ℓ1正則項問題,用ADMM就更為自然。所以很適合作為框架來解決這一類問題:廣義線性模型(普通線性、logistic回歸、possion回歸、softmax回歸)+正則項;廣義可加模型+正則項;似然函數(高斯圖方向)+正則項。
- Lasso:f(x)=12|Ax−b|22,於是利用ADMM算法,x-update的解析解就是xk+1=(ATA+ρI)−1(ATb+ρ(zk−uk));於是x-update看起來是個嶺回歸了,因此ADMM對於lasso可以看做迭代的使用嶺回歸。至於矩陣求逆那些,利用之前的矩陣小技巧解決。
- Generalized lasso:這個問題可能不是那么為眾人所熟悉,他是Tibs的兒子搞出來的框羅類似fused lasso這種事先定義好的線性變化的懲罰項的模型,損失函數是平方損失,而懲罰變成了一個特殊的參數線性組合
min12∥Ax−b∥22+λ∥Fx∥1 ⟹1d fused lasso,A=IFij=⎧⎩⎨⎪⎪1−10j=i+1j=iotherwise
若將上述這種寫成ADMM形式,同樣可以放到ADMM算法框架中解決
- Group lasso:graph lasso問題應用比較廣,對不同組的參數同時進行懲罰,進行一組組參數的挑選,故曰group lasso。不同於lasso,其正則項變成了∑Ni=1|xi|2,xi∈Rni,lasso其實是group lasso的一種特殊形式。正則項並不是完全可分的。此時只是z-update變成了block的軟閾值形式
這種形式還可以擴展到group間有重合的情況,即化成N可能存在重合的組Gi⊆1,…,n。一般來說這種問題會非常難解決,但是對於ADMM算法只需要換下形式就很直接(x,z互換,會變成后面非常重要的一致性優化問題(consensus optimization),局部xi與全局真解z子集z^i的對應。)
- Sparse Gaussian graph model:對於稀疏高斯圖,熟悉該問題的人知道這其實是lasso的圖上的推廣,損失函數寫成似然函數的負數即可l(x)=tr(SX)−logdetX,X∈Sn++。於是原來向量的操作就變成了矩陣操作,ADMM算法也有點變化:
上述算法繼續化簡,對於z-update做逐個元素軟閾值操作即可Zk+1ij=Sλ/ρ(XK+1ij+Ukij)。對於x-update也類似操作,直接求導一階導為0,移項后對對稱矩陣做特征值分解即可
ρX−X−1=ρ(Zk−Uk)−S=QΛQT,QQT=I,Λ=diag(λ1,…,λn) →ρX^−X^−1=Λ,X^=QTXQ
由於Λ是對角陣,對於每個對角元素來說,上述問題就是解一個二次方程,解方程后,再將X^變化成X即可
總之,上述跟ℓ1相關的問題,基本都可以納入ADMM框架,並且可以快速求解。