ADMM(Alternating Direction Method of Multipliers,交替方向乘子法)是一种优化算法,主要用于解决分布式、大规模和非光滑的凸优化问题。ADMM通过将原始问题分解为多个易于处理的子问题来实现优化。它结合了两种经典优化方法:梯度下降法(gradient descent)和拉格朗日乘子法(Lagrangian multiplier method)。

ADMM

算法

  ADMM考虑如下形式的凸优化问题:

$\min\limits_{x,z} f(x) + g(z)$
$ s.t.\,\, Ax + Bz = c $

  其中$x$和$z$是优化变量,$f(x)$和$g(z)$是凸函数,$A,B,c$是已知的系数矩阵与向量。为了解决这个问题,首先引入拉格朗日乘子$y\in R$,构造增广拉格朗日函数$L(x, z, y)$:

$\displaystyle L(x, z, y) = f(x) + g(z) + y^T(Ax + Bz - c) + \frac{\rho}{2} ||Ax + Bz - c||^2$

  其中$\rho > 0$是一个超参数,定义算法迭代步伐。相较于普通拉格朗日函数,增广拉格朗日函数多了二范数约束,能更好地处理约束条件并加速算法的收敛。

  ADMM算法通过以下迭代步骤进行优化直到收敛:

  1、更新$x$:$x^{k+1} = \text{arg}\min\limits_x L(x, z^k, y^k)$
  2、更新$z$:$z^{k+1} = \text{arg}\min\limits_z L(x^{k+1}, z, y^k)$
  3、更新$y$:$y^{k+1} = y^k + \rho(Ax^{k+1} + Bz^{k+1} - c)$

  收敛条件如:$\|x^{k+1}-x^{k}\|$与$\|z^{k+1}-z^{k}\|$小于一定阈值。

为什么可以优化到最小值

  ADMM的收敛性可以从两个方面来理解:

  可分离性:在ADMM的迭代过程中,$x$和$z$的优化问题是分开进行的。这意味着我们可以独立地解决$f(x)$和$g(z)$的优化问题。在每一步迭代中,我们都在尝试最小化原始问题的目标函数。

  拉格朗日乘子法的收敛性:拉格朗日乘子法的目标是找到满足原始问题约束条件的最优解。在ADMM的迭代过程中,通过调整拉格朗日乘子$y$来强化原始问题的约束条件,从而保证算法在全局范围内收敛到满足约束条件的可行解。

  综上所述,ADMM算法可以在全局范围内收敛到原始优化问题的最小值,因为它能够在每次迭代中分别优化目标函数,并逐渐强化约束条件。

  直观理解:如果满足约束条件,迭代的前两步总是会使$f(x)$与$g(z)$变小,而第3步只是更新$y$,因此总体的迭代过程是单向让原始优化问题$f(x)+g(z)$变小的。而一旦约束不满足,第3步对$y$的更新就是约束对的前两步更新的反抗。如果前两步更新使约束不满足,那么在第3步$y$就会更新,使约束在下一次迭代的前两步产生相应的梯度。

  参考: https://blog.csdn.net/weixin_44655342/article/details/121899501

