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算法的收敛性

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • DB监控简易脚本

    DB监控简易脚本

  • web前端技术讲解之CSS中position的定位技术

    web前端技术讲解之CSS中position的定位技术

  • 950. 郁闷的出纳员(Splay树)「建议收藏」

    950. 郁闷的出纳员(Splay树)「建议收藏」OIER 公司是一家大型专业化软件公司,有着数以万计的员工。作为一名出纳员,我的任务之一便是统计每位员工的工资。这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资。如果他心情好,就可能把每位员工的工资加上一个相同的量。反之,如果心情不好,就可能把他们的工资扣除一个相同的量。我真不知道除了调工资他还做什么其它事情。工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离开公司,并且再也不会回来了。

  • c语言中的双周期指令,时钟周期 机器周期 指令周期的概念[通俗易懂]

    c语言中的双周期指令,时钟周期 机器周期 指令周期的概念[通俗易懂]时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制…

    2022年10月13日
  • Android 编译_android线程

    Android 编译_android线程之前本地环境编译一直是正常的,后来更新代码后,出现编译不过。提示outofmemory,但是查看swap和内存都还是够的。里面有个提示,tryincreasingheapsizewithjavaoption’-Xmx’,就按照这个来改。失败截图:解决方案:exportJACK_SERVER_VM_ARGUMENTS=”-Dfile.e

  • c语言函数指针的用法_函数指针作为形参

    c语言函数指针的用法_函数指针作为形参前言函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言的童鞋,估计碰到这些东西就已经要崩溃了,然后好不容易死记硬背下来应付考试或者面试,然后过了几天发现,又是根本不会用,也不知道该在哪些地方用,这就尴尬了。今天这里只讲两…

发表回复

您的电子邮箱地址不会被公开。

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