ADMM算法简介_RMA算法

ADMM算法简介_RMA算法前言这篇博客旨在介绍下最近在通信中经常用到的ADMM算法。算法的全称为AlternatingDirectionMethodofMultipliers,中文直译为:交替方向乘子法。本文的参考文献为Boyd的经典著作:DistributedOptimizationandStatisticalLearningviatheAlternatingDirectionMethodofMultipliers,事实上从名字就可以看出,正如Boyd在摘要中所提到的,AD

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

前言

这篇博客旨在介绍下最近在通信中经常用到的 ADMM 算法。 算法的全称为 Alternating Direction Method of Multipliers, 中文直译为: 交替方向乘子法。 本文的参考文献为 Boyd 的经典著作: Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers, 事实上从名字就可以看出, 正如Boyd在摘要中所提到的, ADMM算法的优势是可以将问题进行分布式优化,从而解决大规模计算问题。 然而在通信的应用中, 更多时候则是把一个多变量问题进行解耦,通过对每个单变量进行迭代求解来简化问题本身。

对偶上升法与增广拉格朗日乘数法

在介绍ADMM算法前, 我想先简要介绍下对偶上升法与增广拉格朗日乘数法, 两者可以视为ADMM算法的前身或简化版本, 而ADMM算法则又可视为两者的结合体。

对偶上升法

对偶上升法,在之前的博客中有更为详细的介绍, 对偶上升法 (Dual Ascent)。 这里我们只简述其核心。 对于一个等式约束的凸优化问题如下:
minimize ⁡ f ( x )  subject to  A x = b , \begin{array}{ll} \operatorname{minimize} & f(x) \\ \text { subject to } & A x=b, \end{array} minimize subject to f(x)Ax=b,
其中, f ( x ) f(x) f(x)为凸函数。我们可以通过拉格朗日乘子法将限制条件写入目标函数中, 从而得到:
L ( x , y ) = f ( x ) + y T ( A x − b ) L(x, y)=f(x)+y^{T}(A x-b) L(x,y)=f(x)+yT(Axb)

那么,其对偶函数为:
g ( y ) = inf ⁡ x L ( x , y ) g(y)=\inf _{x} L(x, y) g(y)=xinfL(x,y)
相应的对偶问题为:
 maximize  g ( y ) \text { maximize } g(y)  maximize g(y)
对偶上升法表示, 通过如下的步骤:
x k + 1 : = argmin ⁡ x L ( x , y k ) y k + 1 : = y k + α k ( A x k + 1 − b ) , \begin{aligned} &x^{k+1}:=\underset{x}{\operatorname{argmin}} L\left(x, y^{k}\right) \\ &y^{k+1}:=y^{k}+\alpha^{k}\left(A x^{k+1}-b\right), \end{aligned} xk+1:=xargminL(x,yk)yk+1:=yk+αk(Axk+1b),
等价于求解对偶问题。这里 α k \alpha_k αk 为步长。 而从步骤的形式上看, 就是简单的先固定 y y y 优化 x x x, 再固定 x x x 优化 y y y。 但是是可以保证收敛的。 可以看到, 对偶上升法的优点是可以将多变量解耦开来。 值得一提的是, 迎合ADMM类所期望的分布式优化的特点, 对偶上升法也可以通过将变量分解为多个维度较低的变量再进行并行求解, 此时优化步骤变为:
x i k + 1 : = argmin ⁡ x i L i ( x i , y k ) y k + 1 : = y k + α k ( A x k + 1 − b ) \begin{aligned} x_{i}^{k+1} &:=\underset{x_{i}}{\operatorname{argmin}} L_{i}\left(x_{i}, y^{k}\right) \\ y^{k+1} &:=y^{k}+\alpha^{k}\left(A x^{k+1}-b\right) \end{aligned} xik+1yk+1:=xiargminLi(xi,yk):=yk+αk(Axk+1b)
即将原高维变量 x x x 拆分成了多个 低维变量 x i x_i xi 进行依次优化。 在多个变量之间交替优化,迭代求解, 可以说是ADMM类算法贯彻的准则。

增广拉格朗日乘数法

