ADMM

背景知识

对偶上升

等式约束优化问题:
在这里插入图片描述
f f f是凸函数,2.1的拉格朗日项为:
在这里插入图片描述
其对偶函数为:
在这里插入图片描述
inf代表下确界,之所以用下确界而不是用min,可能是因为有些函数没有极值(定义域取不到),但有一个下确界。
y是拉格朗日乘子项的对偶变量
则原问题的对偶问题变为:
在这里插入图片描述
在强凸性质下,原问题和对偶问题的最优解是一样的。
我们可以从对偶的最优点 y ∗ y^* y恢复出原优化问题的最优点 x ∗ x^* x
在这里插入图片描述
利用梯度上升法:
在这里插入图片描述
上述条件很严苛,

  • f ( x ) f(x) f(x)要求严格凸,并且 α \alpha α选择要比较合适,一般应用中都不会满足。因此对偶上升不会直接应用。

对偶分解:

尽管对偶上升的条件很严苛,但是它有时写成并行算法,当目标函数 f f f是可分离的时候:
在这里插入图片描述
x = ( x 1 , x 2 , . . . . , x N ) x=(x_1,x_2,....,x_N) x=(x1,x2,....,xN)并且矩阵A可以分解为 A = [ A 1 , . . . A N ] A=[A_1,...A_N] A=[A1,...AN]
A x = ∑ i = 1 N A i x i Ax=\sum_{i=1}^{N}A_ix_i Ax=i=1NAixi
故拉格朗日项可以写成:
在这里插入图片描述
因此迭代优化的时候, m i n x min_x minx可以拆成多个问题的并行优化,对偶变量更新不变这对于参数特别多的特别有用。
在这里插入图片描述

增广拉格朗日和乘子法

增广拉格朗日方法 是在罚函数的基础上增加了拉格朗日乘子项,故称为增广拉格朗日函数。
其放松了 f ( x ) f(x) f(x)严格凸的假设和一些其它条件,同时使得算法更加稳健。2.1的问题变为:
在这里插入图片描述
等价于
在这里插入图片描述
惩罚项的好处是使得对偶函数
在这里插入图片描述
在更一般的条件下可导:
增广拉格朗日相比于对偶上升多了一个平方项,但这个平方项无法分离,使得不能利用对偶上升的分块思想并行优化。所以针对此的改进,ADMM算法诞生了。

ADMM

为了整合对偶上升的可分解性和增广拉格朗日法(也叫乘子罚函数法)优秀的收敛性质,ADMM(Alternating Direction of Method of Multipliers)结合了两者的优点,
最开始(2.1)的优化问题可以写为:
在这里插入图片描述
于是:在这里插入图片描述
对偶分解的时候 x = ( x 1 , x 2 , . . . . , x N ) x=(x_1,x_2,....,x_N) x=(x1,x2,....,xN),在二次项里面不能被写成分块的形式,但在这里x被分成了x和z,天生分块,并且z作为一个独立变量不需要融合进x,保证了过程的可分解性。
于是:
在这里插入图片描述
ADMM算法包括了除x以外的 ( z k + 1 , y k + 1 ) (z^{k+1},y^{k+1}) (zk+1,yk+1),它是 ( z k , y k ) (z^{k},y^{k}) (zk,yk)的函数,x并不在其中。

scaled Form—简化ADMM

令残差 r = A x + B z − c , u = ( 1 / ρ ) ∗ y r=Ax+Bz-c,u=(1/\rho) *y r=Ax+Bzc,u=(1/ρ)y,增广拉格朗日项的线性项和二次项可以写成:
在这里插入图片描述
于是简化后的ADMM:常数项可以忽略
在这里插入图片描述
每次迭代时残差 r k = A x k + B z k − c r^{k}=Ax^{k}+Bz^{k}-c rk=Axk+Bzkc,故
在这里插入图片描述

ADMM的具体应用

约束凸优化问题

一般受约束的凸优化问题可以写成如下形式:
在这里插入图片描述
f f f为凸函数, C C C为凸集
增加分离变量,写成ADMM形式:
在这里插入图片描述
g g g是z的指示函数,即在 x ∈ C x\in C xC时有值;
其增广拉格朗日为:
在这里插入图片描述
ADMM的缩放形式:
在这里插入图片描述
这里的z的形式可以通过求导取极值点得到。

