08-ADMM算法
凸優化從入門到放棄完整教程地址:https://www.cnblogs.com/nickchen121/p/14900036.html
ADMM最基本情形的推導還是比較經典的。這里介紹這份著名講義里的treatment:
Boyd S, Parikh N, Chu E, et al. Distributed optimization and statistical learning via the alternating direction method of multipliers[J]. Foundations and Trends® in Machine learning, 2011, 3(1): 1-122.
一、ADMM 算法動機
這里簡單講個例子,在深度學習中,樣本的維度 \(d\) 是非常大的,如果我們直接對這種大維度的樣本構建目標函數 \(f(x)\),是不容易求解的。
因此我們可以考慮是否可以把 \(x\) 拆分成 \(x_1,x_2,\cdots,x_N\),也就是把目標函數分割成多個目標函數 \(f_{()x_1)},f_{(x_2)},\cdots,f_{(x_N)}\),然后我們先最小化 \(f_{(x_1)}\),之后在最小化 \(f_{(x_2)}\),甚至可以對這個多個目標函數進行分布式優化。
二、對偶問題
原問題:
拉格朗日函數:\(L(x,y) = f(x) + y^T(Ax-b)\)
對偶函數:\(g(y) = \inf_x L(x,y) \leq f(x)\)
對偶問題:\(\max_y g(y)\)
最優解:
三、對偶上升法
對偶變量 \(y\) 迭代更新:\(y^{k+1} = y^k + \alpha^k \nabla g(y^k)\),其中
上述公式中 \(\hat x = \underset{x}{argmin} L(x,y^k)\)
變量和對偶變量更新的步驟:
- $x^{k+1} = \underset{x}{argmin} L(x,y^k)\quad \text{變量 \(x\)的更新}$
- $y^{k+1} = y^k + \alpha^k (Ax^{k+1}-b)\quad \text{對偶變量 \(y\) 的更新}$
注:如果 \(f(x)\) 是線性的,可以看到 \(L(x,y)\) 基本無下界,也就是說 \(x\) 的更新不可以求解,這是未來使用增廣拉格朗日函數的原因之一
四、對偶分割
對偶分割簡單點說,就是假設目標函數可分,則對偶函數同樣可分,這里給出簡單的證明。
假設 \(f\) 可分,也就是說目標函數 \(f(x) = \sum_{i=1}^N f_i(x_i)\),約束條件 \(Ax = [A_1,A_2,\cdots,A_N]x=A_1x,A_2x,\cdots,A_Nx\)
通過上述的假設,則對偶函數 \(L(x,y)\) 可以通過下式表達:
從上述推導可以看出,對偶函數 \(L(x,y)\) 同樣可分。
也就是說,在對 \(x\) 進行 \(argmin\) 的時候,可以分布式處理 \(x\):\(x_i^{k+1} = \underset{x_i}{argmin} \quad L_i(x_i,y^k)\)
五、乘子法(增廣拉格朗日函數)
前面講對偶上升法的時候講到,\(f(x)\) 線性時更新時可能無法求解,因此把拉格朗日函數變成增廣拉格朗日函數,即在拉格朗日函數的基礎上加上懲罰因子 \(\frac{\rho}{2} \|Ax-b\|_2^2\),讓拉格朗日函數更加光滑、穩定,並且解決 \(f(x)\) 線性無法求解的問題,也就是為了不需要 \(f(x)\) 一定要是嚴格凸的。
增廣拉格朗日函數:\(L(x,y) = f(x) + y^T(Ax-b) + \frac{\rho}{2}\|Ax-b\|_2^2\)
進而上述對偶上升法變量的更新將會變成:
5.1 步長為 \(\rho\) 的好處
這里通過簡單地公式推導證明下使用步長 \(\rho\) 的優點。
對於優化問題:
它的 KKT 條件為:
現在我們更新變量 \(x\),即 \(\underset{argmin}{x} L_\rho (x^{k+1},y^k)\),有如下推導:
從上述推導,可以看出步長選擇 \(\rho\) ,在找 \(x^{k+1}\) 的時候,也就是 \((x^{k+1},y^{k+1})\) 自然而然的滿足了 KKT 條件。
注:使用了增廣拉格朗日函數后,雖然求解更加穩定,但是由於懲罰項中有交叉項,如 \(x_1×x_2\),導致拉增廣格朗日函數不可以對偶分割,因此無法做到分布式處理。因此有了 ADMM 算法,結合了對偶上升法的變量和對偶變量的交叉迭代更新和增廣拉格朗日函數的穩定性
六、ADMM算法
為了整合對偶上升法的可分解性與乘子法優秀的收斂性質,人們就又提出了改進形式的優化 ADMM。目的就是想能分解原函數和擴增函數,以便於在對 \(f\) 更一般的假設條件下並行優化。所以 ADMM 是又想引入新變量,然后又想通過交叉更換方向進而交替優化。
ADMM 算法求解 2-block 的凸優化問題的形式如下(n-block 就是 n 個變量,但是 3-block 以上的問題性質會差很多):
從上面 ADMM 算法的形式可以看出,它的思想就是想把 primal 變量、目標函數拆分,但是不再像對偶上升方法那樣,將拆分開的 \(x_i\) 都看做是 \(x\) 的一部分,后面融合的時候還需要融合在一起,而是最先開始就將變量分別看做是不同的變量 \(x\) 和 \(z\),同時約束條件也如此處理,這樣的好處就是后面不需要一起融合 \(x\) 和 \(z\) ,保證了前面優化過程的可分解性(每次只優化不同的變量)。
ADMM 算法的增廣拉格朗日函數:\(L_{\rho}(x,z,y)=f(x)+g(z)+y^T(Ax+Bz-c)+(\rho/2)\|Ax+Bz-c\|_2^2\)
ADMM 算法的變量更新:
6.1 ADMM 的 scaled form 形式
注:ADMM 的 scaled form 形式本質上就是對對偶變量做了處理,並且定義了殘差,通過殘差可以更易於判別 ADMM 算法的收斂性
假設 \(r = Ax+Bz-C,\quad u=\frac{y}{\rho}\)
進而可以得到新的增廣拉格朗日函數:
由此 ADMM 算法將被改寫成:
上述這個形式就比前面那個更簡潔,我們一般叫前一種形式為ADMM的unscaled形式,而這種則是scaled形式了。並且很多ADMM分析都是基於這個scaled形式的。
上述\(u\) 為scaled scaled dual variable, \(r\) 可以理解為對偶變量 \(u\) 的每一步迭代的殘差,而 \(u^k = u^0 + \sum_{j=1}^k r^j\) 定義為殘差和。
七、ADMM的收斂性證明思路
在兩個不太強的假設前提下,本節給出ADMM基本形式的收斂性證明的思路。
假設1: 凸函數\(f,g\) 是closed和proper的。
假設2:(非增廣)拉格朗日函數 \(L_0\) 至少有一個鞍點(saddle point)。
假設1等價於epigraph \(\{(x,t)\in \mathbb{R}^n\times\mathbb{R}:f(x)\leq t\}, \{(z,s)\in \mathbb{R}^m\times\mathbb{R}:g(z)\leq s\}\) 都是非空的閉凸集(closed nonempty convex set),也就是說 \(\arg\min_{x} L_{\rho}(x,z^k,y^k)\) , $ \arg\min_{z} L_{\rho}(x{k+1},z,yk)$ 的解一定是存在的。注意,這個假設仍然沒有限制 \(f,g\) 一定要是可微(differentiable)的,如果 \(f,g\)不可微,可以考慮使用次梯度。
假設2 可以這樣解釋鞍點的作用:假設 \((x^*,y^*,z^*)\) 為鞍點,則會有 \(L_0(x^*,z^*,y)\leq L_0(x^*,z^*,y^)* \leq L_0(x,z,y^*)\),毫無疑問,這個不等式是一定成立的,也就是說在 \((x^*,y^*,z^*)\) 這個點有一個方向更大,另一個方向更小,滿足鞍點的性質,進而推出 \(L_0\) 必有一個鞍點。從而說明了 ADMM 算法是可解的。
基於這兩個假設,我們證明如下結果:
- 目標函數值收斂。隨着 \(k\rightarrow\infty, ~ f(x^k)+g(z^k)\rightarrow p^*.\) 也就是說最終我們的目標函數值是最優的。
- 對偶變量收斂。隨着 \(k\rightarrow\infty, ~ y^k\rightarrow y^*.\) 也就是最終對偶變量的值收斂到某個對偶變量的最優解。
- 殘差收斂。隨着 \(k\rightarrow\infty, ~ r^k\rightarrow 0.\) 也就是說最終我們的解是可行(feasible)的。
八、寫在最后
事實上,實際當中你如果寫代碼跑ADMM會發現它不像那些梯度下降,牛頓法,很容易快速收斂到一個較高的誤差精度,ADMM實際的收斂速度往往比那些算法慢得多。ADMM的主要應用,主要是在解空間規模非常大的情況下(比如 \(A,B\) 都是存儲空間上GB的矩陣),這個時候很多傳統的方法不好用,強制需要分塊求解,而且對解的絕對精度往往要求也沒那么高。當然,然后你還得祈禱在primal space上argmin那個迭代的形式比較簡單。