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}(xk)$ 的解一定是存在的。注意,这个假设仍然没有限制 \(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那个迭代的形式比较简单。

06-24 22:44