分布式计算、统计学习与ADMM算法(转)

业界一直在谈论大数据,对于统计而言,大数据其实意味着要不是样本量增加n→∞,要不就是维度的增加p→∞,亦或者两者同时增加,并且维度与样本量的增长速度呈线性或者指数型增长。在稀疏性的假设条件下,再加上一些正则性方法,统计学家可以证明各种加penalty的模型所给出的参数估计具有良好的统计性质,收敛速度也有保证,同时还会给出一些比较好的迭代算法,但是,他们并没有考虑真实环境下的所消耗的计算时间。虽然统...
摘要由CSDN通过智能技术生成
业界一直在谈论大数据,对于统计而言,大数据其实意味着要不是样本量增加n→∞,要不就是维度的增加p→∞,亦或者两者同时增加,并且维度与样本量的增长速度呈线性或者指数型增长。在稀疏性的假设条件下,再加上一些正则性方法,统计学家可以证明各种加penalty的模型所给出的参数估计具有良好的统计性质,收敛速度也有保证,同时还会给出一些比较好的迭代算法,但是,他们并没有考虑真实环境下的所消耗的计算时间。虽然统计学家也希望尽量寻求迭代数目比较少的算法(比如one-step估计),但是面对真实的Gb级别以上的数据,很多时候我们还是无法直接用这些算法,原因是一般的硬件都无法支撑直接对所有数据进行运算的要求。如果想减少抽样误差,不想抽样,又想提高估计的精度,那么还是需要寻求其他思路,结合已有的模型思想来解决这些问题。在目前条件下,并行化、分布式计算是一种比较好的解决思路,利用多核和多机器的优势,这些好算法便可以大规模应用,处理大数据优势便体现出来了。对于统计而言,数据量越大当然信息越可能充分(假设冗余成分不是特别多),因为大样本性质本身就希望样本越多越好嘛。
本文是基于Stephen Boyd 2011年的文章《Distributed Optimization and Statistical Learning via the Alternating Direction Method of Multipliers》进行的翻译和总结。Boyd也给出了利用matlab的CVX包实现的多种优化问题的matlab示例

1. 优化的一些基本算法思想

ADMM算法并不是一个很新的算法,他只是整合许多不少经典优化思路,然后结合现代统计学习所遇到的问题,提出了一个比较一般的比较好实施的分布式计算框架。因此必须先要了解一些基本算法思想。

1.1 Dual Ascent

对于凸函数的优化问题,对偶上升法核心思想就是引入一个对偶变量,然后利用交替优化的思路,使得两者同时达到optimal。一个凸函数的对偶函数其实就是原凸函数的一个下界,因此可以证明一个较好的性质:在强对偶性假设下,即最小化原凸函数(primal)等价于最大化对偶函数(dual),两者会同时达到optimal。这种转化可以将原来很多的参数约束条件变得少了很多,以利于做优化。具体表述如下:
mins.t.f(x)Ax=b⟹L(x,y)=f(x)+yT(Ax−b)⟹对偶函数(下界)g(y)=infxL(x,y)

 

在强对偶性的假设下,primal和dual问题同时达到最优。
x⋆=argminxL(x,y⋆)

 

因此,若对偶函数g(y)可导,便可以利用梯度上升法,交替更新参数,使得同时收敛到最优。迭代如下:
xk+1:yk+1:=argminxL(x,yk)(x-最小化步)=yk+αk∇g(y)=yk+αk(Axk+1−b)(对偶变量更新,αk是步长)

 

当g不可微的时候也可以将其转化下,成为一个所谓的subgradient的方法,虽然看起来不错,简单证明下即可知道xk和yk同时可达到optimal,但是上述条件要求很苛刻:f(x)要求严格凸,并且要求α选择有比较合适。一般应用中都不会满足(比如f(x)是一个非零的
仿射函数),因此dual ascent不会直接应用。
1.2 Dual Decomposition
虽然dual ascent方法有缺陷,要求有些严格,但是他有一个非常好的性质,当目标函数f是可分的(
separable)时候(参数抑或feature可分),整个问题可以拆解成多个子参数问题,分块优化后汇集起来整体更新。这样非常有利于并行化处理。形式化阐述如下:
mins.t.f(x)=∑i=1Nfi(xi),xi∈Rni,x∈RnAx=∑i=1NAixi=b,(对A矩阵按列切分开)⟹L(x,y)=∑i=1NLi(xi,y)=∑i=1N(fi(xi)+yTAixi−1NyTb)

