凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)

凸优化学习

我们前面说过,拉格朗日法在实际中应用不大。为什么呢?因为 α \alpha α的取值很难取,这就导致拉格朗日法鲁棒性很低,收敛很慢,解很不稳定。于是就有了今天的增广拉格朗日法和ADMM。

学习笔记

一、增广拉格朗日法(Augmented Lagrange Method)

1、定义

一句话总结:在拉格朗日法的基础上,将拉格朗日函数替换为增广拉格朗日函数。

有问题形如:
min ⁡ f ( x ) s.t. A x − b = 0 \begin{aligned} \min&& f(x)&\\ \text{s.t.} &&\textbf Ax-b&=0\\ \end{aligned} mins.t.f(x)Axb=0
定义其增广拉格朗日函数为:
l c ( x , v ) = f ( x ) + v T ( A x − b ) + c 2 ∥ A x − b ∥ 2 2 l_c(x,v)=f(x)+v^T(\textbf Ax-b)+\frac c 2\|\textbf Ax-b\|^2_2 lc(x,v)=f(x)+vT(Axb)+2cAxb22
增广拉格朗日法:
x k + 1 = arg ⁡ min ⁡ x l c ( x , v k ) v k + 1 = v k + c ( A x k + 1 − b ) \begin{aligned} x^{k+1}&=\arg\min_xl_c(x,v^k)\\ v^{k+1}&=v^k+c(\textbf A x^{k+1}-b) \end{aligned} xk+1vk+1=argxminlc(x,vk)=vk+c(Axk+1b)

2、证明增广拉格朗日法的解是原问题的解

有问题形如:
min ⁡ f ( x ) ( P 1 )    s.t. A x − b = 0 \begin{aligned} \min&& f(x)&\\ (\text{P}_1)\qquad\qquad\quad\ \ \qquad\text{s.t.} &&\textbf Ax-b&=0 \end{aligned} min(P1)  s.t.f(x)Axb=0

