ADMM:交替方向乘子算法

原文链接:http://blog.csdn.net/shanglianlm/article/details/45919679

ADMM(Alternating Direction Method of Multipliers) 
如下文所述,ADMM是一个旨在将对偶上升法的可分解性和乘子法的上界收敛属性融合在一起的算法。 
2.1 具体描述 
设有如下优化问题: 

min f(x)+g(z)  s.t.  Ax+Bz=c        (14)

如同乘子法中一样,我们获得它的增广拉格朗日形式为: 
Lρ(x,z,λ)=f(x)+g(z)+yT(Ax+Bzc)+(ρ/2)||Ax+Bzc||22        (15)

那么它的迭代方式为: 
xk+1=argminxLρ(x,zk,λk)        (16)
zk+1=argminzLρ(xk+1,z,λk)        (17)
λk+1=λk+ρ(Axk+1+Bzk+1c)        (18)

其中增广拉格朗日参数 ρ>0

2.2 优化条件和停止准则 
原始残差: rk+1=Axk+1+Bzk+1c<ϵprimal  
对偶残差: sk+1=ρATB(zk+1zk)<ϵdual

2.3 收敛速度

  • 收敛到一个高的精度要求很多次迭代;
  • 但几十次迭代就可以达到一个合理的精度(类似于共轭梯度法(conjugate gradient method));
  • 可以和其他算法组合来产生一个高的精度。

  1. 对偶上升法(Dual Ascent) 和 对偶分解法(Dual Decomposition) 
    在介绍ADMM之前我们首先介绍两种优化算法:对偶上升法(Dual Ascent) 和 对偶分解法(Dual Decomposition)。 
    1.1 对偶上升法(Dual Ascent) 
    设有如下优化问题: 

    minf(x)   s.t.    Ax=b         (1)

    它的拉格朗日形式为: 
    L(x,λ)=f(x)+λT(Axb)        (2)

    对偶形式为: 
    g(λ)=infxL(x,λ)=f(ATλ)bTλ        (3)

    其中 f^* 是 f 的共轭函数。 
    对偶问题为: 
    max g(λ)       (4)

    对偶上升法的迭代更新为: 

    xk+1=argminxL(x,λk)             (5)    x-
    λk+1=λk+αk(Axk+1b)                (6)     

    其中 αk>0 是步长。

    1.2 对偶分解法(Dual Decomposition) 
    假设目标函数是可以分解的,即 

    f(x)=i=1Nfi(xi)        (7)

    因此,拉格朗日函数可以改写为: 
    L(x,λ)=i=1NLi(xi,λ)=i=1N(fi(xi)+λTAixi(1/N)λTb)        (8)

    所以它的迭代更新为: 
    xk+1i=argminxiLi(xi,λk)        (9)
    λk+1=λk+αk(Axk+1b)        (10)

  2. 增广拉格朗日(Augmented Lagrangians)和乘子法(Method of Multipliers) 
    接着我们引入增广拉格朗日(Augmented Lagrangians)和乘子法(Method of Multipliers)。 
    2.1 增广拉格朗日(Augmented Lagrangians)形式 
    为了增加对偶上升法的鲁棒性和放松函数f的强凸约束,我们引入增广拉格朗日(Augmented Lagrangians)形式: 

    Lρ(x,λ)=f(x)+λT(Axb)+(ρ/2)||Axb||22        (11)

    其中惩罚因子 ρ>0 。 
    与 (2) 式相比,(11) 式只是增加了一个惩罚项, 
    2.2 乘子法(Method of Multipliers) 
    对应于的迭代公式为: 
    xk+1=argminxLρ(x,λk)        (12)
    λk+1=λk+ρ(Axk+1b)        (13)

    我们称之为乘子法(Method of Multipliers)。

    将拉格朗日应用于对偶上升法可以极大地增加它的收敛属性,但是它要求一些代价。当f可以分解,而拉格朗日 Lρ 不能分解的,因此 (13) 式不能对每个 xi 并行最小化。这意味着乘子法不能被用来分解。

参考或延伸材料: 
[1] Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers  
[2]  凸优化讲义  
[3]  A Note on the Alternating Direction Method of Multipliers


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交替方向乘子方法(Alternating Direction Method of Multipliers, ADMM)是一种用于解决约束优化问题的迭代算法,可以用于求解线性和非线性的凸优化问题。其基本思想是将原问题分解为若干个子问题,并通过引入拉格朗日乘子来将其联合起来求解。 下面给出使用MATLAB实现ADMM的示例代码: ``` function [x, y] = admm(A, b, rho, alpha, max_iter, tol) % A: 系数矩阵 % b: 右侧常数向量 % rho: ADMM参数 % alpha: 权重系数 % max_iter: 最大迭代次数 % tol: 误差阈值 [m, n] = size(A); x = zeros(n, 1); y = zeros(m, 1); z = zeros(n, 1); u = zeros(m, 1); AtA = A' * A; Atb = A' * b; for k = 1:max_iter % 更新x x = (rho * eye(n) + AtA) \ (rho * z - Atb + A' * (y - u)); % 更新y y = alpha * max(0, A * x + u - b - alpha/ rho) + (1 - alpha) * min(0, A * x + u - b + alpha / rho); % 更新z z = x + u / rho; % 更新u u = u + rho * (A * x - y + b); % 判断是否满足收敛条件 r = A * x - y; s = rho * (z - z_old); eps_pri = sqrt(n) * tol + tol * max(norm(A * x), norm(y)); eps_dual = sqrt(n) * tol + tol * norm(rho * u); if max(norm(r), norm(s)) < eps_pri && norm(rho * A' * u) < eps_dual break; end z_old = z; end end ``` 其,x和y是ADMM算法的主要变量,分别对应原始问题的决策变量和拉格朗日乘子。z是辅助变量,u是更新步长。在实现,我们采用了一个非负惩罚函数来实现对y的非负约束。最后的收敛条件是通过判断残差r和s是否达到一定阈值来实现的。 关于ADMM的收敛特性,一般来说,它可以保证在满足一些条件的情况下收敛到原问题的最优解。具体而言,需要保证原问题是凸的、有界的、闭合的,且罚函数的参数rho足够大。此外,还需要保证原问题的约束条件是仿射的,即可以表示为线性等式或不等式的形式。当满足这些条件时,ADMM算法可以保证收敛到原问题的最优解,并且收敛速度通常比其他优化算法更快。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值