增广拉格朗日乘数法可以看做是对偶上升法的进阶, 但也不完全是。 他将拉格朗日函数写为:
L ρ ( x , y ) = f ( x ) + y T ( A x − b ) + ( ρ / 2 ) ∥ A x − b ∥ 2 2 L_{\rho}(x, y)=f(x)+y^{T}(A x-b)+(\rho / 2)\|A x-b\|_{2}^{2} Lρ(x,y)=f(x)+yT(Axb)+(ρ/2)Axb22
可以看到, 相比于普通的拉格朗日函数(比如刚刚对偶上升法中所给出的), 他多了第三项,其中 ρ \rho ρ 为惩罚参数。 显然当 x x x 为最优值时, A x − b = 0 Ax-b=0 Axb=0, 因此这两个拉格朗日函数其实是相等的。 但是在迭代过程中, 有了这一项惩罚项后, 无论 f ( x ) f(x) f(x) 本身是否强凸, 由于增加了一个强凸惩罚项, 因此这个增广拉格朗日函数可视作 x x x的强凸函数, 从而对算法的收敛更有帮助。 增广拉格朗日乘数法的步骤为:
x k + 1 : = argmin ⁡ x L ρ ( x , y k ) y k + 1 : = y k + ρ ( A x k + 1 − b ) \begin{aligned} x^{k+1} &:=\underset{x}{\operatorname{argmin}} L_{\rho}\left(x, y^{k}\right) \\ y^{k+1} &:=y^{k}+\rho\left(A x^{k+1}-b\right) \end{aligned} xk+1yk+1:=xargminLρ(x,yk):=yk+ρ(Axk+1b)
注意到,这几乎和对偶上升的步骤完全一致。 但除了目标函数的改变之外(增加了惩罚项), 另一个变化是步长默认为是惩罚参数 ρ \rho ρ。 这样的选取是有其道理的,具体可以参见boyd的书, 是从收敛性的角度进行了考虑。 总之, 增广拉格朗日乘数法改善了收敛性能, 但同时由于增加了这一项, 因此无法拆分为多个 x i x_i xi进行分布式并行求解。

ADMM算法

结合了对偶上升法的 可拆解性 和 增广拉格朗日乘数法的 易收敛性, ADMM算法呼之欲出。 我们将优化变量拆分为独立的两部分, x x x z z z, 那么问题可以改写为:
minimize ⁡ f ( x ) + g ( z )  subject to  A x + B z = c \begin{array}{ll} \operatorname{minimize} & f(x)+g(z) \\ \text { subject to } & A x+B z=c \end{array} minimize subject to f(x)+g(z)Ax+Bz=c
这里 f f f g g g 都是凸函数。 此时, 其对应的增广拉格朗日函数为:
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}(A x+B z-c)+(\rho / 2)\|A x+B z-c\|_{2}^{2} Lρ(x,z,y)=f(x)+g(z)+yT(Ax+Bzc)+(ρ/2)Ax+Bzc22
而其优化步骤为:
x k + 1 : = argmin ⁡ x L ρ ( x , z k , y k ) z k + 1 : = argmin ⁡ L ρ ( x k + 1 , z , y k ) y k + 1 : = y k + ρ ( A x k + 1 + B z k + 1 − c ) \begin{aligned} x^{k+1}:=& \underset{x}{\operatorname{argmin}} L_{\rho}\left(x, z^{k}, y^{k}\right) \\ z^{k+1}:=& \operatorname{argmin} L_{\rho}\left(x^{k+1}, z, y^{k}\right) \\ y^{k+1}:=& y^{k}+\rho\left(A x^{k+1}+B z^{k+1}-c\right) \end{aligned} xk+1:=zk+1:=yk+1:=xargminLρ(x,zk,yk)argminLρ(xk+1,z,yk)yk+ρ(Axk+1+Bzk+1c)
可以清晰的看到, 这正是对偶上升法与增广拉格朗日乘数法的结合体。 理论上可以进一步把优化变量拆分为更多的block, 如 x x x, z z z, z 1 z_1 z1, ⋯ \cdots 。 如果我们将原问题的最优解表示为:
p ⋆ = inf ⁡ { f ( x ) + g ( z ) ∣ A x + B z = c } p^{\star}=\inf \{f(x)+g(z) \mid A x+B z=c\} p=inf{
f(x)+
g(z)Ax+Bz=c}

那么ADMM算法在满足很基本的假设的情况下, 可以确保
f ( x k ) + g ( z k ) → p ⋆  as  k → ∞ f\left(x^{k}\right)+g\left(z^{k}\right) \rightarrow p^{\star} \text { as } k \rightarrow \infty f(xk)+g(zk)p as k
这也体现了算法的收敛性,即最终得到全局最优解。 这在boyd的著作中给出了详尽的证明。

ADMM算法的Scaled Form