增广拉格朗日函数对应的问题:
min ⁡ f ( x ) + c 2 ∥ A x − b ∥ 2 2 ( P 2 ) s.t. A x − b = 0 \begin{aligned} \min&& f(x)+\frac c 2\|\textbf Ax-b\|_2^2&\\ (\text{P}_2)\qquad\text{s.t.} &&\textbf Ax-b&=0 \end{aligned} min(P2)s.t.f(x)+2cAxb22Axb=0
即证:
{ x 1 ∗ = x 2 ∗ v 1 ∗ = v 2 ∗ \begin{cases} x_1^*=x_2^*\\ v_1^*=v_2^* \end{cases} {x1=x2v1=v2
P 1 \text P_1 P1,其 KKT \text{KKT} KKT条件中的稳定性有:
∇ x 1 l ( x 1 ∗ , v 1 ∗ ) = 0 ⇒ ∇ x 1 { f ( x 1 ∗ ) + ( v 1 ∗ ) T ( A x 1 ∗ − b ) } = 0 \begin{aligned} &&\nabla_{x_1}l(x_1^*,v_1^*)&=0\\ \Rightarrow&&\nabla_{x_1}\lbrace f(x_1^*)+(v_1^*)^T(\textbf A x^*_1-b)\rbrace&=0\\ \end{aligned} x1l(x1,v1)x1{f(x1)+(v1)T(Ax1b)}=0=0
P 2 \text P_2 P2,其 KKT \text{KKT} KKT条件中的稳定性有:
∇ x 2 l ( x 2 ∗ , v 2 ∗ ) = 0 ⇒ ∇ x 2 { f ( x 2 ∗ ) + ( v 2 ∗ ) T ( A x 2 ∗ − b ) } + c A T ( A x 2 ∗ − b ) = 0 \begin{aligned} &&\nabla_{x_2}l(x_2^*,v_2^*)&=0\\ \Rightarrow&&\nabla_{x_2}\lbrace f(x_2^*)+(v_2^*)^T(\textbf A x^*_2-b)\rbrace+c\textbf A^T(\textbf A x^*_2-b)&=0\\ \end{aligned} x2l(x2,v2)x2{f(x2)+(v2)T(Ax2b)}+cAT(Ax2b)=0=0
因为 ( A x 2 ∗ − b ) = 0 (\textbf A x^*_2-b)=0 (Ax2b)=0,比较上下两式,得:
{ x 1 ∗ = x 2 ∗ v 1 ∗ = v 2 ∗ \begin{cases} x_1^*=x_2^*\\ v_1^*=v_2^* \end{cases} {x1=x2v1=v2
证毕。

3、从拉格朗日法角度理解增广拉格朗日法(联系、对比)

有问题形如:
min ⁡ f ( x ) s.t. A x − b = 0 \begin{aligned} \min&& f(x)&\\ \text{s.t.} &&\textbf Ax-b&=0\\ \end{aligned} mins.t.f(x)Axb=0
拉格朗日法:
x k + 1 = x k − α k ( ∇ f ( x k ) + A T v k ) v k + 1 = v k + α k ( A x k − b ) \begin{aligned} x^{k+1}&=x^k-\alpha^k\big(\nabla f(x^k)+\textbf A^T v^k\big)\\ v^{k+1}&=v^k+\alpha^k(\textbf A x^k-b) \end{aligned} xk+1vk+1=xkαk(f(xk)+ATvk)=vk+αk(Axkb)
增广拉格朗日法:
x k + 1 = arg ⁡ min ⁡ x ∇ x l c ( x , v k ) v k + 1 = v k + c ( A x k + 1 − b ) \begin{aligned} x^{k+1}&=\arg\min_x\nabla_xl_c(x,v^k)\\ v^{k+1}&=v^k+c(\textbf A x^{k+1}-b) \end{aligned} xk+1vk+1=argxminxlc(x,vk)=vk+c(Axk+1b)
可以看到,增广拉格朗日法去掉了 α k \alpha^k αk,之后在性质分析中我们会讲到,在 c c c取得不是很精确的时候,收敛性也很好。还有一个变化是将 ( A x k − b ) (\textbf A x^k-b) (Axkb)换为 ( A x k + 1 − b ) (\textbf A x^{k+1}-b) (Axk+1b),这是因为这两步是分开执行的,当算 v k + 1 v^{k+1} vk+1的时候, x k + 1 x^{k+1} xk+1已经算出来了,我们当然可以用更好的 x x x来替换它。其中 c c c一般取1,也可以取成递增序列。

拉格朗日法:我已经有了 k k k时刻的 P \text P P D \text D D的优化变量,根据给定规则去优化。本质上是 P \text P P D \text D D的方法,从 P \text P P D \text D D两个角度同时优化。
增广拉格朗日法:非同步优化,只更新 v k v^k vk,只算对偶最优解,可将 x k + 1 x^{k+1} xk+1带入下式, x k + 1 x^{k+1} xk+1只是副产品。

4、增广拉格朗日法的两条性质以及其收敛性探究

  1. v = v ∗ v=v^* v=v,则 ∀ c > 0 , x ∗ = arg ⁡ min ⁡ x l c ( x , v ∗ ) \forall c>0,x^*=\arg\min\limits_xl_c(x,v^*) c>0,x=argxminlc(x,v)
  2. c → + ∞ c\rightarrow+\infty c+,则 ∀ v , x ∗ = arg ⁡ min ⁡ x l c ( x , v ) \forall v,x^*=\arg\min\limits_xl_c(x,v) v,x=argxminlc(x,v)

第一条性质表明得到 v ∗ v^* v后,可以马上算出 x ∗ x^* x,只要 c > 0 c>0 c>0就可以。第二条就更厉害了,如果你老是解不出 v ∗ v^* v,那就将 c → + ∞ c\rightarrow+\infty c+,一样解的出 x ∗ x^* x,所以这个算法的鲁棒性是很好的。

下面用一个例子来体会一下这两条性质:

例:
min ⁡ 1 2 x 1 2 + 1 2 x 2 2 s.t. x 1 = 1 \begin{aligned} \min&& \frac 1 2 x_1^2+\frac 1 2 x_2^2&\\ \text{s.t.} &&x_1&=1\\ \end{aligned} mins.t.21x12+21x22x1=1
直接用 KKT \text{KKT} KKT条件得到解:
{ x 1 ∗ = 1 x 2 ∗ = 0 v ∗ = − 1 \begin{cases} x_1^*=1\\ x_2^*=0\\ v^*=-1 \end{cases} x1=1x2=0v=1
我们探究一下两条性质,其增广拉格朗日函数为:
l c ( x , v ) = 1 2 x 1 2 + 1 2 x 2 2 + v ( x 1 − 1 ) + c 2 ( x 1 − 1 ) 2 l_c(x,v)= \frac 1 2 x_1^2+\frac 1 2 x_2^2+v(x_1-1)+\frac c 2(x_1-1)^2 lc(x,v)=21x12+21x22+v(x11)+2c(x11)2
性质一:当 v = v ∗ = 1 时 v=v^*=1时 v=v=1,有:
x ∗ = arg ⁡ min ⁡ x l c ( x , v ∗ ) = arg ⁡ min ⁡ x 1 2 x 1 2 + 1 2 x 2 2 + ( x 1 − 1 ) + c 2 ( x 1 − 1 ) 2 ⇒ { x 1 ∗ − 1 + c ( x 1 ∗ − 1 ) = 0 x 2 ∗ = 0 \begin{aligned} &&x^*&=\arg\min\limits_xl_c(x,v^*)\\ &&&=\arg\min\limits_x \frac 1 2 x_1^2+\frac 1 2 x_2^2+(x_1-1)+\frac c 2(x_1-1)^2\\ \Rightarrow&&&\begin{cases} x_1^*-1+c(x_1^*-1)=0\\ x_2^*=0 \end{cases} \end{aligned} x=argxminlc(x,v)=argxmin21x12+21x22+(x11)+2c(x11)2{x11+c(x11)=0x2=0
可以直接解出 x ∗ x^* x
性质二:当 c → + ∞ c\rightarrow+\infty c+ v v v v ∗ v^* v还很远时:
x ∗ = arg ⁡ min ⁡ x l c ( x , v ∗ ) = arg ⁡ min ⁡ x 1 2 x 1 2 + 1 2 x 2 2 + v ( x 1 − 1 ) + c 2 ( x 1 − 1 ) 2 ⇒ { x 1 ∗ = c − v c + 1 x 2 ∗ = 0 \begin{aligned} &&x^*&=\arg\min\limits_xl_c(x,v^*)\\ &&&=\arg\min\limits_x \frac 1 2 x_1^2+\frac 1 2 x_2^2+v(x_1-1)+\frac c 2(x_1-1)^2\\ \Rightarrow&&&\begin{cases} x_1^*=\frac{c-v}{c+1}\\ x_2^*=0 \end{cases} \end{aligned} x=argxminlc(x,v)=argxmin21x12+21x22+v(x11)+2c(x11)2{x1=c+1cvx2=0
分析一下 x 1 ∗ = c − v c + 1 x_1^*=\frac{c-v}{c+1} x1=c+1cv说明什么?即当 v → − 1 时 x 1 → 1 , c → + ∞ 时 x 1 → 1 v\rightarrow-1时x_1\rightarrow1,c\rightarrow+\infty时x_1\rightarrow1 v1x11,c+x11,这就是增广拉格朗日法的两条性质,也可以看出它的鲁棒性非常好。

收敛性探究:
在这道题中,我们可以得到:
x k + 1 = c − v k c + 1 v k + 1 = v k + c ( x k + 1 − 1 ) ⇒ v k + 1 = v k + c ( c − v k c + 1 − 1 ) ⇒ v k + 1 = v k − c c + 1 ( v k + 1 ) 将 v ∗ = − 1 代 入 : v k + 1 = v k − c c + 1 ( v k − v ∗ ) v k + 1 − v ∗ = v k − v ∗ − c c + 1 ( v k − v ∗ ) v k + 1 − v ∗ v k − v ∗ = 1 c + 1 \begin{aligned} &&x^{k+1}&=\frac{c-v^k}{c+1}\\ &&v^{k+1}&=v^k+c(\textbf x^{k+1}-1)\\ \Rightarrow&&v^{k+1}&=v^k+c(\frac{c-v^k}{c+1}-1)\\ \Rightarrow&&v^{k+1}&=v^k-\frac c{c+1}(v^k+1)\\ 将v^*=-1代入:&&v^{k+1}&=v^k-\frac c{c+1}(v^k-v^*)\\ &&v^{k+1}-v^*&=v^k-v^*-\frac c{c+1}(v^k-v^*)\\ &&\frac{v^{k+1}-v^*}{v^k-v^*}&=\frac 1{c+1} \end{aligned} v=1xk+1vk+1vk+1vk+1vk+1vk+1vvkvvk+1v=c+1cvk=vk+c(xk+11)=vk+c(c+1cvk1)=vkc+1c(vk+1)=vkc+1c(vkv)=vkvc+1c(vkv)=c+11
是线性收敛的。

二、交替方向乘子法(ADMM)

对于这么一个优化问题:
min ⁡ x f ( x ) + g ( x ) \min_xf(x)+g(x) xminf(x)+g(x)
假设它的性质是当 f ( x ) , g ( x ) f(x),g(x) f(x),g(x)分开优化很简单,但是合起来优化很难时,我们就可以将它们拆开优化,上面问题等价于:
min ⁡ f ( x ) + g ( z ) s.t. x = z \begin{aligned} \min&& f(x)+g(z)&\\ \text{s.t.} &&x&=z\\ \end{aligned} mins.t.f(x)+g(z)x=z
用增广拉格朗日法进行优化:
⇒ l c ( x , z , v ) = f ( x ) + g ( z ) + v T ( x − z ) + c 2 ∥ x − z ∥ 2 2 ⇒ { 1. { x k + 1 , z k + 1 } = arg ⁡ min ⁡ x , z f ( x ) + g ( z ) + v T ( x − z ) + c 2 ∥ x − z ∥ 2 2 2. v k + 1 = v k + c ( x k + 1 − z k + 1 ) \begin{aligned} \Rightarrow&l_c(x,z,v)=f(x)+g(z)+v^T(x-z)+\frac c 2 \|x-z\|_2^2\\ \Rightarrow&\begin{cases} 1.\lbrace x^{k+1},z^{k+1}\rbrace=\arg\min\limits_{x,z}f(x)+g(z)+v^T(x-z)+\frac c 2 \|x-z\|^2_2\\ 2.v^{k+1}=v^k+c(x^{k+1}-z^{k+1}) \end{cases} \end{aligned} lc(x,z,v)=f(x)+g(z)+vT(xz)+2cxz22{1.{xk+1,zk+1}=argx,zminf(x)+g(z)+vT(xz)+2cxz222.vk+1=vk+c(xk+1zk+1)
在第一步的时候,我们固定 x , z x,z x,z中的一个,使用坐标轮换法迭代优化另一个。即将 k + 1 k+1 k+1步分为 t t t次,迭代中迭代,有点像二维数组的遍历,这样第一步就可以写为:
1a. x k + 1 ∣ t + 1 ∣ z = z k + 1 ∣ t = arg ⁡ min ⁡ x f ( x ) + c 2 ∥ x − z k + 1 ∣ t + v k c ∥ 2 2 1b. z k + 1 ∣ t + 1 ∣ x = x k + 1 ∣ t = arg ⁡ min ⁡ z g ( z ) + c 2 ∥ z − x k + 1 ∣ t + 1 + v k c ∥ 2 2 \begin{aligned} &\text{1a.}x^{k+1|t+1}\Big|_{z=z^{k+1|t}}=\arg\min_xf(x)+\frac c 2\|x-z^{k+1|t}+\frac{v^k}c\|_2^2\\ &\text{1b.}z^{k+1|t+1}\Big|_{x=x^{k+1|t}}=\arg\min_zg(z)+\frac c 2\|z-x^{k+1|t+1}+\frac{v^k}c\|_2^2\\ \end{aligned} 1a.xk+1t+1z=zk+1t=argxminf(x)+2cxzk+1t+cvk221b.zk+1t+1x=xk+1t=argzming(z)+2czxk+1t+1+cvk22
但是这个二重循环复杂度实在太高,一旦迭代次数过多收敛会非常慢,更别说这里只是两个函数求和,那我要是多个函数求和怎么办?于是就有了交替方向乘子法(ADMM),它采用分布式的计算来解决了这个问题。

假设我们现在有一个中心计算机和它所通信的一个计算机群,我们考虑这么一个优化问题:
min ⁡ ∑ i = 1 n f i ( x ) \begin{aligned} \min&& \sum_{i=1}^n f_i(x)&\\ \end{aligned} mini=1nfi(x)
类似于上面的转换,我们构造一下它的等价问题:
min ⁡ ∑ i = 1 n f i ( x i ) s.t. x i = z i = 1 , ⋯   , n \begin{aligned} \min&& \sum_{i=1}^n f_i(x_i)&\\ \text{s.t.} &&x_i&=z\qquad i=1,\cdots ,n\\ \end{aligned} mins.t.i=1nfi(xi)xi=zi=1,,n
其增广拉格朗日函数:
l c = ∑ i = 1 n f i ( x ) + ∑ i = 1 n v i T ( x i − z ) + c 2 ∑ i = 1 n ∥ x i − z ∥ 2 2 l_c=\sum_{i=1}^nf_i(x_)+\sum_{i=1}^nv_i^T(x_i-z)+\frac c 2 \sum_{i=1}^n\|x_i-z\|_2^2 lc=i=1nfi(x)+i=1nviT(xiz)+2ci=1nxiz22
接下来我们按照上面的 1a,1b,2 \text{1a,1b,2} 1a,1b,2写出 1,2,3 \text{1,2,3} 1,2,3三步,同时对每一步进行一些等价变换,就得到了ADMM。
1. { x i k + 1 } = arg ⁡ min ⁡ { x i } ∑ i = 1 n f i ( x i ) + c 2 ∑ i = 1 n ∥ x i − z k + v i k c ∥ 2 2 ⇔ x i k + 1 = arg ⁡ min ⁡ x i ∑ i = 1 n f i ( x i ) + c 2 ∑ i = 1 n ∥ x i − z k + v i k c ∥ 2 2 2. z k + 1 = arg ⁡ min ⁡ c 2 ∑ i = 1 n ∥ z − x i k + 1 − v i c ∥ 2 2 ⇔ z k + 1 = 1 n ∑ i = 1 n ( x i k + 1 + v i c ) 3. v i k + 1 = v k + c ( x i k + 1 − z k + 1 ) \begin{aligned} \text{1.}&&\lbrace x_i^{k+1}\rbrace&=\arg\min_{\lbrace x_i\rbrace}\sum_{i=1}^nf_i(x_i)+\frac c 2\sum_{i=1}^n\|x_i-z^k+\frac{v_i^k} c\|_2^2\\ \Leftrightarrow&& x_i^{k+1}&=\arg\min_{ x_i}\sum_{i=1}^nf_i(x_i)+\frac c 2\sum_{i=1}^n\|x_i-z^k+\frac{v_i^k} c\|_2^2\\ \text{2.}&& z^{k+1}&=\arg\min\frac c 2\sum_{i=1}^n\|z-x_i^{k+1}-\frac{v_i}{c}\|_2^2\\ \Leftrightarrow&& z^{k+1}&=\frac 1 n \sum_{i=1}^n(x_i^{k+1}+\frac {v_i}c)\\ \text{3.}&&v_i^{k+1}&=v^k+c(x_i^{k+1}-z^{k+1}) \end{aligned} 1.2.3.{xik+1}xik+1zk+1zk+1vik+1=arg{xi}mini=1nfi(xi)+2ci=1nxizk+cvik22=argximini=1nfi(xi)+2ci=1nxizk+cvik22=argmin2ci=1nzxik+1cvi22=n1i=1n(xik+1+cvi)=vk+c(xik+1zk+1)
第一步的转换是将求和转换为分布,第二步就是直接解出来了。

梳理一下,我们得到ADMM为:
对于问题:
min ⁡ ∑ i = 1 n f i ( x i ) s.t. x i = z i = 1 , ⋯   , n \begin{aligned} \min&& \sum_{i=1}^n f_i(x_i)&\\ \text{s.t.} &&x_i&=z\qquad i=1,\cdots ,n\\ \end{aligned} mins.t.i=1nfi(xi)xi=zi=1,,n
可以按照如下方法求解:
1. x i k + 1 = arg ⁡ min ⁡ x i ∑ i = 1 n f i ( x i ) + c 2 ∑ i = 1 n ∥ x i − z k + v i k c ∥ 2 2 2. z k + 1 = 1 n ∑ i = 1 n ( x i k + 1 + v i c ) 3. v i k + 1 = v k + c ( x i k + 1 − z k + 1 ) \begin{aligned} \text{1.}&& x_i^{k+1}&=\arg\min_{ x_i}\sum_{i=1}^nf_i(x_i)+\frac c 2\sum_{i=1}^n\|x_i-z^k+\frac{v_i^k} c\|_2^2\\ \text{2.}&& z^{k+1}&=\frac 1 n \sum_{i=1}^n(x_i^{k+1}+\frac {v_i}c)\\ \text{3.}&&v_i^{k+1}&=v^k+c(x_i^{k+1}-z^{k+1}) \end{aligned} 1.2.3.xik+1zk+1vik+1=argximini=1nfi(xi)+2ci=1nxizk+cvik22=n1i=1n(xik+1+cvi)=vk+c(xik+1zk+1)
其中 z z z是中心计算机要算的东西,计算机群更新 x , v x,v x,v。在每一步,中心计算机得到 x , v x,v x,v后计算 z z z然后将 z z z发给计算机群;计算机群得到 z z z后计算 x , v x,v x,v并提交 x , v x,v x,v给中心计算机,如此循环往复,最终得到解。

个人思考

ADMM是集所有精华于一身的算法,无论是凸集凸函数对偶性拉格朗日函数的定义,还是梯度下降法最速下降法(坐标轮换法)的算法,都在其中有所体现。细细缕来,感觉就像搭积木一样,一层一层的搭。之前各种方法有着这样那样的性质,这样那样的缺点,通过取长补短提出一种新的方法,解决新的问题,很有意思。

纸质笔记

凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)_第1张图片
凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)_第2张图片
凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)_第3张图片
凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)_第4张图片

你可能感兴趣的:(#,凸优化)