一般的l1损失函数

更为一般的优化模型:
在这里插入图片描述
l l l为凸损失函数
写成ADMM可以使用的形式:
在这里插入图片描述
其中, g ( z ) = λ ∣ ∣ z ∣ ∣ 1 g(z)=\lambda ||z||_1 g(z)=λz1
在这里插入图片描述
x − u p d a t e x-update xupdate是proximal operator evaluation,如果 l l l是平滑的,则可以用牛顿法、拟牛顿法(quasi Newton method)、共轭梯度法来解决,如果 l l l是二次项,x-min 能够直接解线性方程组。

Lasso

L1正则线性回归也叫Lasso, l ( x ) = ( 1 / 2 ) ∣ ∣ A x − b ∣ ∣ 2 2 l(x)=(1/2)||Ax-b||_2^2 l(x)=(1/2)Axb22
这里的l就是二次项,我们尝试着解解方程
在这里插入图片描述
ADMM形式:
在这里插入图片描述
f ( x ) = ( 1 / 2 ) ∣ ∣ A x − b ∣ ∣ 2 2 f(x)=(1/2)||Ax-b||_2^2 f(x)=(1/2)Axb22 g ( z ) = λ ∣ ∣ z ∣ ∣ 1 g(z)=\lambda ||z||_1 g(z)=λz1
根据上面的scaled-form形式,可以推出:
x k + 1 = a r g m i n x ( 1 / 2 ) ∣ ∣ A x − b ∣ ∣ 2 2 + ρ 2 ∣ ∣ x − z ( k ) + u ( k ) ∣ ∣ 2 2 z ( k + 1 ) = a r g m i n z λ ∣ ∣ z ∣ ∣ 1 + ρ 2 ∣ ∣ x k − z + u ( k ) ∣ ∣ 2 2 u ( k = 1 ) = u ( k ) + x k − z ( k ) x^{k+1}=argmin_x (1/2)||Ax-b||_2^2+\frac{\rho}{2}||x-z^{(k)}+u^{(k)}||_2^2 \\ z^{(k+1)}=argmin_z\lambda ||z||_1+\frac{\rho}{2}||x^{k}-z+u^{(k)}||_2^2\\ u^{(k=1)}=u^{(k)}+x^{k}-z^{(k)} xk+1=argminx(1/2)Axb22+2ρxz(k)+u(k)22z(k+1)=argminzλz1+2ρxkz+u(k)22u(k=1)=u(k)+xkz(k)
对x的更新求导取零:
A T ( A x − b ) + ρ ( x − z k + u k ) = 0 ( A T A + ρ I ) x − ( A T b + ρ ( z k − u k ) ) = 0 x k + 1 = ( A T A + ρ I ) − 1 ( A T b + ρ ( z k − u k ) ) A^T(Ax-b)+\rho (x-z^{k}+u^{k})=0 \\ (A^TA+\rho I)x-(A^Tb+\rho (z^{k}-u^{k}))=0\\ x^{k+1} =(A^TA+\rho I)^-1(A^Tb+\rho (z^{k}-u^{k})) AT(Axb)+ρ(xzk+uk)=0(ATA+ρI)x(ATb+ρ(zkuk))=0xk+1=(ATA+ρI)1(ATb+ρ(zkuk))
z z z的更新用上面的subgradient引入的soft thresholding:
在这里插入图片描述
注意 A T A + ρ I A^TA+\rho I ATA+ρI总是可逆的,since ρ > 0 \rho >0 ρ>0.
这里的矩阵可以可以作一些分解使得迭代收敛更快,详情见[4]。

x-update exploit

在x变量更新时,里面的 f , g , A , B f,g,A,B f,g,A,B涉及到矩阵的运算,涉及到大量的数据时,迭代的速度会变得缓慢,因此,对x-update的开发求解很重要。
简化x-update的分析:
在这里插入图片描述
尽管z是一个变量,但在x迭代中是一个常量,因此 v = − B z + c − u v= -Bz+c-u v=Bz+cu当作一个常量即可。

Proximity Operator 近端(临近)算子

