张量ADMM算法
ADMM被廣泛用在張量中,下篇是找到的一篇文章:
從等式約束的最小化問題說起:??????????????????????????????????
??????????????????????????????????????????????????????
上面問題的拉格朗日表達式為:
??????????????????????????????????????????????
也就是前面的最小化問題可以寫為:
??????????????????????????????????????????????minxmaxyL(x,y)minxmaxyL(x,y)?。
它對應的對偶問題為:
?????????????????????????????????????????????maxyminxL(x,y)maxyminxL(x,y)?。
下面是用來求解此對偶問題的對偶上升迭代方法:
????????????????????????????????????
這個方法在滿足一些比較強的假設下可以證明收斂。
?
為了弱化對偶上升方法的強假設性,一些研究者在上世紀60年代提出使用擴展拉格朗日表達式(augmented Lagrangian)代替原來的拉格朗日表達式:
??????????????????????????????????
其中ρ>0ρ>0。對應上面的對偶上升方法,得到下面的乘子法(method of multipliers):
?????????????????????????????????????????????????????
?
注意,乘子法里把第二個式子里的αkαk改成了擴展拉格朗日表達式中引入的ρρ。這不是一個隨意行為,而是有理論依據的。利用L(x,y)L(x,y)可以導出上面最小化問題對應的原始和對偶可行性條件分別為(?L?y=0?L?y=0,?L?x=0?L?x=0):
???????????????????????????????????????????????
既然xk+1xk+1?最小化?Lρ(x,yk)Lρ(x,yk),有:
????????????????????????????????????????
上面最后一個等式就是利用了yk+1=yk+ρ(Axk+1?b)yk+1=yk+ρ(Axk+1?b)。從上面可知,這種yk+1yk+1的取法使得(xk+1,yk+1)(xk+1,yk+1)滿足對偶可行條件?L?x=0?L?x=0。而原始可行條件在迭代過程中逐漸成立。
?
乘子法弱化了對偶上升法的收斂條件,但由于在x-minimization步引入了二次項而導致無法把x分開進行求解(詳見[1])。而接下來要講的Alternating Direction Method of Multipliers (ADMM)就是期望結合乘子法的弱條件的收斂性以及對偶上升法的可分解求解性。ADMM求解以下形式的最小化問題:
??????????????????????????????????????????????
其對應的擴展拉格朗日表達式為:?
????????????????????
ADMM包括以下迭代步驟:
????????????????????????????????????????
ADMM其實和乘子法很像,只是乘子法里把xx和zz放一塊求解,而ADMM是分開求解,類似迭代一步的Gauss-Seidel方法。其中(3.4)中的推導類似于乘子法,只是使用了zk+1zk+1最小化Lρ(xk+1,z,yk)Lρ(xk+1,z,yk):
???????????????????????????????????????
其中用到了zz對應的對偶可行性式子:
????????????????????????????????????????????????????L?z=?g(z)+BTy=0?L?z=?g(z)+BTy=0
?
定義新變量u=1ρyu=1ρy,那么(3.2-3.4)中的迭代可以變為以下形式:
???????????????????????????
在真正求解時通常會使用所謂的over-relaxation方法,也即在zz和uu中使用下面的表達式代替其中的Axk+1Axk+1:
?????????????????????????????????????????αkAxk+1?(1?αk)(Bzk?c)αkAxk+1?(1?αk)(Bzk?c),
其中αkαk為relaxation因子。有實驗表明αk∈[1.5,1.8]αk∈[1.5,1.8]可以改進收斂性([2])。
?
下面讓我們看看ADMM怎么被用來求解大型的機器學習模型。所謂的大型,要不就是樣本數太多,或者樣本的維數太高。下面我們只考慮第一種情況,關于第二種情況感興趣的讀者可以參見最后的參考文獻[1, 2]。樣本數太多無法一次全部導入內存,常見的處理方式是使用分布式系統,把樣本分塊,使得每塊樣本能導入到一臺機器的內存中。當然,我們要的是一個最終模型,它的訓練過程利用了所有的樣本數據。常見的機器學習模型如下:
????????????????????????????????????minimize?x∑Jj=1fj(x)+g(x)minimize?x∑j=1Jfj(x)+g(x),
其中xx為模型參數,fj(x)fj(x)對應第jj個樣本的損失函數,而g(x)g(x)為懲罰系數,如g(x)=||x||1g(x)=||x||1。
?
假設把JJ個樣本分成NN份,每份可以導入內存。此時我們把上面的問題重寫為下面的形式:?
????????????????????????????????????????????
除了把目標函數分成NN塊,還額外加了NN個等式約束,使得利用每塊樣本計算出來的模型參數xixi都相等。那么,ADMM中的求解步驟(3.2)-(3.4)變為:?
?????????????????????????????
例如求解L1懲罰的LR模型,其迭代步驟如下(u=1ρyu=1ρy,g(z)=λ||z||1g(z)=λ||z||1):?
????????????????????????????????????
其中xˉ?1N∑Nixixˉ?1N∑iNxi,yˉyˉ的定義類似。
?
在分布式情況下,為了計算方便通常會把uu的更新步驟挪在最前面,這樣uu和xx的更新可以放在一塊:?
?????????????????????????????????????
?
ADMM的框架確實很牛逼,把一個大問題分成可分布式同時求解的多個小問題。理論上,ADMM的框架可以解決大部分實際中的大尺度問題。我自己全部實現了一遍這個框架,主要用于求解LR問題,下面說說我碰到的一些問題:
1.?收斂不夠快,往往需要迭代幾十步。整體速度主要依賴于xixi更新時所使用的優化方法,個人建議使用liblinear里算法,但是不能直接拿來就用,需要做一些調整。
2.?停止準則和ρρ的選取:停止準則主要考量的是xixi和zz之間的差異和它們本身的變動情況,但這些值又受ρρ的取值的影響。它們之間如何權衡并無定法。個人建議使用模型在測試集上的效果來確定是否停止迭代。
3.?不適合MapReduce框架實現:需要保證對數據的分割自始至終都一致;用MPI實現的話相對于其他算法又未必有什么優勢(如L-BFGS、OwLQN等)。
4.?relaxation步驟要謹慎:αα的取值依賴于具體的問題,很多時候的確可以加快收斂速度,但對有些問題甚至可能帶來不收斂的后果。用的時候不論是用x -> z -> u的更新步驟,還是用u -> x -> z的更新步驟,在u步使用的x_hat要和在z步使用的相同(使用舊的z),而不是使用z步剛更新的z重算。
5.?warm start 和子問題求解逐漸精確的策略可以降低xixi更新時的耗時,但也使得算法更加復雜,需要設定的參數也增加了。
[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.
總結
- 上一篇: c#控件弹幕效果_C# Form 实现桌
- 下一篇: autosar工具链_Autosar开发