这篇博客旨在介绍下最近在通信中经常用到的 ADMM 算法。 算法的全称为 Alternating Direction Method of Multipliers, 中文直译为: 交替方向乘子法。 本文的参考文献为 Boyd 的经典著作: Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers, 事实上从名字就可以看出, 正如Boyd在摘要中所提到的, ADMM算法的优势是可以将问题进行分布式优化,从而解决大规模计算问题。 然而在通信的应用中, 更多时候则是把一个多变量问题进行解耦,通过对每个单变量进行迭代求解来简化问题本身。
对偶上升法与增广拉格朗日乘数法在介绍ADMM算法前, 我想先简要介绍下对偶上升法与增广拉格朗日乘数法, 两者可以视为ADMM算法的前身或简化版本, 而ADMM算法则又可视为两者的结合体。
对偶上升法对偶上升法,在之前的博客中有更为详细的介绍, 对偶上升法 (Dual Ascent)。 这里我们只简述其核心。 对于一个等式约束的凸优化问题如下: minimize f ( x ) subject to A x = b , \begin{array}{ll} \operatorname{minimize} & f(x) \\ \text { subject to } & A x=b, \end{array} minimize subject to f(x)Ax=b, 其中, f ( x ) f(x) f(x)为凸函数。我们可以通过拉格朗日乘子法将限制条件写入目标函数中, 从而得到: L ( x , y ) = f ( x ) + y T ( A x − b ) L(x, y)=f(x)+y^{T}(A x-b) L(x,y)=f(x)+yT(Ax−b)
那么,其对偶函数为: g ( y ) = inf x L ( x , y ) g(y)=\inf _{x} L(x, y) g(y)=xinfL(x,y) 相应的对偶问题为: maximize g ( y ) \text { maximize } g(y) maximize g(y) 对偶上升法表示, 通过如下的步骤: x k + 1 : = argmin x L ( x , y k ) y k + 1 : = y k + α k ( A x k + 1 − b ) , \begin{aligned} &x^{k+1}:=\underset{x}{\operatorname{argmin}} L\left(x, y^{k}\right) \\ &y^{k+1}:=y^{k}+\alpha^{k}\left(A x^{k+1}-b\right), \end{aligned} xk+1:=xargminL(x,yk)yk+1:=yk+αk(Axk+1−b), 等价于求解对偶问题。这里 α k \alpha_k αk 为步长。 而从步骤的形式上看, 就是简单的先固定 y y y 优化 x x x, 再固定 x x x 优化 y y y。 但是是可以保证收敛的。 可以看到, 对偶上升法的优点是可以将多变量解耦开来。 值得一提的是, 迎合ADMM类所期望的分布式优化的特点, 对偶上升法也可以通过将变量分解为多个维度较低的变量再进行并行求解, 此时优化步骤变为: x i k + 1 : = argmin x i L i ( x i , y k ) y k + 1 : = y k + α k ( A x k + 1 − b ) \begin{aligned} x_{i}^{k+1} &:=\underset{x_{i}}{\operatorname{argmin}} L_{i}\left(x_{i}, y^{k}\right) \\ y^{k+1} &:=y^{k}+\alpha^{k}\left(A x^{k+1}-b\right) \end{aligned} xik+1yk+1:=xiargminLi(xi,yk):=yk+αk(Axk+1−b) 即将原高维变量 x x x 拆分成了多个 低维变量 x i x_i xi 进行依次优化。 在多个变量之间交替优化,迭代求解, 可以说是ADMM类算法贯彻的准则。
增广拉格朗日乘数法增广拉格朗日乘数法可以看做是对偶上升法的进阶, 但也不完全是。 他将拉格朗日函数写为: L ρ ( x , y ) = f ( x ) + y T ( A x − b ) + ( ρ / 2 ) ∥ A x − b ∥ 2 2 L_{\rho}(x, y)=f(x)+y^{T}(A x-b)+(\rho / 2)\|A x-b\|_{2}^{2} Lρ(x,y)=f(x)+yT(Ax−b)+(ρ/2)∥Ax−b∥22 可以看到, 相比于普通的拉格朗日函数(比如刚刚对偶上升法中所给出的), 他多了第三项,其中 ρ \rho ρ 为惩罚参数。 显然当 x x x 为最优值时, A x − b = 0 Ax-b=0 Ax−b=0, 因此这两个拉格朗日函数其实是相等的。 但是在迭代过程中, 有了这一项惩罚项后, 无论 f ( x ) f(x) f(x) 本身是否强凸, 由于增加了一个强凸惩罚项, 因此这个增广拉格朗日函数可视作 x x x的强凸函数, 从而对算法的收敛更有帮助。 增广拉格朗日乘数法的步骤为: x k + 1 : = argmin x L ρ ( x , y k ) y k + 1 : = y k + ρ ( A x k + 1 − b ) \begin{aligned} x^{k+1} &:=\underset{x}{\operatorname{argmin}} L_{\rho}\left(x, y^{k}\right) \\ y^{k+1} &:=y^{k}+\rho\left(A x^{k+1}-b\right) \end{aligned} xk+1yk+1:=xargminLρ(x,yk):=yk+ρ(Axk+1−b) 注意到,这几乎和对偶上升的步骤完全一致。 但除了目标函数的改变之外(增加了惩罚项), 另一个变化是步长默认为是惩罚参数 ρ \rho ρ。 这样的选取是有其道理的,具体可以参见boyd的书, 是从收敛性的角度进行了考虑。 总之, 增广拉格朗日乘数法改善了收敛性能, 但同时由于增加了这一项, 因此无法拆分为多个 x i x_i xi进行分布式并行求解。
ADMM算法结合了对偶上升法的 可拆解性 和 增广拉格朗日乘数法的 易收敛性, ADMM算法呼之欲出。 我们将优化变量拆分为独立的两部分, x x x 和 z z z, 那么问题可以改写为: minimize f ( x ) + g ( z ) subject to A x + B z = c \begin{array}{ll} \operatorname{minimize} & f(x)+g(z) \\ \text { subject to } & A x+B z=c \end{array} minimize subject to f(x)+g(z)Ax+Bz=c 这里 f f f 和 g g g 都是凸函数。 此时, 其对应的增广拉格朗日函数为: L ρ ( x , z , y ) = f ( x ) + g ( z ) + y T ( A x + B z − c ) + ( ρ / 2 ) ∥ A x + B z − c ∥ 2 2 L_{\rho}(x, z, y)=f(x)+g(z)+y^{T}(A x+B z-c)+(\rho / 2)\|A x+B z-c\|_{2}^{2} Lρ(x,z,y)=f(x)+g(z)+yT(Ax+Bz−c)+(ρ/2)∥Ax+Bz−c∥22 而其优化步骤为: x k + 1 : = argmin x L ρ ( x , z k , y k ) z k + 1 : = argmin L ρ ( x k + 1 , z , y k ) y k + 1 : = y k + ρ ( A x k + 1 + B z k + 1 − c ) \begin{aligned} x^{k+1}:=& \underset{x}{\operatorname{argmin}} L_{\rho}\left(x, z^{k}, y^{k}\right) \\ z^{k+1}:=& \operatorname{argmin} L_{\rho}\left(x^{k+1}, z, y^{k}\right) \\ y^{k+1}:=& y^{k}+\rho\left(A x^{k+1}+B z^{k+1}-c\right) \end{aligned} xk+1:=zk+1:=yk+1:=xargminLρ(x,zk,yk)argminLρ(xk+1,z,yk)yk+ρ(Axk+1+Bzk+1−c) 可以清晰的看到, 这正是对偶上升法与增广拉格朗日乘数法的结合体。 理论上可以进一步把优化变量拆分为更多的block, 如 x x x, z z z, z 1 z_1 z1, ⋯ \cdots ⋯。 如果我们将原问题的最优解表示为: p ⋆ = inf { f ( x ) + g ( z ) ∣ A x + B z = c } p^{\star}=\inf \{f(x)+g(z) \mid A x+B z=c\} p⋆=inf{f(x)+g(z)∣Ax+Bz=c} 那么ADMM算法在满足很基本的假设的情况下, 可以确保: f ( x k ) + g ( z k ) → p ⋆ as k → ∞ f\left(x^{k}\right)+g\left(z^{k}\right) \rightarrow p^{\star} \text { as } k \rightarrow \infty f(xk)+g(zk)→p⋆ as k→∞ 这也体现了算法的收敛性,即最终得到全局最优解。 这在boyd的著作中给出了详尽的证明。
ADMM算法的Scaled FormADMM算法还有另一种常见形式。 如果我们令 r = A x + B z − c r=A x+B z-c r=Ax+Bz−c 来代表当前值与实际约束间的残差, 那么我们有: y T r + ( ρ / 2 ) ∥ r ∥ 2 2 = ( ρ / 2 ) ∥ r + ( 1 / ρ ) y ∥ 2 2 − ( 1 / 2 ρ ) ∥ y ∥ 2 2 = ( ρ / 2 ) ∥ r + u ∥ 2 2 − ( ρ / 2 ) ∥ u ∥ 2 2 \begin{aligned} y^{T} r+(\rho / 2)\|r\|_{2}^{2} &=(\rho / 2)\|r+(1 / \rho) y\|_{2}^{2}-(1 / 2 \rho)\|y\|_{2}^{2} \\ &=(\rho / 2)\|r+u\|_{2}^{2}-(\rho / 2)\|u\|_{2}^{2} \end{aligned} yTr+(ρ/2)∥r∥22=(ρ/2)∥r+(1/ρ)y∥22−(1/2ρ)∥y∥22=(ρ/2)∥r+u∥22−(ρ/2)∥u∥22 其中, u = ( 1 / ρ ) y u=(1 / \rho) y u=(1/ρ)y 代表被 scaled 后的 对偶变量, 这也是 所谓 scaled form的由来。 由此, ADMM步骤可以被简化写为:
x k + 1 : = argmin x ( f ( x ) + ( ρ / 2 ) ∥ A x + B z k − c + u k ∥ 2 2 ) z k + 1 : = argmin z ( g ( z ) + ( ρ / 2 ) ∥ A x k + 1 + B z − c + u k ∥ 2 2 ) u k + 1 : = u k + A x k + 1 + B z k + 1 − c . \begin{aligned} x^{k+1} &:=\underset{x}{\operatorname{argmin}}\left(f(x)+(\rho / 2)\left\|A x+B z^{k}-c+u^{k}\right\|_{2}^{2}\right) \\ z^{k+1} &:=\underset{z}{\operatorname{argmin}}\left(g(z)+(\rho / 2)\left\|A x^{k+1}+B z-c+u^{k}\right\|_{2}^{2}\right) \\ u^{k+1} &:=u^{k}+A x^{k+1}+B z^{k+1}-c . \end{aligned} xk+1zk+1uk+1:=xargmin(f(x)+(ρ/2)∥∥Ax+Bzk−c+uk∥∥22):=zargmin(g(z)+(ρ/2)∥∥Axk+1+Bz−c+uk∥∥22):=uk+Axk+1+Bzk+1−c. 可以看到一次项已经被写进 ∥ ∥ 2 \|\|^2 ∥∥2中了。
ADMM算法的收敛性