[本文链接:http://www.cnblogs.com/breezedeus/p/3496819.html,转载请注明出处]

从等式约束的最小化问题说起:                                 
                                                    
上面问题的拉格朗日表达式为:
                                            
也就是前面的最小化问题可以写为:
                                              \(
\min\limits_{x} \max\limits_{y} L(x, y)
\) 。
它对应的对偶问题为:
                                             \(
\max\limits_{y}  \min\limits_{x} L(x, y)
\) 。
下面是用来求解此对偶问题的对偶上升迭代方法
                                  
这个方法在满足一些比较强的假设下可以证明收敛。

为了弱化对偶上升方法的强假设性,一些研究者在上世纪60年代提出使用扩展拉格朗日表达式(augmented Lagrangian)代替原来的拉格朗日表达式:
                                
其中\(\rho > 0\)。对应上面的对偶上升方法,得到下面的乘子法(method of multipliers)
                                                   

注意,乘子法里把第二个式子里的\(\alpha^k\)改成了扩展拉格朗日表达式中引入的\(\rho\)。这不是一个随意行为,而是有理论依据的。利用\(L(x, y)\)可以导出上面最小化问题对应的原始和对偶可行性条件分别为(\( \frac{\partial L} {\partial y} = 0\),\( \frac{\partial L} {\partial x} = 0\)):
                                             
既然\(x^{k+1}\) 最小化 \( L_{\rho}(x, y^{k})\),有:
                                       
上面最后一个等式就是利用了\( y^{k+1} = y^{k} + \rho(A x^{k+1}-b) \)。从上面可知,这种\(y^{k+1}\)的取法使得\( (x^{k+1}, y^{k+1}) \)满足对偶可行条件\( \frac{\partial L} {\partial x} = 0 \)。而原始可行条件在迭代过程中逐渐成立。

乘子法弱化了对偶上升法的收敛条件,但由于在x-minimization步引入了二次项而导致无法把x分开进行求解(详见[1])。而接下来要讲的Alternating Direction Method of Multipliers (ADMM)就是期望结合乘子法的弱条件的收敛性以及对偶上升法的可分解求解性。ADMM求解以下形式的最小化问题:
                                            
其对应的扩展拉格朗日表达式为:
                  
ADMM包括以下迭代步骤:
                                      
ADMM其实和乘子法很像,只是乘子法里把\(x\)和\(z\)放一块求解,而ADMM是分开求解,类似迭代一步的Gauss-Seidel方法。其中(3.4)中的推导类似于乘子法,只是使用了\(z^{k+1}\)最小化\( L_{\rho}(x^{k+1}, z, y^k) \):
                                      
其中用到了\(z\)对应的对偶可行性式子:
                                                   \(
\frac{\partial L} {\partial z} = \nabla g(z) + B^Ty = 0
\)

定义新变量\( u=\frac{1}{\rho}y \),那么(3.2-3.4)中的迭代可以变为以下形式:
                         
在真正求解时通常会使用所谓的over-relaxation方法,也即在\(z\)和\(u\)中使用下面的表达式代替其中的\( Ax^{k+1} \):
                                         \(
\alpha^k A x^{k+1} - (1-\alpha^k)(B z^k - c)
\),
其中\(\alpha^k\)为relaxation因子。有实验表明\(\alpha^k \in [1.5, 1.8]\)可以改进收敛性([2])。

下面让我们看看ADMM怎么被用来求解大型的机器学习模型。所谓的大型,要不就是样本数太多,或者样本的维数太高。下面我们只考虑第一种情况,关于第二种情况感兴趣的读者可以参见最后的参考文献[1, 2]。样本数太多无法一次全部导入内存,常见的处理方式是使用分布式系统,把样本分块,使得每块样本能导入到一台机器的内存中。当然,我们要的是一个最终模型,它的训练过程利用了所有的样本数据。常见的机器学习模型如下:
                                    \(
\text{minimize }_{x} \sum_{j=1}^{J} f_j(x) + g(x)
\),
其中\(x\)为模型参数,\(f_j(x)\)对应第\(j\)个样本的损失函数,而\(g(x)\)为惩罚系数,如\(g(x) = ||x||_1\)。

假设把\(J\)个样本分成\(N\)份,每份可以导入内存。此时我们把上面的问题重写为下面的形式:
                                          
除了把目标函数分成\(N\)块,还额外加了\(N\)个等式约束,使得利用每块样本计算出来的模型参数\(x_i\)都相等。那么,ADMM中的求解步骤(3.2)-(3.4)变为:
                           
例如求解L1惩罚的LR模型,其迭代步骤如下(\( u=\frac{1}{\rho}y \),\(g(z)=\lambda ||z||_1\)):
                                  
其中\(\bar{x} \doteq \frac1N \sum_{i}^N x_i\),\(\bar{y}\)的定义类似。

在分布式情况下,为了计算方便通常会把\(u\)的更新步骤挪在最前面,这样\(u\)和\(x\)的更新可以放在一块:
                                    

ADMM的框架确实很牛逼,把一个大问题分成可分布式同时求解的多个小问题。理论上,ADMM的框架可以解决大部分实际中的大尺度问题。我自己全部实现了一遍这个框架,主要用于求解LR问题,下面说说我碰到的一些问题:
1. 收敛不够快,往往需要迭代几十步。整体速度主要依赖于\(x_i\)更新时所使用的优化方法,个人建议使用liblinear里算法,但是不能直接拿来就用,需要做一些调整。
2. 停止准则和\(\rho\)的选取:停止准则主要考量的是\(x_i\)和\(z\)之间的差异和它们本身的变动情况,但这些值又受\(\rho\)的取值的影响。它们之间如何权衡并无定法。个人建议使用模型在测试集上的效果来确定是否停止迭代。
3. 不适合MapReduce框架实现:需要保证对数据的分割自始至终都一致;用MPI实现的话相对于其他算法又未必有什么优势(如L-BFGS、OwLQN等)。
4. relaxation步骤要谨慎:\(\alpha\)的取值依赖于具体的问题,很多时候的确可以加快收敛速度,但对有些问题甚至可能带来不收敛的后果。用的时候不论是用x -> z -> u的更新步骤,还是用u -> x -> z的更新步骤,在u步使用的x_hat要和在z步使用的相同(使用旧的z),而不是使用z步刚更新的z重算。
5. warm start 和子问题求解逐渐精确的策略可以降低\(x_i\)更新时的耗时,但也使得算法更加复杂,需要设定的参数也增加了。

[References]
[1] S. Boyd. Alternating Direction Method of Multipliers (Slides).
[2] S. Boyd et al. Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers, 2010.

用ADMM求解大型机器学习问题的更多相关文章

  1. {转}用ADMM求解大型机器学习问题

    [本文链接:http://www.cnblogs.com/breezedeus/p/3496819.html] 从等式约束的最小化问题说起:                               ...

  2. 协同ADMM求解考虑碳排放约束直流潮流问题的对偶问题(A Distributed Dual Consensus ADMM Based on Partition for DC-DOPF with Carbon Emission Trading)

    协同ADMM求解考虑碳排放约束直流潮流问题的对偶问题 (A Distributed Dual Consensus ADMM Based on Partition for DC-DOPF with Ca ...

  3. 100个大型机器学习数据集汇总(CV/NLP/音频方向)

    网站首页: 网址:数据集

  4. ADMM与one-pass multi-view learning

    现在终于开始看论文了,机器学习基础部分的更新可能以后会慢一点了,当然还是那句话宁愿慢点,也做自己原创的,自己思考的东西.现在开辟一个新的模块----多视图学习相关论文笔记,就是分享大牛的paper,然 ...

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

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

  6. cuda并行编程之求解ConjugateGradient(共轭梯度迭代)丢失dll解决方式

    在进行图像处理过程中,我们常常会用到梯度迭代求解大型线性方程组.今天在用cuda对神秘矩阵进行求解的时候.出现了缺少dll的情况: 报错例如以下图: watermark/2/text/aHR0cDov ...

  7. MapReduce: 一种简化的大规模集群数据处理法

    (只有文字没有图,图请参考http://research.google.com/archive/mapreduce.html) MapReduce: 一种简化的大规模集群数据处理法 翻译:风里来雨里去 ...

  8. MATLAB学习笔记(七)——MATLAB解方程与函数极值

    (一)线性方程组求解 包含n个未知数,由n个方程构成的线性方程组为: 其矩阵表示形式为: 其中 一.直接求解法 1.左除法 x=A\b; 如果A是奇异的,或者接近奇异的.MATLAB会发出警告信息的. ...

  9. [Reinforcement Learning] Value Function Approximation

    为什么需要值函数近似? 之前我们提到过各种计算值函数的方法,比如对于 MDP 已知的问题可以使用 Bellman 期望方程求得值函数:对于 MDP 未知的情况,可以通过 MC 以及 TD 方法来获得值 ...

随机推荐

  1. 配置FastReport,FastReport报表加载不出来

    插件链接: Demo地址:http://pan.baidu.com/s/1dEXUvsP FastReport.Net软件地址:https://pan.baidu.com/s/1c2kNBVi     ...

  2. OC对象的归档及解档浅析

    一般用在用户登录,保存这个用户的信息 对象归档,就是把内存中对象持久化. 对象解档,就是把持久化的对象读取到内存. oc中对象归档解档大致分为以下几种方法: 从数量上可以分为: 对单个对象归档解档 对 ...

  3. 【&】位与运算符【|】位或运算符之权限控制算法

    [&]位与运算符: 按位与运算符"&"是双目运算符. 其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数 ...

  4. 你不知道的函数节流,提高你的JS性能!

    浏览器的DOM计算处理非常耗费CPU时间,霸占内存,这对我们的开发来说是非常不友好的,,比如IE浏览器的onresize事件就可能在用户稍微拖动一下窗口时计算上千次,甚至更高频率直接让浏览器崩溃... ...

  5. js script中引用其他script

    在需要引用目标js中引用其他js依赖项 可以使用这个方法直接在js顶部加入这一行即可 document.write("<script type='text/javascript' sr ...

  6. SVN 集中式版本控制软件

    简介: 目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广.且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点. 一.安装svn [root@localh ...

  7. memcached+magent实现memcached集群

    首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源:无法同步数据,容易造成单点故障.(memagent代 ...

  8. js从服务器下载文件

    通常,将文件绝对路径url作为超链接<a>的链接地址href的值,点击<a>后,浏览器将会尝试请求文件资源,如果浏览器能够辨认文件类型,则将会以预设的打开方式直接打开下载的文件 ...

  9. UI设计中px、pt、ppi、dpi、dp、sp之间的关系

    UI设计中px.pt.ppi.dpi.dp.sp之间的关系 武汉AAA数字艺术教育 2015-07-24 14:19:50 职业教育 pi px 阅读(3398) 评论(0) 声明:本文由入驻搜狐公众 ...

  10. DISK 100% BUSY,谁造成的?

    iostat等命令看到的是系统级的统计,如果要追查是哪个进程导致的I/O繁忙,应该怎么办? iostat等命令看到的是系统级的统计,比如下例中我们看到/dev/sdb很忙,如果要追查是哪个进程导致的I ...