再次简化 A = I A=I A=I
在这里插入图片描述
作为 v v v的函数,右边的项也被定义为 p r o x f , ρ ( v ) prox_{f,\rho}(v) proxf,ρ(v),被称为带惩罚项 ρ \rho ρ的f的近端算子。
在变分分析中,以f的Moreau envelope or Moreau-Yosida regularization的而出名。并且与the proximal point algorithm有关系
在这里插入图片描述
近端算子里的x-min也被称为近端优化。

尽管这不会对我们的ADMM加快效率,但是当f足够简单时,我们可以更方便的分析x-update,比如f是一个闭合非空凸集C的指示函数:
在这里插入图片描述
f的近端算子就退化为一个C上的欧几里得距离:
在这里插入图片描述
因此,近端运算符可以被视为广义投影。f的近端算子也可以被解释为f的一种梯度。
(就像上面的约束凸优化问题一样)
在这里插入图片描述

从这个式子可以理解,式在寻找一个距离v点不要太远的x点,然后使得 f ( x ) f(x) f(x)最小。
在这里插入图片描述

为什么要使用近端算子

如果目标函数式处处可微的,那么直接用梯度下降法即可,但更多的情况时f不可微的,通常这种情况下使用次梯度来优化,但是次梯度的缺点时求解慢和通常不会产生稀疏解。
近端算子则是在 f ( x ) f(x) f(x)分解为一个可微分的凸函数和不可微分的凸函数的条件下:
f ( x ) = g ( x ) + h ( x ) f(x) = g(x)+h(x) f(x)=g(x)+h(x)

Proximal Algorithm 自然肩负了要解决这两个问题的使命。
其中函数f可能是非光滑(即不可微)的。临近算子是对梯度的延伸,当函数f为光滑函数时,该临近算子就是梯度。

soft thresholding

soft thresholding就是1范数的近端算子;
在这里插入图片描述
在这里插入图片描述
S就是所谓的软阈值算子:就是上
在这里插入图片描述

