ADMM结合了对偶更新和拉格朗日乘子的优缺点。
对偶问题
以凸等式约束优化问题为例:
目标函数:
min
f
(
x
)
\min{f(x)}
minf(x)
s
u
b
j
e
c
t
subject
subject
t
o
to
to
A
x
=
b
Ax=b
Ax=b
那么它的拉格朗日函数为:
L
(
x
,
λ
)
=
f
(
x
)
+
λ
(
A
x
−
b
)
L(x, \lambda)=f(x)+\lambda(Ax-b)
L(x,λ)=f(x)+λ(Ax−b)
其对偶式为:
g
(
λ
)
=
i
n
f
x
L
(
x
,
λ
)
g(\lambda) = inf_x{L(x, \lambda)}
g(λ)=infxL(x,λ) ,其中
i
n
f
x
inf_x
infx指的是给定一个
x
x
x,求
g
(
λ
)
g(\lambda)
g(λ)函数的上界。既然给定了
x
x
x,就不再是
x
x
x的函数了,相对于
λ
\lambda
λ就是常数,这就是为什么是求
g
(
λ
)
g(\lambda)
g(λ)的函数。所以对偶问题为:
max
g
(
λ
)
\max{g(\lambda)}
maxg(λ)
对偶上升
在前面我们讲的最速梯度下降和牛顿法都是通过梯度下降来求最优解。为什么?因为那是求解凸函数。看到这里的“上升”,你能想到什么?对!解决的是凹函数。上面的对偶问题
max
g
(
λ
)
\max{g(\lambda)}
maxg(λ)是一个凹函数。
因此,迭代更新的过程为:
λ
k
+
1
=
λ
k
+
α
k
Δ
g
(
λ
k
)
\lambda^{k+1}=\lambda^{k}+\alpha^{k}\Delta{g(\lambda^k)}
λk+1=λk+αkΔg(λk),其中
Δ
g
(
y
k
)
=
A
x
~
−
b
\Delta{g(y^k)}=A\tilde{x}-b
Δg(yk)=Ax~−b where
x
~
=
arg min
x
L
(
x
,
λ
k
)
\tilde{x}=\underset{x}{\argmin}{L(x, \lambda^{k})}
x~=xargminL(x,λk)
首先,优化主问题:
x
k
+
1
=
arg min
x
L
(
x
,
λ
k
)
x^{k+1}=\underset{x}{\argmin}{L(x, \lambda^{k})}
xk+1=xargminL(x,λk)
然后对偶更新:
λ
k
+
1
=
λ
k
+
α
k
(
A
x
k
+
1
−
b
)
\lambda^{k+1}=\lambda^{k}+\alpha^{k}({Ax^{k+1}-b})
λk+1=λk+αk(Axk+1−b)
对偶分解
再依次把目标函数拿出来:
min
f
(
x
)
\min{f(x)}
minf(x)
s
u
b
j
e
c
t
subject
subject
t
o
to
to
A
x
=
b
Ax=b
Ax=b
实际上,
x
x
x很有可能是多变量,因此我们做一次推广,即
x
=
(
x
1
,
x
2
,
.
.
.
.
.
.
x
n
)
x=(x_1,x_2,......x_n)
x=(x1,x2,......xn)。当然
x
i
x_i
xi也可以是向量或矩阵。
对于这么一个求多变量的函数极值问题,我们希望可以将其分解不同单变量的函数叠加,就像谐波分解一样。因此,假设 f ( x ) f(x) f(x)可分解: f ( x ) = f 1 ( x 1 ) + f 2 ( x 2 ) + . . . . . . + f n ( x n ) f(x)=f_1(x_1)+f_2(x_2)+......+f_n(x_n) f(x)=f1(x1)+f2(x2)+......+fn(xn)
那么,我们将式子重新带入拉格朗日函数:
L
(
x
,
λ
)
=
f
1
(
x
1
)
+
λ
1
(
A
1
x
1
−
b
)
+
f
2
(
x
2
)
+
λ
2
(
A
2
x
2
−
b
)
+
.
.
.
.
.
.
+
f
n
(
x
n
)
+
λ
n
(
A
n
x
n
−
b
)
L(x, \lambda)=f_1(x_1)+\lambda_1(A_1x_1-b)+f_2(x_2)+\lambda_2(A_2x_2-b)+......+f_n(x_n)+\lambda_n(A_nx_n-b)
L(x,λ)=f1(x1)+λ1(A1x1−b)+f2(x2)+λ2(A2x2−b)+......+fn(xn)+λn(Anxn−b)
因此,
L
(
x
i
,
λ
i
)
=
f
i
(
x
i
)
+
λ
T
A
i
x
i
L(x_i, \lambda_i)=f_i(x_i)+\lambda^{T}A_ix_i
L(xi,λi)=fi(xi)+λTAixi
从而,求主问题,从上面的单变量变成了:
x
i
k
+
1
=
arg min
x
i
L
(
x
i
,
λ
k
)
x^{k+1}_i=\underset{x_i}{\argmin}{L(x_i, \lambda^{k})}
xik+1=xiargminL(xi,λk), 这不就是上面单变量的对偶上升法的主问题嘛!由于x是相互独立的,因此就可以并行计算。
那么,函数可分解可以将原问题分成许多子问题。那么能够这样做有什么限制吗?那就是约束条件一定要是线性的(这里可以联想信号与系统中判断系统是否是线性)。我们知道增广拉格朗日函数是在拉格朗日函数基础上加了一个二次项,二次项是增加凸性,但破坏了拉格朗日函数的可分解特性,原因就在于此,对两者的对比可以查看此文章。
那么,优化步骤变成了(对比对偶上升):
原问题(子问题):
x
i
k
+
1
=
arg min
x
i
L
i
(
x
i
,
λ
k
)
x^{k+1}_i=\underset{x_i}{\argmin}{L_i(x_i, \lambda^{k})}
xik+1=xiargminLi(xi,λk),
i
=
1
,
.
.
.
.
.
.
.
n
i = 1,.......n
i=1,.......n
对偶更新:
λ
k
+
1
=
λ
k
+
α
k
(
∑
i
=
1
n
A
i
x
i
k
+
1
−
b
)
\lambda^{k+1}=\lambda^{k}+\alpha^{k}({\sum_{i=1}^{n}A_ix^{k+1}_i-b})
λk+1=λk+αk(∑i=1nAixik+1−b)
总而言之,对偶分解是在对耦上升基础上更进一步,将主问题分解成子问题求解。对于每个子问题,其实就是对偶上升求解的。
这种分解方式可以使得并行计算,从而加速收敛,但是对偶上升的缺点并没有得到解决:对偶更新的时候只是用了一阶信息,而一阶鲁棒性很差,从最速梯度下降法我们知道,这种最速梯度上升法同样很依赖学习率 α k \alpha^k αk,而且越到收敛点梯度 ∑ i = 1 n A i x i k + 1 − b {\sum_{i=1}^{n}A_ix^{k+1}_i-b} ∑i=1nAixik+1−b越接近0,因此更新得越来越慢(可参见这篇文章)
怎么解决?就是在原来的拉格朗日函数的基础上加上一个二次约束项: L p ( x , λ ) = f ( x ) + λ T ( A x − b ) + ρ 2 ∥ A x − b ∥ 2 2 L_p(x, \lambda)=f(x)+\lambda^{T}(Ax-b)+\frac{\rho}{2}\left \| Ax-b\right \|^2_2 Lp(x,λ)=f(x)+λT(Ax−b)+2ρ∥Ax−b∥22,这可以提高收敛的鲁棒性。
引入二次项破坏了拉格朗日乘子可分解性,无法使用对偶分解。而要使用对偶分解又只能是线性约束,而这个问题就可以使用ADMM来解决。我在另一篇博文已经有过分享!
这篇博文就当一个先导内容的介绍吧!