交替方向乘子法(ADMM)的原理和流程的白话总结
交替方向乘子法(ADMM)的原理和流程的白话总结
作者:大大大的v
链接:https://www.zhihu.com/question/36566112/answer/118715721
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
多年前第一次接触到ADMM时候我关于优化的基础知识少的可怜(虽然现在也少得可怜),那些公式是什么鬼。当然如果有优化基础的话直接看S.Boyd的那本专著就好啦。我试着写给多年前一穷二白的自己,理一下思路。
1) 优化问题是什么:
最常见的优化问题长这样(公式1):
其中 是优化变量,也就是可以改变的数值,通过调节
的大小,使得目标函数
的数值达到最小。
像(1)式那样,只有函数,对于变量 没有要求的话,其实是最简单的一类优化问题:无约束优化问题(我们只考虑凸问题的情况下,如果你不知道什么是凸问题的话,没关系,那不重要,只要记住越凸越好=凸=)。
实际上我们对于优化变量 可能会有很多要求:
要满足什么集合啦, 什么等式约束,不等式约束啦巴拉巴拉,这就好比我们希望通过学习升级打怪成为高知女性就可以吊金龟婿一样,这里优化变量
暗指学历,函数
对应的是一个评分,也就是优质金龟婿不愿意跟你处对象的评分(因为是要最小化),金龟婿肤白貌美大长腿,那我小学学历肯定是不够的,初中文凭貌似也不太够?所以我学啊学,学啊学,以为学历越高越好,结果好不容易读了博,回头一看,好嘞原来男神对另一半学历是有要求的(也就是优化里所说的约束):高中<
<=硕士。博士不做女人啦,这大概就是基于学历的一个优化问题→_→
等式约束:
不等式约束:
所以一个等式约束的优化问题长这样(公式2):
2)ADMM解决什么优化问题:
也就意味着ADMM通常解决的是等式约束的优化问题,而且这个优化问题还有两个优化变量 跟
!
回到刚刚找男朋友的问题上来,如果之前我们只考量学历因素 的话,现在我们还要考量颜值因素
!而且这两个变量之间还是有等式关系的!(至于这个关系。。。大概就是那个什么学历越高,颜值就越。。。=凸=,荒谬,荒谬至极!)
事实上分布式中的一致性优化问题(consensus),分享问题(sharing problem)等等都很好写成这样的形式,因为每个节点的变量还要跟周围节点变量产生关联,但真正用ADMM的原因可能还是因为ADMM又快又好用吧。。。
3)解决优化问题的方法:
方法中与ADMM最为相关的大概就是原对偶方法中的增广拉格朗日法(ALM)。
对偶方法:把公式2中的minimize问题与约束条件sub to通过一个对偶变量 耦合在一起,形成一个叫做Lagrange函数的东西:
原来带约束求解 ,现在求解对偶问题
,两个问题的最优解等价(原问题凸的情况下。为什么?公式好多,我再想想(查查)有没有什么直观的解释),而且现在没了约束,岂不美哉(❁´◡`❁)*✲゚*
方法是对偶上升法:
对偶上升法其实很好理解,它把 ,也就是
拆成了两步:
第一步是固定对偶变量 ,求解
。
第二步固定住变量 ,像众所周知的梯度下降法那样操作,只不过这里是arg max 问题所以变成了上升法。
后来有人嫌弃这个Lagrange函数还不够凸,又对约束增加一个惩罚项,变成增广拉格朗日函数
这样就迈向更凸,算法也更强啦~
所以老师那句话什么来着,我凸了,也变强了。。。。
4)ADMM的流程:
ADMM的想法跟上面的思路就很一致啦,作为一个primal-dual原对偶方法,首先,它要有个对偶函数,也就是增广拉格朗日函数:
然后,它像对偶上升法一样分别固定另外两个变量,更新其中一个变量:(也就是其名:交替方向)
重复直到不怎么变化了,也就是收敛了。。。
至于怎么求解 ,因为无约束,梯度下降法啊,牛顿法啊等等都可以~其实就是大循环里嵌套的小循环,step1~3是大循环,求解里面的
是小循环。
5)其他一些杂七杂八的话:
ADMM相当于把一个大的问题分成了两个子问题,缩小了问题的规模,分而治之(?)
实际上有些算法用ADMM的思路,你看从ALM到ADMM相当于增加一个变量z,增加一个step就大大提升了算法性能,如果我再增加一个变量一个step呢~?但有工作指出理论上只有两个block的ADMM能够保证收敛(忘记在哪里看到的,不对的话,我就把这句话删掉!)
交替方向乘子法(ADMM)的原理和流程的白话总结的更多相关文章
- 交替方向乘子法(ADMM)
交替方向乘子法(ADMM) 参考1 参考2 经典的ADMM算法适用于求解如下2-block的凸优化问题( 是最优值,令 表示一组最优解): Block指我们可以将决策域分块,分成两组变量, 这里面 都 ...
- 交替方向乘子法(Alternating Direction Multiplier Method,ADMM)
交替方向乘子法(Alternating Direction Multiplier Method,ADMM)是一种求解具有可分结构的凸优化问题的重要方法,其最早由Gabay和Mercier于1967年提 ...
- 对偶上升法到增广拉格朗日乘子法到ADMM
对偶上升法 增广拉格朗日乘子法 ADMM 交替方向乘子法(Alternating Direction Method of Multipliers,ADMM)是一种解决可分解凸优化问题的简单方法,尤其在 ...
- 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析
SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...
- 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
[整理] 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...
- 装载:关于拉格朗日乘子法与KKT条件
作者:@wzyer 拉格朗日乘子法无疑是最优化理论中最重要的一个方法.但是现在网上并没有很好的完整介绍整个方法的文章.我这里尝试详细介绍一下这方面的有关问题,插入自己的一些理解,希望能够对大家有帮助. ...
- ML 徒手系列 拉格朗日乘子法
拉格朗日乘子法是解决极值问题的方法. 本方法是计算多元函数在约束条件下的极值问题的方法. 1.多元函数与约束问题 如下图所示,f(x,y)为多元函数,g(x,y)=c为约束条件.目的是计算在约束条件下 ...
- 拉格朗日乘子法&KKT条件
朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.前 ...
随机推荐
- 云闪付个人免签支付用xposed解决强制升级
云闪付的xposed程序之前用的是6.18的版本,前段时间突然不能用了,提示要升级到最新的7.0版本.之前这个云闪付的个人免签支付程序一直跑的挺好,云闪付也是所有免签支付里面最能跑量的,不甘就这么放弃 ...
- QList和QVector等容器的区别
QList和QVector等容器的区别. 1.大多数情况下可以用QList.像prepend()和insert()这种操作,通常QList比QVector快的多.这是因为QList是基于index标签 ...
- linux编辑文本(vim)时跳转到最后一行和第一行及相关指令
vi操作 1.跳到文本的最后一行:按“G”,即“shift+g” 2.跳到最后一行的最后一个字符 : 先重复1的操作即按“G”,之后按“$”键,即“shift+4”. 3.跳到第一行的第一个字符:先按 ...
- 多目标优化算法(一)NSGA-Ⅱ(NSGA2)(转载)
多目标优化算法(一)NSGA-Ⅱ(NSGA2) 本文链接:https://blog.csdn.net/qq_40434430/article/details/82876572多目标优化算法(一)NSG ...
- LC 969. Pancake Sorting
Given an array A, we can perform a pancake flip: We choose some positive integer k <= A.length, t ...
- Java之分布式事务TCC
看这个博客吧! 挺好的. 理论:https://www.cnblogs.com/jajian/p/10014145.html 实践:https://www.cnblogs.com/sessionbes ...
- Spring Boot 2.0 集成 Druid 数据源
一.Maven项目依赖 <!-- 开发者工具(热部署 修改classpath下的文件springboot自动重启) --> <dependency> <groupId&g ...
- 高可用安装k8s1.13.0 --不能带cavisor、不能加cni ,带上这两个总是报错,kubelet无法启动
高可用安装k8s1.13.0 --不能带cavisor,总是报错,kubelet无法启动
- vue中如何编写可复用的组件?
原文地址 Vue.js 是一套构建用户界面的渐进式框架.我们可以使用简单的 API 来实现响应式的数据绑定和组合的视图组件. 从维护视图到维护数据,Vue.js 让我们快速地开发应用.但随着业务代码日 ...
- python3 速查参考- python基础 9 -> MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令
前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...