特别感谢:

  1. 高涛—分布式计算、统计学习与ADMM算法
  2. Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers. Stephen Boyd. 2011
  3. 吴良超–最优化计算课程总结
  4. Fast Image Recovery Using Variable Splitting and Constrained Optimization. Manya V. Afonso. 2010
  5. Proximal Algorithm 入门 https://blog.youkuaiyun.com/luoleicn/article/details/52676378
  6. 近端梯度法(Proximal Gradient Method, PG) https://blog.youkuaiyun.com/qq547276542/article/details/78251779
  7. 近端梯度法(Proximal Gradient Descent https://blog.youkuaiyun.com/zbwgycm/article/details/83060251
03-08
<think>好的,我现在需要处理用户关于ADMM算法的询问。首先,用户要求了解ADMM算法的介绍及其应用,并且希望回答结构清晰,逐步解决问题,同时确保内容真实可靠。我需要结合用户提供的引用资料来构建回答,并生成相关问题。 首先,ADMM的全称是交替方向乘子法(Alternating Direction Method of Multipliers),结合了对偶上升法和乘子法的优点。根据引用[1],ADMM融合了对偶上升法的可分解性和乘子法的上界收敛属性。我需要先解释ADMM的基本原理,包括它的优化问题形式、迭代步骤以及特点。 接下来,应用部分需要分点说明,比如在分布式机器学习、稀疏优化、图像处理等领域的应用。引用[3]提到ADMM适用于分布式机器学习中的全局一致性优化问题,如Lasso问题,而引用[4]则涉及在配电网调度中的应用,特别是处理非凸问题的凸化方法。这些都需要整合到应用场景中。 然后,根据用户提供的示例,回答需要包含算法步骤的代码示例。不过用户提供的引用中有ADMM在Lasso问题和配电网调度中的应用代码,可能需要选择一个典型的例子,比如Lasso问题的ADMM实现,或者配电网调度的简化代码。但用户示例中的代码是Python,而引用[4]提到的是ADMM在配电网中的应用程序代码,但没有具体代码,可能需要用伪代码或数学表达式代替。 另外,用户要求生成相关问题,我需要根据ADMM的特点和应用领域提出相关问题,比如原理、与其他算法的比较、收敛性证明、实际应用案例等。 需要注意的地方包括:正确使用LaTeX格式,所有行内数学公式用$...$,独立公式用$$...$$,并正确引用提供的参考文献。同时,回答结构要清晰,分点阐述,并确保引用标识自然添加在段落末尾。 现在开始组织内容: 1. ADMM算法介绍:定义、优化问题形式、迭代步骤、特点(可分解性、收敛性)。 2. 应用领域:分布式机器学习(引用[3])、稀疏优化(引用[2])、图像处理、资源调度(引用[4])。 3. 算法步骤的示例,可能用Lasso问题作为例子,展示如何分解问题,应用ADMM步骤。 4. 相关问题生成,涉及原理、应用、优化、收敛性等。 需要确保每个引用只被引用一次,并且在正确的位置。例如,引用[1]用于ADMM的融合特点,引用[2]用于问题拆分,引用[3]用于分布式机器学习和Lasso,引用[4]用于配电网调度中的凸化处理。 现在检查是否有遗漏的信息,比如ADMM的优缺点,或者实际应用中的挑战,如处理非凸问题时的凸化方法(引用[4]提到的SOCP或SDP)。这些也需要在应用中提及。 最终,确保回答符合用户要求的格式,正确使用引用标识,并且语言流畅,结构清晰。</think>### ADMM算法介绍及应用 #### 1. ADMM算法简介 交替方向乘子法(Alternating Direction Method of Multipliers, ADMM)是一种结合**对偶上升法**的可分解性和**乘子法**的收敛性的优化算法[^1]。其核心思想是将复杂的优化问题分解为多个子问题,通过交替更新变量和对偶变量来求解。 **标准形式**: ADMM适用于如下形式的优化问题: $$ \min_{x,z} \ f(x) + g(z) \\ \text{s.t.} \ Ax + Bz = c $$ 其中,$f(x)$和$g(z)$是目标函数,$x$和$z$为待优化变量,约束条件为线性等式。 **迭代步骤**: 1. **变量$x$更新**:$x^{k+1} = \arg\min_x \left( f(x) + \frac{\rho}{2} \| Ax + Bz^k - c + \lambda^k/\rho \|^2 \right)$ 2. **变量$z$更新**:$z^{k+1} = \arg\min_z \left( g(z) + \frac{\rho}{2} \| Ax^{k+1} + Bz - c + \lambda^k/\rho \|^2 \right)$ 3. **对偶变量$\lambda$更新**:$\lambda^{k+1} = \lambda^k + \rho(Ax^{k+1} + Bz^{k+1} - c)$ **特点**: - **可分解性**:适用于分布式计算,各变量可并行更新[^3]。 - **收敛性**:在凸问题中能保证收敛到全局最优解。 --- #### 2. ADMM算法应用 ##### (1) 分布式机器学习 ADMM常用于**全局一致性优化问题**,例如多节点协同训练模型: $$ \min_{x_i,z} \sum_{i=1}^N f_i(x_i) + g(z) \quad \text{s.t.} \ x_i = z \ (i=1,\dots,N) $$ 其中,$f_i(x_i)$为各节点的局部目标函数,$z$为全局一致性变量,通过ADMM交替更新局部参数和全局变量实现分布式训练。 ##### (2) 稀疏优化(如Lasso问题) 对于Lasso回归问题$\min_x \|Ax - b\|_2^2 + \lambda \|x\|_1$,ADMM将其分解为两部分: 1. 处理二次损失项$\|Ax - b\|_2^2$的$x$更新; 2. 处理$\ell_1$正则项$\|z\|_1$的$z$更新,并添加约束$x=z$[^2]。 ##### (3) 资源调度与工程优化 在配电网调度中,ADMM可用于求解非凸优化问题。例如,通过**凸化技术**(如二阶锥规划SOCP)将非凸的DistFlow潮流方程转化为凸问题,再分布式求解各节点无功功率的最优分配[^4]。 --- #### 3. 算法实现示例(Lasso问题) ```python import numpy as np def admm_lasso(A, b, lambda_, rho=1.0, max_iter=100): n_features = A.shape[1] x = np.zeros(n_features) z = np.zeros(n_features) u = np.zeros(n_features) for _ in range(max_iter): # 更新x x = np.linalg.inv(A.T @ A + rho * np.eye(n_features)) @ (A.T @ b + rho * (z - u)) # 更新z(软阈值操作) z_prev = z z = np.sign(x + u) * np.maximum(np.abs(x + u) - lambda_ / rho, 0) # 更新对偶变量u u += x - z return z ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值