因此可以看到其实下面在迭代优化时,x-minimization步即可以拆分为多个子问题的并行优化,对偶变量更新不变这对于feature特别多时还是很有用的。
xk+1i:yk+1:=argminxLi(xi,yk)(多个xi并行最小化步)=yk+αk∇g(y)=yk+αk(Axk+1−b)(汇集整体的x,然后对偶变量更新)

对偶分解是非常经典的优化方法,可追溯到1960年代。但是这种想法对后面的分布式优化方法影响较大,比如近期的graph-structure优化问题。
1.3 Augmented Lagrangians and the Method of Multipliers
从上面可以看到dual ascent方法对于目标函数要求比较苛刻,为了放松假设条件,同时比较好优化,于是就有了Augmented Lagrangians方法,目的就是放松对于f(x)严格凸的假设和其他一些条件,同时还能使得算法更加稳健。
Lρ(x,y)=f(x)+yT(Ax−b)+ρ2∥Ax−b∥22⟹mins.t.f(x)+ρ2∥Ax−b∥22Ax=b

从上面可以看到该问题等价于最初的问题,因为只要是可行解对目标函数就没有影响。但是加了后面的(ρ/2)∥Ax−b∥22惩罚项的好处是使得对偶函数gρ(y)=infxLρ(x,y)在更一般的条件下可导。计算过程与之前的dual ascent基本一样,除了最小化x时候加了扩增项。
xk+1yk+1=argminxLρ(x,yk)=yk+ρ(Axk+1−b)

上述也称作method of multipliers,可能也是因为更新对偶变量y时步长由原来变化的αk转为固定的ρ了吧。该算法在即使f(x)不是严格凸或者取值为+∞情况都可以成立,适用面更广。同样可以简单证明primal变量x和对偶变量y可以同时达到最优。
虽然Augmented Lagrangians方法有优势,但也破坏了dual ascent方法的利用分解参数来并行的优势。当f是separable时,对于Augmented Lagrangians却是not separable的(因为平方项写成矩阵形式无法用之前那种分块形式),因此在x−min步时候无法并行优化多个参数xi。如何改进,继续下面的议题就可以慢慢发现改进思想的来源。
2. Alternating Direction Method of Multipliers(ADMM)2.1 ADMM算法概述
为了整合dual ascent可分解性与method multiplers优秀的收敛性质,人们就又提出了改进形式的优化ADMM。目的就是想能分解原函数和扩增函数,以便于在对f更一般的假设条件下并行优化。ADMM从名字可以看到是在原来Method of Multipliers加了个Alternating Direction,可以大概猜想到应该是又想引入新变量,然后交叉换方向来交替优化。形式如下:
mins.t.f(x)+g(z)Ax+Bz=c⟹Lρ(x,z,y)=f(x)+g(z)+yT(Ax+Bz−c)+(ρ/2)∥Ax+Bz−c∥22

从上面形式确实可以看出,他的思想确实就是想把primal变量、目标函数拆分,但是不再像dual ascent方法那样,将拆分开的xi都看做是x的一部分,后面融合的时候还需要融合在一起,而是最先开始就将拆开的变量分别看做是不同的变量x和z,同时约束条件也如此处理,这样的好处就是后面不需要一起融合x和z,保证了前面优化过程的可分解性。于是ADMM的优化就变成了如下序贯型迭代(这正是被称作alternating direction的缘故):
xk+1zk+1yk+1=argminxLρ(x,zk,yk)=argminzLρ(xk+1,z,yk)=yk+ρ(Axk+1+Bzk+1−c)

