ADMM优化算法

ADMM优化算法

原文链接: http://www.cnblogs.com/breezedeus/p/3496819.html

从等式约束的最小化问题说起:

min ⁡ f ( x ) s . t . A x = b \min f(x)\quad s.t.\quad Ax=b minf(x)s.t.Ax=b

上面问题的拉格朗日表达式为:

L ( x , λ ) = f ( x ) + λ T ( A x − b ) L(x,λ)=f(x)+\lambda^T(Ax−b) L(x,λ)=f(x)+λT(Axb)

也就是前面的最小化问题可以写为:
min ⁡ x max ⁡ λ L ( x , λ ) \min_{x}\max_{\lambda}L(x,\lambda) xminλmaxL(x,λ)它对应的对偶问题为:
max ⁡ λ min ⁡ x ( x , λ ) \max_{\lambda}\min_{x}(x,\lambda) λmaxxmin(x,λ)下面是用来求解此对偶问题的对偶上升迭代方法
x k + 1 : = arg ⁡ min ⁡ x L ( x , λ k ) / / x − m i n i m i z a t i o n λ k + 1 : = λ k + α k ( A x k + 1 − b ) / / d u a l u p d a t e \begin{aligned} x^{k+1}:&=\arg\min_{x}L(x,\lambda^k)\qquad //x−minimization\\ \lambda^{k+1}:&=\lambda^k+\alpha^k(Ax^{k+1}−b)\qquad//dual\quad update \end{aligned} xk+1:λk+1:=argxminL(x,λk)//xminimization=λk+αk(Axk+1b)//dualupdate这个方法在满足一些比较强的假设下可以证明收敛。

为了弱化对偶上升方法的强假设性,一些研究者在上世纪60年代提出使用增强拉格朗日表达式(augmented Lagrangian)代替原来的拉格朗日表达式:
L ρ ( x , λ ) = f ( x ) + λ T ( A x − b ) + ρ 2 ∣ ∣ A x − b ∣ ∣ 2 2 L_\rho(x,\lambda)=f(x)+\lambda^T(Ax-b)+\frac{\rho}{2}||Ax-b||_2^2 Lρ(x,λ)=f(x)+λT(Axb)+2ρAxb22其中 ρ > 0 \rho>0 ρ>0。对应上面的对偶上升方法,得到下面的乘子法 (method of multipliers)
x k + 1 : = arg ⁡ min ⁡ x L ρ ( x , λ k ) λ k + 1 : = λ k + ρ ( A x k + 1 − b ) \begin{aligned} x^{k+1}:&=\arg\min_{x}L_\rho(x,\lambda^k)\\ \qquad\lambda^{k+1}:&=\lambda^k+\rho(Ax^{k+1}−b)\qquad \end{aligned} xk+1:λk+1:=argxminLρ(x,λk)=λk+ρ(Axk+1b)注意,乘子法里把第二个式子里的 α k \alpha^k αk改成了增强拉格朗日表达式中引入的 ρ \rho ρ。这不是一个随意行为,而是有理论依据的。利用 L ( x , λ ) L(x,\lambda) L(x,λ)可以导出上面最小化问题对应的原始问题和对偶问题可行性条件,分别为( ∂ L ∂ λ = 0 , ∂ L ∂ x = 0 \cfrac{\partial L}{\partial\lambda}=0,\cfrac{\partial L}{\partial x}=0 λL=0,xL=0) :

A x ∗ − b = 0 , ∇ f ( x ∗ ) + A T λ ∗ = 0 Ax^*−b=0,\nabla f(x^*)+A^T\lambda^∗=0 Axb=0,f(x)+ATλ=0

