在整理舊電腦時,才發現13年下半年電腦里有不少殘文。老師說,東西擱下了再拿起來花費的時間和之前可能差不多。我一眼看過去這篇關於分布式計算的文章,貌似還真的沒有了當時理解的深度和感覺。當時還想利用ADMM算法,把統計中常見的帶懲罰的高維問題在此框架下用R重寫一下,但是中途多種事情一耽擱,就早已拋之腦后。看來任何事情,真的還是需要堅持,哪怕撥點時間都是好的。先把一篇殘文扔出來祭奠下過去的13年吧。公式多文字長,慎入!
業界一直在談論大數據,對於統計而言,大數據其實意味着要不是樣本量增加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(y)可導,便可以利用梯度上升法,交替更新參數,使得同時收斂到最優。迭代如下:
當gg不可微的時候也可以將其轉化下,成為一個所謂的subgradient的方法,雖然看起來不錯,簡單證明下即可知道xkxk和ykyk同時可達到optimal,但是上述條件要求很苛刻:f(x)f(x)要求嚴格凸,並且要求αα選擇有比較合適。一般應用中都不會滿足(比如f(x)f(x)是一個非零的仿射函數),因此dual ascent不會直接應用。