ADMM(Alternating Direction Method of Multipliers,多项式交替方向乘子法)是一种用于求解凸优化问题的迭代算法。该算法是由Gabriel Peyré, Neal Parikh和Mathieu Chanaux等人在2010年左右提出的,是一种分布式算法,适用于大规模数据和分布式计算环境。
ADMM的目标是求解以下形式的凸优化问题:
其中,\(x\)和\(z\)是待求解的变量,\(f(x)\)和\(g(z)\)是凸函数,\(A,B\)和\(c\)是常数矩阵。
ADMM的基本思想是将原问题转化为一系列子问题,每个子问题都是容易求解的。具体地,ADMM将原问题拆分为以下三个子问题:
优化\(x\),固定\(z\)和\(\lambda\):
其中,\(\lambda\)是拉格朗日乘子,\(\rho\)是一个正的惩罚参数。
优化\(z\),固定\(x\)和\(\lambda\):
更新拉格朗日乘子\(\lambda\):
其中,\(\rho\)是ADMM算法的一个参数,也称为步长。
以上三个子问题可以通过交替迭代的方式求解,具体地,ADMM的迭代过程如下:
初始化\(x^0,z^0,\lambda^0\)。
重复执行以下步骤直至收敛:
通过固定\(z\)和\(\lambda\),使用优化算法求解\(x\),更新\(x\)。
通过固定\(x\)和\(\lambda\),使用优化算法求解\(z\),更新\(z\)。
更新拉格朗日乘子\(\lambda\)。
其中,优化算法可以选择不同的方法,如梯度下降、牛顿法、共轭梯度等。
ADMM的优点在于可以将大规模优化问题分解为多个小规模子问题,并可以分布式地求解这些子问题。此外,ADMM的收敛性和收敛速度都得到了严格的证明,具有一定的理论保证。