后面我们可以看到这种拆分思想非常适合统计学习中的ℓ1-norm等问题:loss + regulazition(注意:一定要保证z分解出来,ADMM借助的就是用一个z变量来简化问题,不管他是约束还是其他形式也罢,需要构造一个z出来,后面具体到细节问题我们会有更深的体会)。
为了简化形式,ADMM有一个scaled form形式,其实就是对对偶变量做了scaled处理。先定义每一步更新的残差为r=Ax+Bz−c,于是稍加计算
yT(Ax+Bz−c)+(ρ/2)∥Ax+Bz−c∥22=yTr+(ρ/2)∥r∥22=(ρ/2)∥r+(1/ρ)y∥22−(1/2ρ)∥y∥22=(ρ/2)∥r+u∥22−(ρ/2)∥u∥22

此处u=(1/ρ)y称为scaled dual variable,并令每一步迭代的残差为rk=Axk+Bzk−c,以及累计残差uk=u0+∑kj=1rj,于是ADMM形式就可以简化为如下形式
xk+1zk+1uk+1=argminxLρ(x,zk,yk)=argmin(f(x)+(ρ/2)∥Ax+Bzk−c+uk∥22)=argminzLρ(xk+1,z,yk)=argmin(g(z)+(ρ/2)∥Axk+1+Bz−c+uk∥)=uk+ρ(Axk+1+Bzk+1−c)

写成这种形式有利于后面简化优化问题,当然可以不作任何处理。
2.2 ADMM算法性质和评价
(1)收敛性
关于收敛性,需要有两个假设条件:
  • f和g分别是扩展的实数函数Rn(Rm)→R⋃+∞,且是closed、proper和convex的;
  • 扩增的lagrangian函数L0有一个鞍点(saddle point);对于约束中的矩阵A,B都不需要满秩。
在此两个假设下,可以保证残差、目标函数、对偶变量的收敛性。
Note:实际应用而言,ADMM收敛速度是很慢的,类似于共轭梯度方法。迭代数十次后只可以得到一个acceptable的结果,与快速的高精度算法(Newton法,内点法等)相比收敛就慢很多了。因此实际应用的时候,其实会将ADMM与其他高精度算法结合起来,这样从一个acceptable的结果变得在预期时间内可以达到较高收敛精度。不过一般在大规模应用问题中,高精度的参数解对于预测效果没有很大的提高,因此实际应用中,短时间内一个acceptable的结果基本就可以直接应用预测了。
(2)停止准则
对于ADMM的能到到optimal的条件此处就不做赘述了,与基本的primal和dual feasibility 的条件差不多,即各primal variable的偏导和约束条件为0,从最优条件中可以得到所谓的对偶残差(dual residuals)和初始残差(primal residuals)形式:
sk+1rk+1=ρATB(zk+1−zk)(dualresiduals)=Axk+1+Bzk+1−c(primalresiduals)

相对而言,此处更难把握的其实是停止准则,因为收敛速度问题,要想获得一个还过得去可以拿来用的参数解,那么判断迭代停止还是比较重要的。实际应用中,一般都根据primal residuals和dual residuals足够小来停止迭代,阈值包含了绝对容忍度(absolute tolerance)和相对容忍度(relative tolerance),设置还是非常灵活和难把握的(貌似网上有不少人吐槽这个停止准则的不靠谱- -!),具体形式如下:
∥sk∥2≤ϵdual∥rk∥2≤ϵpri=n√ϵabs+ϵrel∥ATyk∥2=p√ϵabs+ϵrelmax{∥Axk∥2,∥Bzk∥,∥c∥2}