既然 x k + 1 x^{k+1} xk+1最小化 L ρ ( x , λ k ) L_\rho(x,\lambda^k) Lρ(x,λk),有:
0 = ∇ x L ρ ( x k + 1 , λ k ) = ∇ x f ( x k + 1 ) + A T ( λ k + ρ ( A x k + 1 − b ) ) = ∇ x f ( x k + 1 ) + A T λ k + 1 \begin{aligned} 0&=\nabla _xL_\rho(x^{k+1},\lambda^k)\\&=\nabla _xf(x^{k+1})+A^T(\lambda^k+\rho(Ax^{k+1}−b)) \\&=\nabla _xf(x^{k+1})+A^T\lambda^{k+1} \end{aligned} 0=xLρ(xk+1,λk)=xf(xk+1)+AT(λk+ρ(Axk+1b))=xf(xk+1)+ATλk+1上面最后一个等式就是利用 λ k + 1 = λ k + ρ ( A x k + 1 − b ) \lambda^{k+1}=\lambda^k+\rho(Ax^{k+1}−b) λk+1=λk+ρ(Axk+1b)。从上面可知,这种 λ k + 1 \lambda^{k+1} λk+1的取法使得 ( x k + 1 , λ k + 1 ) (x^{k+1},λ^{k+1}) (xk+1,λk+1)满足对偶问题可行条件 ∂ L ∂ x = 0 \cfrac{\partial L}{\partial x}=0 xL=0。而原始可行条件在迭代过程中逐渐成立。

乘子法弱化了对偶上升法的收敛条件,但由于在 x − m i n i m i z a t i o n x−minimization xminimization步引入了二次项而导致无法把 x x x分开进行求解(详见这儿)。而接下来要讲的Alternating Direction Method of Multipliers (ADMM) 就是期望结合乘子法的弱条件的收敛性以及对偶上升法的可分解求解性。ADMM求解以下形式的最小化问题:
(1) min ⁡ f ( x ) + g ( z ) s . t . A x + B z = c \min f(x)+g(z)\quad s.t.\quad Ax+Bz=c\tag{1} minf(x)+g(z)s.t.Ax+Bz=c(1)其对应的增强拉格朗日表达式为: (2) L ρ ( x , z , λ ) = f ( y ) + g ( z ) + λ T ( A x + B z − c ) + ρ 2 ∣ ∣ A x + B z − c ∣ ∣ 2 2 L_\rho(x,z,\lambda)=f(y)+g(z)+\lambda ^T(Ax+Bz-c)+\frac{\rho}{2}||Ax+Bz-c||_2^2\tag{2} Lρ(x,z,λ)=f(y)+g(z)+λT(Ax+Bzc)+2ρAx+Bzc22(2)ADMM包括以下迭代步骤:
(3) x k + 1 : = arg ⁡ min ⁡ x L ρ ( x , z k , λ k ) x^{k+1}:=\arg\min_{x}L_\rho(x,z^k,\lambda^k)\tag{3} xk+1:=argxminLρ(x,zk,λk)(3) (4) z k + 1 : = arg ⁡ min ⁡ x L ρ ( x k + 1 , z , λ k ) z^{k+1}:=\arg\min_{x}L_\rho(x^{k+1},z,\lambda^k)\tag{4} zk+1:=argxminLρ(xk+1,z,λk)(4) (5) λ k + 1 : = λ k + ρ ( A x k + 1 + B z k + 1 − c ) \qquad\lambda^{k+1}:=\lambda^k+\rho(Ax^{k+1}+Bz^{k+1}-c)\tag{5} λk+1:=λk+ρ(Axk+1+Bzk+1c)(5)ADMM其实和乘子法很像,只是乘子法里把 x x x z z z放一块求解,而ADMM是分开求解,类似迭代一步的Gauss-Seidel方法。其中(5)中的推导类似于乘子法,只是使用了 z k + 1 z^{k+1} zk+1最小化 L ρ ( x k = 1 , z , λ k ) L\rho(x^{k=1},z,\lambda^k) Lρ(xk=1,z,λk)
0 = ∇ z g ( z K + 1 ) + B T λ k + ρ B T ( A x k + 1 + B z k + 1 − c ) = ∇ z g ( z K + 1 ) + B T λ k + 1 0=\nabla _zg(z^{K+1})+B^T\lambda^k+\rho B^T(Ax^{k+1}+Bz^{k+1}-c)=\nabla _zg(z^{K+1})+B^T\lambda^{k+1} 0=zg(zK+1)+BTλk+ρBT(Axk+1+Bzk+1c)=zg(zK+1)+BTλk+1其中用到了 z z z对应的对偶可行性式子: ∂ L ∂ z = ∇ g ( z ∗ ) + B T λ ∗ = 0 \cfrac{\partial L}{\partial z}=\nabla g(z^*)+B^T\lambda^*=0 zL=g(z)+BTλ=0
定义新变量 u = λ ρ u=\cfrac{\lambda}{\rho} u=ρλ,那么(3-5)中的迭代可以变为以下形式: (6) x k + 1 : = arg ⁡ min ⁡ x ( f ( x ) + ρ 2 ∣ ∣ A x + B z k − c + u k ∣ ∣ 2 2 ) x^{k+1}:=\arg\min_{x}(f(x)+\frac{\rho}{2}||Ax+Bz^k-c+u^k||_2^2)\tag{6} xk+1:=argxmin(f(x)+2ρAx+Bzkc+uk22)(6) (7) z k + 1 : = arg ⁡ min ⁡ z ( g ( z ) + ρ 2 ∣ ∣ A x k + 1 + B z k − c + u k ∣ ∣ 2 2 ) z^{k+1}:=\arg\min_{z}(g(z)+\frac{\rho}{2}||Ax^{k+1}+Bz^k-c+u^k||_2^2)\tag{7} zk+1:=argzmin(g(z)+2ρAxk+1+Bzkc+uk22)(7) (8) u k + 1 : = u k + A x k + 1 + B z k + 1 − c u^{k+1}:=u^k+Ax^{k+1}+Bz^{k+1}-c\tag{8} uk+1:=uk+Axk+1+Bzk+1c(8)在真正求解时通常会使用所谓的over-relaxation方法,也即在求解 z z z u u u中使用下面的表达式代替其中的 A x k + 1 Ax^{k+1} Axk+1 α k A x k + 1 − ( 1 − α k ) ( B z k − c ) \alpha^kAx^{k+1}-(1-\alpha^k)(Bz^k-c) αkAxk+1(1αk)(Bzkc)其中 α k \alpha^k αk为relaxation因子。有实验表明 α k ∈ [ 1.5 , 1.8 ] \alpha^k\in[1.5,1.8] αk[1.5,1.8]可以改进收敛性

