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)}\),甚至可以對這個多個目標函式進行分散式優化。

二、對偶問題

原問題:

\[\begin{align}
\min \quad & f(x) \\
s.t. \quad & Ax=b
\end{align}
\]

拉格朗日函式:\(L(x,y) = f(x) + y^T(Ax-b)\)

對偶函式:\(g(y) = \inf_x L(x,y) \leq f(x)\)

對偶問題:\(\max_y g(y)\)

最優解:

\[\begin{align}
& x^* = \underset{x}{argmin} \quad L(x,y^*) \\
& y^* = \underset{y}{argmax} \quad g(y)
\end{align}
\]

三、對偶上升法

對偶變數 \(y\) 迭代更新:\(y^{k+1} = y^k + \alpha^k \nabla g(y^k)\),其中

\[\begin{align}
\nabla g(y^k) &= \nabla_y(L(\hat x,y^k)) \\
& = \nabla_y(f(\hat x) + (y^k)^T(A \hat x -b)) \\
& = A\hat x -b
\end{align}
\]

上述公式中 \(\hat x = \underset{x}{argmin} L(x,y^k)\)

變數和對偶變數更新的步驟:

  1. $x^{k+1} = \underset{x}{argmin} L(x,y^k)\quad \text{變數 \(x\)的更新}$
  2. $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)\) 可以通過下式表達:

\[\begin{align}
L(x,y)
& = \sum_{i=1}^N f_i(x_i) + y^T (\sum_{i=1}^N A_ix_i-b) \\
& = \sum_{i=1}^N (f_i(x_i)+y^T A_ix_i) - y^Tb \\
& = \sum_{i=1}^N L_i(x,y) - y^Tb
\end{align}
\]

從上述推導可以看出,對偶函式 \(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\)

進而上述對偶上升法變數的更新將會變成:

\[x^{k+1} = \underset{x}{argmin}\quad L_\rho(x,y^k) \\
y^{k+1} = y^k + \rho(Ax^{k+1}-b)
\]

5.1 步長為 \(\rho\) 的好處

這裡通過簡單地公式推導證明下使用步長 \(\rho\) 的優點。

對於優化問題:

\[\begin{align}
min & \quad f(x) \\
s.t. & \quad Ax=b
\end{align}
\]

它的 KKT 條件為:

\[\begin{align}
& Ax^*-b = 0\\
& \nabla f(x^*) + A^Ty=0
\end{align}
\]

現在我們更新變數 \(x\),即 \(\underset{argmin}{x} L_\rho (x^{k+1},y^k)\),有如下推導:

\[\begin{align}
0
& = \nabla_x L_\rho (x^{k+1},y^k) \\
& = \nabla_x f(x^{k+1}) + A^Ty^k + \rho A^T (Ax^{k+1}-b) \\
& = \nabla_x f(x^{k+1}) + A^T[y^k+\rho (Ax^{k+1}-b)] \\
& = \nabla_x f(x^{k+1}) + A^T y^{k+1}
\end{align}
\]

從上述推導,可以看出步長選擇 \(\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 以上的問題性質會差很多):

\[\begin{align}
\min ~ & f(x)+g(z)\\
s.t. ~ & Ax+Bz=C
\end{align}
\]

從上面 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 演算法的變數更新:

\[\begin{align}
x^{k+1}:=~ & \arg\min_{x} L_{\rho}(x,z^k,y^k)\\
z^{k+1}:=~ & \arg\min_{z} L_{\rho}(x^{k+1},z,y^k)\\
y^{k+1}:= ~ & y^k+\rho(Ax^{k+1}+Bz^{k+1}-c).
\end{align}
\]

6.1 ADMM 的 scaled form 形式

注:ADMM 的 scaled form 形式本質上就是對對偶變數做了處理,並且定義了殘差,通過殘差可以更易於判別 ADMM 演算法的收斂性

假設 \(r = Ax+Bz-C,\quad u=\frac{y}{\rho}\)

進而可以得到新的增廣拉格朗日函式:

\[\begin{align}
L_\rho
& = f(x)+g(z)+y^(r)+\frac{\rho}{2}\|r\|_2^2 \\
& = f(x) + g(z) + \frac{\rho}{2}\|r+\frac{y}{\rho}\|_2^2 - \frac{1}{2\rho}\|y\|_2^2 \\
& = f(x) + g(z) + \frac{\rho}{2}\|r+u\|_2^2 - \frac{\rho}{2}\|u\|_2^2 \\

\end{align}
\]

由此 ADMM 演算法將被改寫成:

\[\begin{align}
x^{k+1}:=~ & \arg\min_{x} \left\{ f(x)+\frac{\rho}{2}\|Ax+Bz^k-c+u^k\|_2^2 \right\}\\
z^{k+1}:=~ & \arg\min_{z} \left\{ g(z)+\frac{\rho}{2}\|Ax^{k+1}+Bz-c+u^k\|_2^2 \right\}\\
u^{k+1}:= ~ & u^k+Ax^{k+1}+Bz^{k+1}-c
\end{align}
\]

上述這個形式就比前面那個更簡潔,我們一般叫前一種形式為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那個迭代的形式比較簡單。