ADMM原理及应用

1. ADMM原理

1.1. 数学形式

我们要解的优化问题长这样:
min ⁡ x ∈ R n ,    z ∈ R m f ( x ) + g ( z ) subject to A x + B z = c . \min_{x \in \mathbf{R}^n,\; z \in \mathbf{R}^m} \quad f(x) + g(z) \quad\text{subject to}\quad A x + B z = c. xRn,zRmminf(x)+g(z)subject toAx+Bz=c.
这意味着我们想同时让 f ( x ) f(x) f(x) g ( z ) g(z) g(z)尽可能小,但它们又要满足一个线性约束 A x + B z = c A x + B z = c Ax+Bz=c

  • x x x z z z分别是不同的变量,
  • f f f g g g都是凸函数(这保证了算法更容易收敛),
  • A A A B B B 是已知的矩阵,
  • c c c 是已知的常量。

为什么要分成 x x x z z z 两组变量?通常是因为 f f f g g g 可能各自有特殊结构,例如一个是稀疏正则项( L 1 L_1 L1 范数),另一个可能是平方和之类的简单函数。要是把它们混在一起难以统一求解,就可以“拆开”来做。

1.2. 传统“乘子法”和它的不足

在最经典的拉格朗日乘子法里,我们会先把约束放进一个“增强过”的目标函数里,称为“增广拉格朗日函数”(augmented Lagrangian),它一般长这样:
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(Ax + Bz - c) + \frac{\rho}{2}\|Ax + Bz - c\|_2^2, Lρ(x,z,y)=f(x)+g(z)+yT(Ax+Bzc)+2ρAx+Bzc22,
其中 y y y 是所谓的“对偶变量”或者“拉格朗日乘子”, ρ > 0 \rho>0 ρ>0 是个参数(它决定惩罚力度)。

传统乘子法里,每次迭代要同时对 x x x z z z 都做一个“联合最小化”(joint minimization):
( x k + 1 , z k + 1 ) = arg ⁡ min ⁡ x , z    L ρ ( x , z ,   y k ) , (x^{k+1}, z^{k+1}) = \arg\min_{x,z} \; L_\rho(x, z,\, y^k), (xk+1,zk+1)=argx,zminLρ(x,z,yk),
然后再更新对偶变量
y k + 1 = y k + ρ ( A x k + 1 + B z k + 1 − c ) . y^{k+1} = y^k + \rho\bigl(Ax^{k+1} + Bz^{k+1} - c\bigr). yk+1=yk+ρ(Axk+1+Bzk+1c).
这样做当然可以,但如果 f f f g g g的形式比较复杂,或者维度较大,那这个“联合最小化”就不好算(可能很耗时,或者甚至求不出来)。

1.3. ADMM 的核心思想:分步做

ADMM(Alternating Direction Method of Multipliers,“交替方向乘子法”)最主要的特色就是不再让 x x x z z z 同时做大的联合求解,而是“先算 x x x,再算 z z z”的交替方式。它的三步更新如下:

  1. x x x-更新:固定住旧的 z k z^k zk y k y^k yk,只对 x x x​ 做一个最优更新:
    x k + 1 = arg ⁡ min ⁡ x    L ρ ( x ,    z k ,    y k ) . x^{k+1} = \arg\min_x \; L_\rho(x,\; z^k,\; y^k). xk+1=argxminLρ(x,zk,yk).
    由于 z k 、 y k z^k、y^k zkyk 不变,这一步就是在一个比较“简化了”的函数里找最优 x x x

  2. z z z-更新:拿到更新后的 x k + 1 x^{k+1} xk+1,再固定它和 y k y^k yk,对 z z z​ 做最优更新:
    z k + 1 = arg ⁡ min ⁡ z    L ρ ( x k + 1 ,    z ,    y k ) . z^{k+1} = \arg\min_z \; L_\rho\bigl(x^{k+1},\; z,\; y^k\bigr). zk+1=argzminLρ(xk+1,z,yk).

  3. 对偶变量 y y y 更新:有了新的 x k + 1 x^{k+1} xk+1 z k + 1 z^{k+1} zk+1,再更新对偶变量 y y y​:
    y k + 1 = y k + ρ ( A x k + 1 + B z k + 1 − c ) . y^{k+1} = y^k + \rho\bigl(Ax^{k+1} + Bz^{k+1} - c\bigr). yk+1=yk+ρ(Axk+1+Bzk+1c).

这样一来,每一步都只是对一个变量做最小化,问题规模往往更小,如果 f ( x ) f(x) f(x) g ( z ) g(z) g(z) 还是那种可以分开处理的“友好”函数,求解起来也更容易、更快。

1.4. Scaled Form of ADMM

Scaled Form 里,我们把对偶变量 换一种等价的表示。为了方便,我们先定义一个所谓的残差(residual):
r = A x + B z − c . r = Ax + Bz - c. r=Ax+Bzc.
同时,定义“缩放后的对偶变量”(scaled dual variable) u u u​:
u = 1 ρ y . u = \frac{1}{\rho}y. u=ρ1y.
这样,原先的项 y T r + ρ 2 ∥ r ∥ 2 y^T r + \frac{\rho}{2}\|r\|^2 yTr+2ρr2可以用 u u u​ 来重写成
( ρ / 2 ) ∥   r + u   ∥ 2 2 ⏟ 重新打包    −    ( ρ / 2 ) ∥ u ∥ 2 2 ⏟ 校正 . \underbrace{(\rho/2)\|\,r + u\,\|^2_2}_\text{重新打包} \;-\; \underbrace{(\rho/2)\|u\|^2_2}_\text{校正}. 重新打包 (ρ/2)r+u22校正 (ρ/2)u22.
这个结论的得来类似于高中学到的凑平方项。

