凸优化学习
我们前面说过,拉格朗日法在实际中应用不大。为什么呢?因为 α \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)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)
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)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∗
证毕。
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)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只是副产品。
4、增广拉格朗日法的两条性质以及其收敛性探究
- 若 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∗)。
- 若 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(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
是线性收敛的。
二、交替方向乘子法(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(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是集所有精华于一身的算法,无论是凸集凸函数对偶性拉格朗日函数的定义,还是梯度下降法最速下降法(坐标轮换法)的算法,都在其中有所体现。细细缕来,感觉就像搭积木一样,一层一层的搭。之前各种方法有着这样那样的性质,这样那样的缺点,通过取长补短提出一种新的方法,解决新的问题,很有意思。
纸质笔记