交替方向乘子法(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条件.前 ...
随机推荐
- .net 数据导出
安装npoi,下面是具体的C#代码: public static XSSFWorkbook BuildWorkbook(DataTable dt) { var book = new XSSFWorkb ...
- myeclipse使用SVN分支与合并详解
此博文主要内容来源地址:https://blog.csdn.net/liuyifeng1920/article/details/53118183,感谢原创博主: 先介绍一下svn的两种开发和发布的规范 ...
- 【零基础】speech driven animation中文安装使用指南
注:原项目名叫Speech-Driven Animation,所以我这里就简称为SDA 开局一张图,后面自动编 相信前段时间爆火的DeepNude(AI扒衣)让很多人惊掉了大牙,AI还能干这个?!如果 ...
- MySQL所谓的脏页和“抖”一下是什么联系?
在我们平时经常用到的sql更新语句,之前是认为只要sql执行,当前sql的操作会立马执行到服务器磁盘上并返回,但是后来我才知道,事实并非如此,在了解事实之前,首先可能需要先了解什么是redo log, ...
- 2018-2019-2 20165330《网络对抗技术》Exp8 Web基础
目录 基础问题 相关知识 实验内容 实验步骤 实验总结与体会 实验内容 Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML ...
- mongodb 的云数据库产品 atlas 的使用
前言:最近发现 mlab 被mongodb 收购以后,不再支持新用户,推荐使用 MongoDB Atlas 第一步:注册或登陆 在MongoDB atlas首页,如果有账号,那就点击登陆.否则点击Ge ...
- 【log4j】log4j.properties 文件示例
# 下面的文件内容是写程序长期要用的,放在这里留个底#Output information(higher than INFO) to stdout and file.info/debug/error ...
- [MyBatis] 如何让MyBatis支持代码级事务处理
MyBatis提供的sqlSession对象是可以用来帮助我们实现事务处理的,方式和JDBC的类似,具体请见代码: import java.sql.Connection; import java.sq ...
- BCNF/3NF的判断方法
判断是否是 3NF 的条件: 对于 R 上的每个函数依赖 X->A (X 是关系 R 属性的一个子集,A 是 R 的一个属性) ,以下条件中的一个成立:1 X ∈ A2 X 是超码3 A 是 R ...
- Node Newbie Error – NPM Refusing to Install Package as a Dependency of Itself
46 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_ ...