交替方向乘子法(ADMM)

参考1

参考2

经典的ADMM算法适用于求解如下2-block的凸优化问题( 是最优值,令 表示一组最优解):

Block指我们可以将决策域分块,分成两组变量, 这里面 都是凸的。分成2-block是因为3-block及以上的问题性质会差一点,分析起来不太好说清楚(虽然实际当中基本上几个block都可以用,一般都会收敛...)。

那么我们这里就可以写出这个凸优化问题的增广拉格朗日函数(augmented Lagrangian function):

注意到这个增广的意思就是在原来的拉格朗日函数后面加了个平方的正则项(系数 ),这个主要是为了不需要 一定要是严格凸(strictly convex)/值域有限(只要是一般的凸函数就行了)然后也能保证收敛性。然后我们对 用dual ascent(对偶上升法),或者也就是拉格朗日乘子法就知道可以有这样一个算法形式:

其实dual ascent原理非常简单,本质上来说就是primal variable迭代方向取拉格朗日函数对primal variable的次微分,dual variable迭代方向取拉格朗日函数对dual variable的次微分(这里的话就是 )。这也是所谓拉格朗日乘子法的一般思路(method of multipliers)。当然这边还有一些细节,比如对偶变量迭代步长选了 。所以如果你想从基础打起的话,可以从比如S. Boyd and L. Vandenberghe的凸优化书第五章看起。

那么ADMM,也就是所谓“交替方向”的乘子法就是在原基础上( 一起迭代)改成 单独交替迭代(如果有更多block也是类似)。即,我们的ADMM算法为

本节最后,我们指出ADMM算法形式的另一种等价形式。如果定义所谓的残差(residual)为 ,那么注意到再定义 作为所谓scaled dual variable,我们有 即我们可以改写ADMM算法形式为

嗯这个形式就比前面那个更简洁些,我们一般叫前一种形式为ADMM的unscaled形式,而这种就自然是scaled形式了。很多ADMM分析都是基于这个scaled形式的。

参考文献

覃含章:https://www.zhihu.com/question/309568920/answer/580226096

用ADMM实现统计学习问题的分布式计算 · MullOver :http://shijun.wang/2016/01/19/admm-for-distributed-statistical-learning/

《凸优化》中文版PDF+英文版PDF+习题题解:https://pan.baidu.com/s/1oRGp4_LfDVLo86r79pnXvg

 
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Python内置函数(49)——pow

    英文文档: pow(x, y[, z]) Return x to the power y; if z is present, return x to the power y, modulo z (co ...

  2. java.net.SocketException: 权限不够

    java.net.SocketException: 权限不够 一切问题的根源都是缺乏常识  0.0.....背景:今天部署一个spring cloud服务,tanainaide 服务的端口为80,然后 ...

  3. 并发编程(八)—— Java 并发队列 BlockingQueue 实现之 ArrayBlockingQueue 源码分析

    开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现. 阻塞队列概要 阻塞队列与我们平常接触的普通队列(LinkedList或ArrayList等)的最大不同点,在于阻塞队列的阻塞 ...

  4. NIO 简介

    上文我们描述了五中IO类型.第一种同步阻塞模型我们我们称之为BIO(Blocking IO), 第三种IO复用模型我们称之为NIO(Nonblocking IO). 上图我们可以很容易的发现 BIO会 ...

  5. 解决GOOGLE无法访问

    修改hosts文件 https://github.com/txthinking/google-hosts  

  6. 【Java基础】【04循环语句&方法】

    04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do...while B:循环结构for语句的格式: for(初始化表达式;条件表达式; ...

  7. [四] JavaIO之类层次体系结构横向比对

      IO家族类层次体系结构横向匹配   上一篇文章中主要介绍了JavaIO流家族的整体设计思路,简单回顾下 基本逻辑涉及数据源 流的方向,以及流的数据形式这三个部分的组合 按照流的数据形式和流的方向, ...

  8. 从设计模式的角度看Java程序优化

    一.前言 Java程序优化有很多种渠道,比如jvm优化.数据库优化等等,但都是亡羊补牢的措施,如果能在设计程序架构时利用设计模式就把程序的短板解决,就能使程序更加健壮切容易维护迭代 二.常用的设计模式 ...

  9. 痞子衡嵌入式:ARM Cortex-M内核那些事(4)- 性能指标

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M性能指标. 1.处理器的性能指标 用于评价CPU的性能指标非常多,不同的性能侧重点下的测试标准可能得出的指标值不 ...

  10. AddressSanitizer简介

    AddressSanitizer 是一个快速的内存错误检测工具,它由一个编译时插桩模块和一个运行库组成.该工具可以检测以下类型的错误: 堆.栈和全局变量的越界 UAF Use-After-Return ...