我们前面说过,拉格朗日法在实际中应用不大。为什么呢?因为 α \alpha α的取值很难取,这就导致拉格朗日法鲁棒性很低,收敛很慢,解很不稳定。于是就有了今天的增广拉格朗日法和ADMM。
一句话总结:在拉格朗日法的基础上,将拉格朗日函数替换为增广拉格朗日函数。
有问题形如:
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)Ax−b=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(Ax−b)+2c∥Ax−b∥22
增广拉格朗日法:
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+1−b)
有问题形如:
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)Ax−b=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)+2c∥Ax−b∥22Ax−b=0
即证:
{ x 1 ∗ = x 2 ∗ v 1 ∗ = v 2 ∗ \begin{cases} x_1^*=x_2^*\\ v_1^*=v_2^* \end{cases} {x1∗=x2∗v1∗=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(Ax1∗−b)}=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(Ax2∗−b)}+cAT(Ax2∗−b)=0=0
因为 ( A x 2 ∗ − b ) = 0 (\textbf A x^*_2-b)=0 (Ax2∗−b)=0,比较上下两式,得:
{ x 1 ∗ = x 2 ∗ v 1 ∗ = v 2 ∗ \begin{cases} x_1^*=x_2^*\\ v_1^*=v_2^* \end{cases} {x1∗=x2∗v1∗=v2∗
证毕。
有问题形如:
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)Ax−b=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(Axk−b)
增广拉格朗日法:
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=argxmin∇xlc(x,vk)=vk+c(Axk+1−b)
可以看到,增广拉格朗日法去掉了 α k \alpha^k αk,之后在性质分析中我们会讲到,在 c c c取得不是很精确的时候,收敛性也很好。还有一个变化是将 ( A x k − b ) (\textbf A x^k-b) (Axk−b)换为 ( A x k + 1 − b ) (\textbf A x^{k+1}-b) (Axk+1−b),这是因为这两步是分开执行的,当算 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只是副产品。
第一条性质表明得到 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(x1−1)+2c(x1−1)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+(x1−1)+2c(x1−1)2{x1∗−1+c(x1∗−1)=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(x1−1)+2c(x1−1)2{x1∗=c+1c−vx2∗=0
分析一下 x 1 ∗ = c − v c + 1 x_1^*=\frac{c-v}{c+1} x1∗=c+1c−v说明什么?即当 v → − 1 时 x 1 → 1 , c → + ∞ 时 x 1 → 1 v\rightarrow-1时x_1\rightarrow1,c\rightarrow+\infty时x_1\rightarrow1 v→−1时x1→1,c→+∞时x1→1,这就是增广拉格朗日法的两条性质,也可以看出它的鲁棒性非常好。
收敛性探究:
在这道题中,我们可以得到:
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∗=−1代入:xk+1vk+1vk+1vk+1vk+1vk+1−v∗vk−v∗vk+1−v∗=c+1c−vk=vk+c(xk+1−1)=vk+c(c+1c−vk−1)=vk−c+1c(vk+1)=vk−c+1c(vk−v∗)=vk−v∗−c+1c(vk−v∗)=c+11
是线性收敛的。
对于这么一个优化问题:
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(x−z)+2c∥x−z∥22{1.{xk+1,zk+1}=argx,zminf(x)+g(z)+vT(x−z)+2c∥x−z∥222.vk+1=vk+c(xk+1−zk+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+1∣t+1∣∣∣z=zk+1∣t=argxminf(x)+2c∥x−zk+1∣t+cvk∥221b.zk+1∣t+1∣∣∣x=xk+1∣t=argzming(z)+2c∥z−xk+1∣t+1+cvk∥22
但是这个二重循环复杂度实在太高,一旦迭代次数过多收敛会非常慢,更别说这里只是两个函数求和,那我要是多个函数求和怎么办?于是就有了交替方向乘子法(ADMM),它采用分布式的计算来解决了这个问题。
假设我们现在有一个中心计算机和它所通信的一个计算机群,我们考虑这么一个优化问题:
min ∑ i = 1 n f i ( x ) \begin{aligned} \min&& \sum_{i=1}^n f_i(x)&\\ \end{aligned} mini=1∑nfi(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=1∑nfi(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=1∑nfi(x)+i=1∑nviT(xi−z)+2ci=1∑n∥xi−z∥22
接下来我们按照上面的 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=1∑nfi(xi)+2ci=1∑n∥xi−zk+cvik∥22=argximini=1∑nfi(xi)+2ci=1∑n∥xi−zk+cvik∥22=argmin2ci=1∑n∥z−xik+1−cvi∥22=n1i=1∑n(xik+1+cvi)=vk+c(xik+1−zk+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=1∑nfi(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=1∑nfi(xi)+2ci=1∑n∥xi−zk+cvik∥22=n1i=1∑n(xik+1+cvi)=vk+c(xik+1−zk+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是集所有精华于一身的算法,无论是凸集凸函数对偶性拉格朗日函数的定义,还是梯度下降法最速下降法(坐标轮换法)的算法,都在其中有所体现。细细缕来,感觉就像搭积木一样,一层一层的搭。之前各种方法有着这样那样的性质,这样那样的缺点,通过取长补短提出一种新的方法,解决新的问题,很有意思。