ADMM的框架确实很牛逼,把一个大问题分成多个小问题。理论上,ADMM的框架可以解决大部分实际中的大尺度问题。我自己全部实现了一遍这个框架,主要用于求解LR(逻辑回归)问题,下面说说我碰到的一些问题:

1.收敛不够快,往往需要迭代几十步。整体速度主要依赖于 x i x^i xi更新时所使用的优化方法,个人建议使用liblinear里算法,但是不能直接拿来就用,需要做一些调整。

2.停止准则和 ρ \rho ρ的选取:停止准则主要考量的是 x i x^i xi z z z之间的差异和它们本身的变动情况,但这些值又受ρ的取值的影响。它们之间如何权衡并无定法。个人建议使用模型在测试集上的效果来确定是否停止迭代。

3.relaxation步骤要谨慎: α \alpha α的取值依赖于具体的问题,很多时候的确可以加快收敛速度,但对有些问题甚至可能带来不收敛的后果。用的时候不论是用 x − > z − > u x−>z−>u x>z>u的更新步骤,还是用 u − > x − > z u−>x−>z u>x>z的更新步骤,在 u u u步使用的 x ^ \hat{x} x^要和在 z z z步使用的相同(使用旧的 z z z),而不是使用 z z z步刚更新的 z z z重算。

4.warm start 和子问题求解逐渐精确的策略可以降低 x i x^i xi更新时的耗时,但也使得算法更加复杂,需要设定的参数也增加了。

以上内容编辑:任月

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值