ADMM算法还有另一种常见形式。 如果我们令 r = A x + B z − c r=A x+B z-c r=Ax+Bzc 来代表当前值与实际约束间的残差, 那么我们有:
y T r + ( ρ / 2 ) ∥ r ∥ 2 2 = ( ρ / 2 ) ∥ r + ( 1 / ρ ) y ∥ 2 2 − ( 1 / 2 ρ ) ∥ y ∥ 2 2 = ( ρ / 2 ) ∥ r + u ∥ 2 2 − ( ρ / 2 ) ∥ u ∥ 2 2 \begin{aligned} y^{T} r+(\rho / 2)\|r\|_{2}^{2} &=(\rho / 2)\|r+(1 / \rho) y\|_{2}^{2}-(1 / 2 \rho)\|y\|_{2}^{2} \\ &=(\rho / 2)\|r+u\|_{2}^{2}-(\rho / 2)\|u\|_{2}^{2} \end{aligned} yTr+(ρ/2)r22=(ρ/2)r+(1/ρ)y22(1/2ρ)y22=(ρ/2)r+u22(ρ/2)u22
其中, u = ( 1 / ρ ) y u=(1 / \rho) y u=(1/ρ)y 代表被 scaled 后的 对偶变量, 这也是 所谓 scaled form的由来。 由此, ADMM步骤可以被简化写为:

x k + 1 : = argmin ⁡ x ( f ( x ) + ( ρ / 2 ) ∥ A x + B z k − c + u k ∥ 2 2 ) z k + 1 : = argmin ⁡ z ( g ( z ) + ( ρ / 2 ) ∥ A x k + 1 + B z − c + u k ∥ 2 2 ) u k + 1 : = u k + A x k + 1 + B z k + 1 − c . \begin{aligned} x^{k+1} &:=\underset{x}{\operatorname{argmin}}\left(f(x)+(\rho / 2)\left\|A x+B z^{k}-c+u^{k}\right\|_{2}^{2}\right) \\ z^{k+1} &:=\underset{z}{\operatorname{argmin}}\left(g(z)+(\rho / 2)\left\|A x^{k+1}+B z-c+u^{k}\right\|_{2}^{2}\right) \\ u^{k+1} &:=u^{k}+A x^{k+1}+B z^{k+1}-c . \end{aligned} xk+1zk+1uk+1:=xargmin(f(x)+(ρ/2)Ax+Bzkc+uk22):=zargmin(g(z)+(ρ/2)Axk+1+Bzc+uk22):=uk+Axk+1+Bzk+1c.
可以看到一次项已经被写进 ∥ ∥ 2 \|\|^2 2中了。

ADMM算法的收敛性

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213456.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android4.0 input事件输入流程详解(中间层到应用层)

    Android4.0 input事件输入流程详解(中间层到应用层)在Android系统中,类似于键盘按键、触摸屏等事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序进行处理。系统启动时,窗口管理服务也会启动,该服务启动过程中,会通过系统输入管理器InputManager来负责监控键盘消息。当某一个Activity激活时,会在该Service下注册一个接收消息的通道,表明可以处理具体的消息,然后当有消息时,InputM

    2022年5月29日
    37
  • 敏捷开发: 超级易用水桶估计系统

    敏捷开发: 超级易用水桶估计系统

    2021年6月30日
    85
  • matlab语法 axis on,matlabaxis

    matlab语法 axis on,matlabaxis编程语言中文网今天精心准备的是《matlabaxis》,下面是详解!Matlab里axis这个函数怎么用,举个例子!axis函数可以用于操作普通的坐标属性(轴的缩放和外观)。比如:axis([xminxmaxyminymax]):可以设置当前坐标轴x轴和y轴的限制范围axis([xminxmaxyminymaxzminzmaxcmincmax])可以设置x,y…

    2022年6月13日
    40
  • blob视频如何下载_blob加密视频下载

    blob视频如何下载_blob加密视频下载前言网页上有些视频是直接给的视频地址,那么很多浏览器都有插件进行视频下载,比如猎豹浏览器的:浏览器中有些视频是通过blob:https://baike.baidu.com/bf834217-9442-4c98-9ef6-0bd5f3408a4e的形式给出的。blob后面的网址不能直接访问。这是分片段进行加载的。。。比如百度百科搜索中的视频:离子液体这篇博客教你如何下载此类视频。准…

    2022年10月26日
    0
  • centos7 网络配置

    centos7 网络配置centos7刚安装,需要做一些配置才能正常上网!1.虚拟网络编辑器配置1)通过VMware菜单栏,依次点击编辑和虚拟网络编辑器2)选中VMnet8,取消勾选使用本地DHCP服务将IP地址分配给虚拟机,查看DHCP确保未启用,点击NAT设置3)查看网关IP,并记住192.168.255.2,用于网络配置文件设置2.修改mac地址如果本虚拟机为克隆机,则需要重新…

    2022年4月28日
    43
  • IDEA热部署不生效解决方案

    IDEA热部署不生效解决方案今天尝试热部署,没想到弄了半天没反应,最后经查阅发现此问题,希望同样问题的这个没配置的去添加试下,希望能帮到你第一步pom文件引入坐标<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools…

    2022年6月3日
    315

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号