什么是ADMM算法?
ADMM算法,全称为交替方向乘子法(Alternating Direction Method of Multipliers),是一种用于解决优化问题的迭代算法,特别是那些可以分解为多个子问题的优化问题。ADMM结合了拉格朗日乘子法和分裂方法的特点,通过交替优化原问题的分裂子问题和更新乘子来逼近全局最优解。它在处理大规模和分布式优化问题时特别有效,广泛应用于机器学习、信号处理、统计学习、图像处理等领域。
ADMM算法的基本思想是将一个复杂的优化问题分解为几个更简单的子问题,这些子问题可以更容易或更高效地求解。通过交替求解这些子问题并更新对应的乘子,ADMM能够在保证收敛性的同时,高效地找到问题的解。
示例:线性回归问题
考虑一个线性回归问题,我们的目标是最小化以下目标函数:
min x 1 2 ∥ A x − b ∥ 2 2 + λ ∥ x ∥ 1 \min_x \frac{1}{2}\|Ax - b\|^2_2 + \lambda\|x\|_1 xmin21∥Ax−b∥22+λ∥x∥1
其中,(A)是一个给定的数据矩阵,(b)是观测向量,(\lambda)是正则化参数,(|x|_1)是(x)的L1范数,用于促进解的稀疏性。
问题重写
我们将原始问题重写为等价的约束优化问题:
min x , z 1 2 ∥ A x − b ∥ 2 2 + λ ∥ z ∥ 1 subject to x − z = 0 \min_{x,z} \frac{1}{2}\|Ax - b\|^2_2 + \lambda\|z\|_1 \quad \text{subject to} \quad x - z = 0 x,zmin21∥Ax−b∥22+λ∥z∥1subject tox−z=0
引入新的变量(z),并通过约束(x - z = 0)将原问题分解为两个子问题。
ADMM步骤
-
初始化:选择初始的 x 0 x^0 x0, z 0 z^0 z0和乘子 y 0 y^0 y0(通常初始化为0)。
-
迭代更新:在第(k+1)次迭代中,执行以下更新:
-
x 的更新:
x k + 1 = arg min x ( 1 2 ∥ A x − b ∥ 2 2 + ρ 2 ∥ x − z k + u k ∥ 2 2 ) x^{k+1} = \arg\min_x \left( \frac{1}{2}\|Ax - b\|^2_2 + \frac{\rho}{2}\|x - z^k + u^k\|^2_2 \right) xk+1=argxmin(21∥Ax−b∥22+2ρ∥x−zk+uk∥22)
其中, ( u k = y k / ρ ) (u^k = y^k / \rho ) (uk=yk/ρ), ρ \rho ρ是一个正的惩罚参数。 -
z 的更新:
z k + 1 = arg min z ( λ ∥ z ∥ 1 + ρ 2 ∥ x k + 1 − z + u k ∥ 2 2 ) z^{k+1} = \arg\min_z \left( \lambda\|z\|_1 + \frac{\rho}{2}\|x^{k+1} - z + u^k\|^2_2 \right) zk+1=argzmin(λ∥z∥1+2ρ∥xk+1−z+uk∥22)
这个子问题通常通过软阈值操作求解,促进(z)的稀疏性。 -
乘子 y 的更新:
y k + 1 = y k + ρ ( x k + 1 − z k + 1 ) y^{k+1} = y^k + \rho(x^{k+1} - z^{k+1}) yk+1=yk+ρ(xk+1−zk+1)
-
-
终止条件:当(x, z, y)的更新量小于一定阈值或达到最大迭代次数时停止迭代。
通过这种方式,ADMM算法能够有效地将原始的优化问题分解为易于求解的子问题,并交替更新变量和乘子,直到找到满足约束条件的最优解。