上面的p√和n√分别是维度和样本量。一般而言,相对停止阈值ϵrel=10−3或者10−4,绝对阈值的选取要根据变量取值范围来选取(咋选的呢?没说额,具体比例都不给说- -!)
另外一些细节问题,比如原来惩罚参数ρ是不变的,一些文献也做了一些可变的惩罚参数,目的是为了降低对于惩罚参数初始值的依赖性。不过变动的ρ会导致ADMM的收敛性证明比较困难,因此实际中假设经过一系列迭代后ρ也稳定,边可直接用固定的惩罚参数ρ了。还有其他问题,诸如x与z迭代顺序问题,实际操作下有所有不同,这些不是特别重要之处,可以忽略。其他与ADMM比较相关算法的有dual ADMM算法,distributed ADMM算法,还有整合了ADMM与proximal method of multiplier的算法
2.3 ADMM一般形式与部分具体应用
当构造了ADMM算法中的f,g,A,B后,便可直接应用该算法了。我们会经常遇到如下三种一般形式的问题
  • 二次目标优化项(quadratic objective terms);
  • 可分的目标函数和约束(separable objective and constraints);
  • 光滑目标函数项(smooth objective terms)。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ADMM(Alternating Direction Method of Multipliers)是分布式优化算法的一种常用方法,主要用于解决分布式优化问题。应用ADMM算法的步骤如下: 1. 定义目标函数:需要使用ADMM算法解决的目标函数。 2. 定义约束条件:目标函数的约束条件。 3. 分配计算节点:将目标函数和约束条件分配给不同的计算节点进行计算。 4. 初始化变量:为每个计算节点分配初始变量值。 5. 迭代更新变量:使用ADMM算法的迭代公式,不断更新每个计算节点的变量值,直到满足终止条件。 6. 同步结果:所有计算节点同步更新的结果,得到最终的优化结果。 在应用ADMM算法时,需要注意的是每个计算节点的计算速度和网络带宽的影响,以及算法的收敛性。 ### 回答2: 分布式的ADMM (Alternating Direction Method of Multipliers) 算法是一种解决分布式优化问题的有效方法。其基本思想是将原始问题化为一系列子问题,并通过迭代求解这些子问题来逼近原始问题的最优解。以下是如何应用分布式的ADMM算法的步骤: 1. 将原始问题化为等价的分布式形式。将原始问题的约束条件和目标函数分成多个局部部分,每个局部部分包含一部分变量和约束条件,并由不同的分布式节点处理。每个节点只能访问自己的局部变量和公共变量的部分信息。 2. 设计分布式的ADMM迭代步骤。每个节点在每一次迭代中执行以下步骤: a. 更新局部变量:根据自身的局部约束条件和公共变量,更新自己的局部变量。 b. 交换信息:节点将自己的局部变量信息传递给邻居节点,以便邻居节点更新自己的局部变量。 c. 更新公共变量:根据邻居节点传递过来的局部变量信息,更新公共变量。 d. 尝试收敛:检查解是否收敛,如果没有,则继续下一次迭代。 3. 设定收敛准则和停止条件。可以基于解的变化程度或达到一定迭代次数等来判断解是否收敛并设定合适的停止条件。 4. 并行化计算过程。由于ADMM算法中各节点的更新步骤是独立的,可以将各个节点的更新过程并行化加速计算。 分布式的ADMM算法广泛应用于分布式机器学习、网络优化、图形模型等领域。通过将原始问题拆分为多个子问题,在各个节点上并行计算求解,并通过信息交换来达到全局最优解。同时,分布式的ADMM算法还具有良好的收敛性和鲁棒性。 ### 回答3: 分布式的交替方向乘子方法(ADMM)是一种将优化问题分解为子问题并并行求解的算法。它可以应用于各种优化问题,包括凸优化问题和非凸优化问题。 首先,需要将原始问题换为ADMM的形式。假设原始问题的目标函数是f(x),约束条件为g(x) ≤ 0,其中x是优化变量。将其换为等效形式f(x) + g(z),其中z是辅助变量。 然后,将问题分解为多个子问题。每个子问题由一个局部问题和一个交换变量组成。每个子问题的局部部分只包含一个变量,交换变量用于协调各个子问题的解。 接下来,需要确定ADMM的迭代步骤。每个迭代步骤由三个子步骤组成:更新变量x的局部解,更新交换变量z,更新拉格朗日乘子(或稀疏信号)。 最后,需要确定ADMM的停止准则。通常可以使用残差、目标函数的差异或变量的变化幅度作为停止准则。 在实际应用中,可以将ADMM应用于各种问题。例如,可以将ADMM用于分布式机器学习,其中每台计算机上的模型参数是优化变量,每个计算机负责更新部分参数。此外,ADMM还可以用于图像恢复、信号处理、分布式优化等问题。 总之,分布式的ADMM算法可以通过将原始问题分解为子问题并并行求解来解决优化问题。它在分布式计算环境中具有广泛的应用,并且可以用于各种优化问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值