对偶上升法
对于一个等式约束的凸优化问题如下:
minimize
f
(
x
)
subject to
A
x
=
b
,
\begin{array}{ll} \operatorname{minimize} & f(x) \\ \text { subject to } & A x=b, \end{array}
minimize subject to f(x)Ax=b,
其中,
f
(
x
)
f(x)
f(x)为凸函数。
对偶上升法是一种行之有效的方法。 首先,我们将限制条件通过拉格朗日乘子写入目标中, 得到拉格朗日函数为:
L
(
x
,
y
)
=
f
(
x
)
+
y
T
(
A
x
−
b
)
L(x, y)=f(x)+y^{T}(A x-b)
L(x,y)=f(x)+yT(Ax−b)
那么,其对偶函数为:
g
(
y
)
=
inf
x
L
(
x
,
y
)
g(y)=\inf _{x} L(x, y)
g(y)=xinfL(x,y)
相应的对偶问题为:
maximize
g
(
y
)
(1)
\text { maximize } g(y) \tag{1}
maximize g(y)(1)
若强对偶性成立, 则最优解
x
⋆
x^\star
x⋆由下式给出:
x
⋆
=
argmin
x
L
(
x
,
y
⋆
)
,
(2)
x^{\star}=\underset{x}{\operatorname{argmin}} L\left(x, y^{\star}\right), \tag{2}
x⋆=xargminL(x,y⋆),(2)
其中
y
⋆
y^\star
y⋆为(1)的最优解。
接下来,我们考虑如何求解单变量对偶问题(1), 因为有了(1)的解我们就可以由(2)得到原问题的最优解。
而对偶上升法的算法流程如下:
x k + 1 : = argmin x L ( x , y k ) y k + 1 : = y k + α k ( A x k + 1 − b ) , \begin{aligned} &x^{k+1}:=\underset{x}{\operatorname{argmin}} L\left(x, y^{k}\right) \\ &y^{k+1}:=y^{k}+\alpha^{k}\left(A x^{k+1}-b\right), \end{aligned} xk+1:=xargminL(x,yk)yk+1:=yk+αk(Axk+1−b),
流程很简单, 也就是说,我们可以通过一种梯度法的方式迭代求解 y y y。 但是,为什么可以这样呢?
对偶上升法的原理
其实对偶上升法的思路就如一开始所说, 寻找一个 y y y最大化 g ( y ) g(y) g(y), 那么给定初始点 y 0 y_0 y0时, 一种常见的做法就是梯度下降法(这里对应的是梯度上升法),即求取 ∇ g ( y 0 ) \nabla g(y_0) ∇g(y0), 将 y 1 y_1 y1更新为 y 0 + α ∇ g ( y 0 ) y_0 + \alpha\nabla g(y_0) y0+α∇g(y0)。
就着这个思路,我们事实上就是要求取
∇
g
(
y
)
\nabla g(y)
∇g(y)。 注意到,无论
f
(
x
)
f(x)
f(x)是否凸, 对偶函数
g
(
y
)
g(y)
g(y)一定是凹函数 (一族仿射函数的逐点下确界)。 因此, 根据凹函数的一阶条件,我们有:
g
(
z
)
≤
g
(
y
)
+
∇
g
(
y
)
T
(
z
−
y
)
∀
z
(3)
g(z) \leq g(y)+ \nabla g(y)^T(z-y) \quad \forall z \tag{3}
g(z)≤g(y)+∇g(y)T(z−y)∀z(3)
注意到, 根据
g
g
g的定义,
g
(
z
)
g(z)
g(z)可写为:
g
(
z
)
=
inf
x
(
f
(
x
)
+
z
T
(
A
x
−
b
)
)
=
inf
x
(
f
(
x
)
+
y
T
(
A
x
−
b
)
+
(
z
−
y
)
T
(
A
x
−
b
)
)
g(z) =\inf_x(f(x)+z^{T}(A x-b)) =\inf_x(f(x)+y^{T}(A x-b)+(z-y)^{T}(A x-b))
g(z)=xinf(f(x)+zT(Ax−b))=xinf(f(x)+yT(Ax−b)+(z−y)T(Ax−b))
令
x
+
∈
argmin
L
(
x
,
y
)
x^{+} \in \operatorname{argmin} L(x, y)
x+∈argminL(x,y), 我们有:
g
(
z
)
=
inf
x
(
f
(
x
)
+
y
T
(
A
x
−
b
)
+
(
z
−
y
)
T
(
A
x
−
b
)
)
≤
(
f
(
x
+
)
+
y
T
(
A
x
+
−
b
)
+
(
z
−
y
)
T
(
A
x
+
−
b
)
)
=
g
(
y
)
+
(
A
x
+
−
b
)
T
(
z
−
y
)
(4)
g(z) = \inf_x(f(x)+y^{T}(A x-b)+(z-y)^{T}(A x-b)) \le (f(x^+)+y^{T}(A x^+-b)+(z-y)^{T}(A x^+-b))\\=g(y) + (A x^+-b)^T(z-y) \tag{4}
g(z)=xinf(f(x)+yT(Ax−b)+(z−y)T(Ax−b))≤(f(x+)+yT(Ax+−b)+(z−y)T(Ax+−b))=g(y)+(Ax+−b)T(z−y)(4)
第一个不等式是下确界的性质, 第二个等式是
g
g
g的定义。 这时我们注意到, 对比(3)和(4), 我们发现
∇
g
(
y
)
=
A
x
+
−
b
\nabla g(y) = A x^+-b
∇g(y)=Ax+−b.
现在,回过头来看对偶上升法的流程, 第一步在求 x + x^+ x+, 第二步就是根据 ∇ g ( y ) \nabla g(y) ∇g(y) 更新 y y y。 因此,对偶上升法的收敛性是明确的, 因为这本质是就是一种梯度上升法。
可以一提的是, 如果 arg min x L ( x , y ) \arg\min_x L(x,y) argminxL(x,y) 在给定 y y y的情况下, 可以很容易得到 x x x的闭式解 x = ϕ ( y ) x=\phi(y) x=ϕ(y)的话, 也可以通过把 ϕ ( y ) \phi(y) ϕ(y)代入 g ( y ) g(y) g(y)中, 这样就无需对偶上升,只需对 y y y一次性迭代求解即可。
次梯度
我们刚忽略了一种情况, 那就是如果 f ( x ) f(x) f(x)并不是严格凸的时候, 会存在 g ( y ) g(y) g(y)不可导的情况,即 ∇ g ( y ) \nabla g(y) ∇g(y)不存在。 此时,则需要引出次梯度的概念, 使得对偶上升法仍可以工作。