“用 u = 1 ρ y u = \tfrac{1}{\rho}y u=ρ1y 替换后,线性和二次项可以组合到一个“ ρ 2 ∥ r + u ∥ 2 \frac{\rho}{2}\|r + u\|^2 2ρr+u2”形式里,看起来更整洁。”

在这个新的记号下,ADMM 的迭代过程可以写成(省去常数项):

  1. x x x-更新
    x k + 1 = arg ⁡ min ⁡ x ( f ( x )    +    ρ 2   ∥    A x    +    B z k    −    c    +    u k ∥ 2 2 ) . x^{k+1} = \arg\min_x \Bigl(f(x) \;+\; \frac{\rho}{2}\,\bigl\|\;Ax \;+\; Bz^k \;-\; c \;+\; u^k\bigr\|_2^2\Bigr). xk+1=argxmin(f(x)+2ρ Ax+Bzkc+uk 22).

  2. z z z-更新
    z k + 1 = arg ⁡ min ⁡ z ( g ( z )    +    ρ 2   ∥    A x k + 1    +    B z    −    c    +    u k ∥ 2 2 ) . z^{k+1} = \arg\min_z \Bigl(g(z) \;+\; \frac{\rho}{2}\,\bigl\|\;A x^{k+1} \;+\; Bz \;-\; c \;+\; u^k\bigr\|_2^2\Bigr). zk+1=argzmin(g(z)+2ρ Axk+1+Bzc+uk 22).

  3. u u u-更新
    u k + 1 = u k    +    ( A x k + 1 + B z k + 1 − c ) . u^{k+1} = u^k \;+\; \bigl(Ax^{k+1} + Bz^{k+1} - c\bigr). uk+1=uk+(Axk+1+Bzk+1c).

你会发现,现在对偶更新变得很简单,直接是对旧的 u u u 加上“残差” r = A x + B z − c r = Ax + Bz - c r=Ax+Bzc​。而在 unscaled form 里则是
y k + 1 = y k + ρ   r k . ⟺ u k + 1 = u k + r k , 因为  u = 1 ρ y . y^{k+1} = y^k + \rho\,r^k. \quad\Longleftrightarrow\quad u^{k+1} = u^k + r^k, \quad\text{因为 }u=\tfrac{1}{\rho}y. yk+1=yk+ρrk.uk+1=uk+rk,因为 u=ρ1y.
也就是说,两个形式做的事情完全一样,只是在对偶变量上做一个因子 1 ρ \tfrac{1}{\rho} ρ1 的缩放。

1.5. 迭代过程中主要检查的两大残差

两个残差(residual):

  1. 主(primal)残差
    r k + 1    =    A   x k + 1    +    B   z k + 1    −    c . r^{k+1} \;=\; A\,x^{k+1} \;+\; B\,z^{k+1} \;-\; c. rk+1=Axk+1+Bzk+1c.
    这是用来度量“原约束   A x + B z = c A x + B z = c Ax+Bz=c”在迭代第 k + 1 k+1 k+1 步时的偏差。若 r k + 1 r^{k+1} rk+1 越接近 0,说明越接近可行。

  2. 对偶(dual)残差
    s k + 1    =    ρ   A T   B   ( z k + 1 − z k ) . s^{k+1} \;=\; \rho\,A^T\,B\,(z^{k+1} - z^k). sk+1=ρATB(zk+1zk).
    这是用来度量对偶可行性。若 s k + 1 s^{k+1} sk+1 越接近 0,说明越接近对偶可行。

在 ADMM 中,你会看到在每次迭代完 x k + 1 , z k + 1 x^{k+1}, z^{k+1} xk+1,zk+1​ 后,会“顺手”计算这两个残差,用来判断收敛程度。

1.6. 怎么设置停止准则(Stopping Criteria)?

一个常见且实用的做法就是直接对主残差和对偶残差设置阈值
∥ r k ∥ 2    ≤    ε pri and ∥ s k ∥ 2    ≤    ε dual , \|r^k\|_2 \;\le\; \varepsilon_{\text{pri}} \quad\text{and}\quad \|s^k\|_2 \;\le\; \varepsilon_{\text{dual}}, rk2εpriandsk2εdual,

  • ε pri > 0 \varepsilon_{\text{pri}} > 0 εpri>0(主可行性余量)
  • ε dual > 0 \varepsilon_{\text{dual}} > 0 εdual>0(对偶可行性余量)

只要这两个残差都小于各自阈值,就认定收敛

但是,上述设置也会存在如下问题:

  • 如果问题中 ∥ c ∥ \|c\| c ∥ A x k ∥ \|A x^k\| Axk ∥ B z k ∥ \|B z^k\| Bzk 值很大,仅仅用一个小绝对值判断误差会显得“吹毛求疵”,或者数值上不稳定;
  • 如果问题中变量本身特别小,仅用相对误差也可能不够;

所以可以采用下面一个典型设置
ε pri = p   ε abs    +    ε rel   max ⁡   {   ∥ A x k ∥ 2 ,    ∥ B z k ∥ 2 ,    ∥ c ∥ 2 } , ε dual = n   ε abs    +    ε rel   ∥ A T y k ∥ 2 , \varepsilon_{\text{pri}} =\sqrt{p}\,\varepsilon_{\text{abs}} \;+\; \varepsilon_{\text{rel}}\, \max\,\{\,\|A x^k\|_2,\;\|B z^k\|_2,\;\|c\|_2\},\\ \varepsilon_{\text{dual}} =\sqrt{n}\,\varepsilon_{\text{abs}} \;+\; \varepsilon_{\text{rel}}\, \|A^T y^k\|_2, εpri=p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xy_optics

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值