ADMM——交替方向乘子法的更多相关文章

  1. 交替方向乘子法(ADMM)

    交替方向乘子法(ADMM) 参考1 参考2 经典的ADMM算法适用于求解如下2-block的凸优化问题( 是最优值,令 表示一组最优解): Block指我们可以将决策域分块,分成两组变量, 这里面 都 ...

  2. 交替方向乘子法(ADMM)的原理和流程的白话总结

    交替方向乘子法(ADMM)的原理和流程的白话总结 2018年08月27日 14:26:42 qauchangqingwei 阅读数 19925更多 分类专栏: 图像处理   作者:大大大的v链接:ht ...

  3. 交替方向乘子法(Alternating Direction Multiplier Method,ADMM)

    交替方向乘子法(Alternating Direction Multiplier Method,ADMM)是一种求解具有可分结构的凸优化问题的重要方法,其最早由Gabay和Mercier于1967年提 ...

  4. 对偶上升法到增广拉格朗日乘子法到ADMM

    对偶上升法 增广拉格朗日乘子法 ADMM 交替方向乘子法(Alternating Direction Method of Multipliers,ADMM)是一种解决可分解凸优化问题的简单方法,尤其在 ...

  5. 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析

    SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...

  6. 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...

  7. 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    [整理]   在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...

  8. 装载:关于拉格朗日乘子法与KKT条件

    作者:@wzyer 拉格朗日乘子法无疑是最优化理论中最重要的一个方法.但是现在网上并没有很好的完整介绍整个方法的文章.我这里尝试详细介绍一下这方面的有关问题,插入自己的一些理解,希望能够对大家有帮助. ...

  9. 拉格朗日乘子法&KKT条件

    朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.前 ...

  10. 关于拉格朗日乘子法与KKT条件

    关于拉格朗日乘子法与KKT条件 关于拉格朗日乘子法与KKT条件   目录 拉格朗日乘子法的数学基础 共轭函数 拉格朗日函数 拉格朗日对偶函数 目标函数最优值的下界 拉格朗日对偶函数与共轭函数的联系 拉 ...

随机推荐

  1. 安卓系统使用chrome插件(以yandex安装油猴为例)

    以tampermonkey为代表的Chrome插件广受好评,但由于Chrome在安卓系统并不支持令人遗憾.所以带来安卓手机使用Chrome插件的教程. 一,首先下载安卓开源浏览器(个人推荐yandex ...

  2. 如何排查线上w3wp.exe CPU高的问题,使用到了WinDbg、Visual studio来分析IIS进程池的.dmp文件

    最近发现服务器上某个web站点老是CPU很高,该站点部署在IIS上,我IIS上有多个站点,每个站点一个进程池,每个进程池取名都是根据站点来取的,所以很容易看出哪个站点吃掉的CPU,该站点已运行十几年, ...

  3. 手写一个Promise.all

    Promise.all 特性: 1. 按顺序返回结果数组; 2. 当所有promise完成才返回; 3. 返回第一个报错的promise的信息; 直接上代码: Promise._all = funct ...

  4. 物体检测序列之一:ap, map

    准确率(Precision),也叫正确预测率(positive predictive value),在模式识别.信息检索.机器学习等研究应用领域,准确率用来衡量模型预测的结果中相关或者正确的比例.而召 ...

  5. 掌握 C++17:结构化绑定与拷贝消除的妙用

    C++17 特性示例 1. 结构化绑定(Structured Binding) 结构化绑定允许你用一个对象的元素或成员同时实例化多个实体. 结构化绑定允许你在声明变量的同时解构一个复合类型的数据结构( ...

  6. T2 的莫反式子

    正在实现,不知道对不对,但是先放这,哪个大佬发现问题了和我说下 设 \[f(l)=\sum\cdots\sum[\gcd=1,\text{lcm}=l] \] \[g(l)=\sum\cdots\su ...

  7. Java中浮点数运算存在的精度问题以及解决方法

    观察以下一段代码,相信小朋友都可以一眼看出答案,但是计算机给出的答案是这样吗? public class TestDouble { public static void main(String arg ...

  8. 全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码

    全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码 摘要: 在 Python 中,字符串是文本的表示,默认使用 Unicode 编码,这允许你处理各种字符集,字符编 ...

  9. war3辅助代码及运行方式

    打开VS2019 点这个 自动生成这么一堆代码,全删了,就剩这些就行 然后点这里 然后向CPP里粘贴以下代码 #include "tlhelp32.h" HANDLE hwnd = ...

  10. 浏览器中生成 OSS 令牌 | Web Crypto API

    笔者写文章的时候,都会把图片通过自己搭建的一个简单站点 https://imgbed.sugarat.top/ 把图片上传到各种云的对象存储服务(OSS)上. 然后通过CDN访问,保证图片有可靠的访问 ...