前面的章节要么从原始问题出发,要么从对偶问题出发,通过求解近似点或者一个子优化问题进行迭代,而且推导过程中我们发现根据问题的参数特征,比如矩阵 A 是瘦高型的还是矮胖型的,采用对偶和原始问题的复杂度会不一样,可以选择一个更简单的。而这一节,我们将要从原始对偶问题出发来优化,什么是原始对偶问题呢?就是原始优化变量和对偶优化变量(原始函数和共轭函数)混合在一块,看下面的原理就知道了。
1. 原始对偶问题
现在考虑原始优化问题,其中 f,g 为闭凸函数
minf(x)+g(Ax)
这个问题我们前面遇到好多次了,一般都是取 y=Ax 加一个约束条件然后计算拉格朗日函数(自己拿小本本写一下),再求解 KKT 条件对吧。好,让我们列出来 KKT 条件:
- 原始可行性:x∈domf,Ax=y∈domg
-
x,z 是拉格朗日函数的最小值点,因此 −ATz∈∂f(x),z∈∂g(y)
其中 z∈∂g(y)⟺Ax=y∈∂g⋆(z)。也就是说,要想求解 KKT 条件,我们需要的实际上是求解下面一个“方程”
0∈[0−AAT0][xz]+[∂f(x)∂g⋆(z)]
Remarks:这个式子可重要啦,后面还会用到!而且他从集合的角度揭示了我们求解最优值问题的本质,那就是找一个包含关系。
比如上面的这个式子我们用一个算子来表示为 T(x,z),我们求解最优值实际上要就是找满足 0∈T(x,z) 的解 (x⋆,z⋆)。而对一个简单的优化问题 minf(x),我们实际上就是在找满足 0∈∂f(x) 的 x⋆,这个时候我们可以把次梯度看作是一个算子。
在这一章的后面几个小节,我们将从算子的角度重新来看待优化问题,看完之后可以再回到这里细细品味。
好我们先把这个东西放一放,再来看看另一个跟拉格朗日函数有关的函数
h(x,z)=yinfL(x,y,z)=f(x)−g⋆(z)+zTAx
如果计算 0∈∂h(x,z) 是不是就是上面那个方程?!也就是说上面很重要的那个方程实际上就是在求解 h(x,z) 的鞍点!很容易理解,因为 KKT 条件本质上就是在求拉格朗日函数的鞍点(当然,如果存在不等式约束就不一定是鞍点了)。大家注意,你看这个 h 他又长又宽,这个 h 同时包含了原始变量 x 和对偶变量 z,同时还既有原始函数 f 又有对偶函数 g⋆,所以我们叫他原始对偶优化问题,h 也是部分拉格朗日函数(partial Lagrangian)。
2. PDHG
前面说了我们要求解的问题是
0∈[0−AAT0][xz]+[∂f(x)∂g⋆(z)]
**PDHG(Primal-dual hybrid gradient method)**的迭代格式是这样的
xk+1=proxτf(xk−τATzk)zk+1=proxσg∗(zk+σA(2xk+1−xk))
步长需要满足 στ∥A∥22≤1。
是不是看起来跟 DR 方法很像呢?事实上他们两个是等价的,后面会证明。回忆 ADMM,我们每次需要求解的优化问题是
xk+1=argxminf(x)+2t∥Ax−yk+tzk∥2
要求解这个优化问题,我们往往会得到一个线性方程,还需要计算 (ATA)−1,这就很麻烦了。但是观察 PDHG 的迭代格式,我们只需要求解 f,g⋆ 的 prox 算子,我们只需要求解 A,AT 之间的乘法而不需要求逆了,这就方便很多了。
看上面这个例子,我们前面说过 ADMM 等价于 dual DR,不过这个例子里边 PDHG 是最慢的。
下面我们就来证明一下如何从 PDHG 导出 DR 方法。
对于优化问题 minf(x)+g(x),实际上相当于 minf(x)+g(Ax),A=I,另外我们再取 PDHG 中的 σ=τ=1,那么就可以得到
xk+1=proxf(xk−zk)zk+1=proxg∗(zk+2xk+1−xk)
这实际上就是 DR Splitting 那一节讲的原始对偶形式。
另外也可以从 DR 方法导出 PDHG。我们可以将原问题 minf(x)+g(Ax) 改写为
minimizesubject tof(x)+g(Ax+By)y=0
这里边我们可以选择 B 使 AAT+BBT=(1/α)I,其中 1/α≥∥A∥22。为什么这么选呢?令
g~(x,y)=g(Ax+By)=g(A~(xy))
那么就有 A~A~T=(1/α)I,而前面讲 prox 算子的时候我们讲了一个性质,满足这个条件的时候 proxg~ 可以用 proxg 来表示。
复习:prox 算子的性质
f(x)=g(Ax+b),对于一般的 A 并不能得到比较好的性质,但如果 AAT=(1/α)I,则有
proxf(x)=(I−αATA)x+αAT(proxα−1g(Ax+b)−b)=x−αAT(Ax+b−proxα−1g(Ax+b))
我们还可以取 f~(x,y)=f(x)+δ0(y),那么优化问题就变成了 minf~(x,y)+g~(x,y),应用 DR 方法迭代格式为
[xk+1yk+1]=proxτf~([xk−pkyk−qk])[pk+1qk+1]=prox(τg~)∗([pk+2xk+1−xkqk+2yk+1−yk])
我们需要计算 proxf~ 和 proxg~
proxτf~(x,y)=[proxτf(x)0]proxτg~(x,y)=[xy]−α[ATBT](Ax+By−prox(τ/α)g(Ax+By)=[xy]−τ[ATBT]proxσg⋆(σ(Ax+By))=[xy]−prox(τg~)⋆(x,y)
其中 σ=α/τ。代入到 DR 方法的迭代方程
[xk+1yk+1]=[proxτf(xk−pk)0][pk+1qk+1]=τ[ATBT]proxσg∗(σ[AB][pk+2xk+1−xkqk+2yk+1−yk])
根据第二个式子应该有 [pkqk]∈ range [ATBT],因此存在 zk 满足 [pk+1qk+1]=τ[ATBT]zk。同时因为 AAT+BBT=(1/α)I,所以能找到唯一的 zk 同时满足 zk=σ(Apk+Bqk)。那么把 zk 代入到上面的迭代方程,同时消掉 yk=0,就可以得到
xk+1=proxτf(xk−τATzk)zk+1=proxσg∗(zk+σA(2xk+1−xk))
这就是 PDHG 算法,其中 στ=α≤1/∥A∥2。
当然,我们还可以对 PDHG 算法进行改进,比如:
PDHG withover relaxation:ρk∈(0,2)
xˉk+1zˉk+1[xk+1zk+1]=proxτf(xk−τATzk)=proxσg∗(zk+σA(2xˉk+1−xk))=[xkzk]+ρk[xˉk+1−xkzˉk+1−zk]
其收敛性与 DR 方法相同。
PDHG with acceleration:
xk+1=proxτkf(xk−τkATzk)zk+1=proxσkg∗(zk+σkA((1+θk)xk+1−θkxk))
对于强凸函数 f,以及适当的选择 σk,τk,θk,收敛速度可以达到 1/k2。
3. 单调算子
单调算子(monotone operator)我们在讲次梯度的时候提到过,这次我们从算子的角度理解一下 PDHG 方法。
3.1 集值算子
集值算子(Multivalued/set-valued operator),就是说映射得到的不是单个的值,而是一个集合。比如算子 F 把向量 x∈Rn 映射到集合 F(x)⊆Rn。有两个定义
- 定义域 domF={x∈Rn∣F(x)=∅}
- 图 gr(F)={(x,y)∈Rn×Rn∣x∈domF,y∈F(x)}
对算子放缩、求逆等操作都可以表示为对“图”的线性变换。
求逆:F−1(x)={y∣x∈F(y)}
gr(F−1)=[0II0]gr(F)
放缩:(λF)(x)=λF(x) and (Fλ)(x)=F(λx)
gr(λF)=[I00λI]gr(F),gr(Fλ)=[(1/λ)I00I]gr(F)
相加:(I+λF)(x)={x+λy∣y∈F(x)}
gr(I+λF)=[II0λI]gr(F)
注意 (I+λF) 这个形式很特别,如果我们取 F(x)=∂f(x),那么 (I+λF)−1 实际上就是 prox 算子(λ>0),不过我们给他取了另一个名字 Resolvent,y∈(I+λF)−1(x)⟺x−y∈∂f(y),用图来表示就是
gr((I+λF)−1)=[IIλI0]gr(F)
例子 1:(I+λ∂f(x))−1=proxλf(x)
例子 2:F(x)=Ax+b,(I+λF)−1(x)=(I+λA)−1(x−λb),后面这个求逆完全就是矩阵求逆。
3.2 单调算子
定义:F 是单调算子,若
(y−y^)T(x−x^)≥0 for all x,x^∈domF,y∈F(x),y^∈F(x^)
如果用图表示,就应该有
[x−x^y−y^]T[0II0][x−x^y−y^]≥0 for all (x,y),(x^,y^)∈gr(F)(★)
上面这个式子很重要!!!后面会多次用到。
例子:我们需要用到的单调算子有:
- 凸函数次梯度 ∂f(x)
- 仿射变换 F(x)=Cx+d,并且需要满足 C+CT⪰0
- 他们的组合,比如
F(x,z)=[0−AAT0][xz]+[∂f(x)∂g∗(z)]
除了单调算子,还有个最大单调算子(Maximal monotone operator),也就是说它的图不能是其他任意单调算子的真子集,举个栗子就明白了,参考下面的图。我们可以知道b闭凸函数的偏导数、单调仿射变换是最大单调算子,除此之外,还有定理。
Minty’s Theorem:单调算子 F 是最大单调算子当且仅当
im(I+F)=x∈domF⋃(x+F(x))=Rn
除了单调性质,我们在证明收敛新的时候往往还要用到 Lipschitz 连续、强凸性质等等,实际上我们前面已经介绍过很多次了,而且用了一堆名词 coercivity、expansive、firmly nonexpansive,我实在是晕了…这里我们就再总结一下。假设算子 F 有 y=F(x),y^=F(x^)
(y−y^)T(x−x^)≥μ∥x−x^∥2,μ>0 |
(y−y^)T(x−x^)≥γ∥y−y^∥2,γ>0 |
(y−y^)T(x−x^)≤L∥x−x^∥2 |
coercive |
co-coercive |
|
|
firmly nonexpansive(γ=1) |
nonexpansive(L≤1) |
|
|
Lipschitz continuous |
它们之间的关系
- 如果满足 co-coercive 并且有 γ=1,则其为 firmly nonexpansive
- 如果满足 Lipschitz continuous 并且有 L≤1,则其为 nonexpansive
- co-coercivity 可以导出 Lipschitz continuous(L=1/γ),但反之不一定。不过对于闭凸函数他们是等价的。
它们各自的性质
Coercivity等价于 F−μI 是一个单调算子,也等价于
[x−x^y−y^]T[−2μIII0][x−x^y−y^]≥0 for all (x,y),(x^,y^)∈gr(F)
Co-coercivity等价于
[x−x^y−y^]T[0II−2γI][x−x^y−y^]≥0 for all (x,y),(x^,y^)∈gr(F)
对前面提到的 resolvent 来说,算子单调性有以下重要性质:
重要性质:算子是单调的,当且仅当他的 resolvant 是 firmly nonexpansive
证明只需要根据矩阵等式 λ[0II0]=[IλII0][0II−2I][IIλI0] 就可以得到(结合 (★) 式)。
另外单调算子 F 是最大单调算子,当且仅当
dom(I+λF)−1=Rn
这可以由 Minty’s theorem 得到。
4. 近似点算法
4.1 回望 PPA
前面讲到了 Resolvant (I+λF)−1 实际上就是近似点算子,而 PPA 就是在计算近似点,回忆 PPA 的迭代格式为
xk+1=proxtkf(xk)=(1+tkF)−1(xk)
我们实际上就是在找 Resolvant 算子 Rt=(I+tF)−1 的不动点
x=Rt(x)⟺x∈(1+tF)(x)⟺0∈F(x)
加入松弛后的 PPA 可以写成下面的形式,其中 ρk∈(0,2) 为松弛参数
xk+1=xk+ρk(Rtk(xk)−xk)
那么收敛性是怎么样呢?假如 F−1(0)=∅,在满足以下条件时 PPA 可以收敛
-
tk=t>0,ρk=ρ∈(0,2) 都选择常数值;或者
-
tk,ρk 随迭代次数变化,但是需要满足 tk≥tmin>0,0<ρmin≤ρk≤ρmax<2,∀k
这个收敛性的证明可以通过证明 Resolvant 的 firmly nonexpansiveness 性质来完成(可以去复习 DR 方法的收敛性证明,那里实际上也是一个不动点迭代)。
4.2 再看 PPA
先打个预防针,这一部分很重要!!!看完以后也许会对 PPA 以及其他优化算法有更多的理解!!!
首先我们回忆 PPA 是什么。对于优化问题 minf(x),迭代格式为 x+=proxtf(x)。如果我们把 ∂f(x) 用算子 F 来表示,那么优化问题实际上就是在找满足 0∈F(x) 的解,PPA 实际上就是在找不动点 x=(1+tF)−1(x)。
假如我们现在引入一个非奇异矩阵 A,令 x=Ay 代入到原方程(为什么要这么做?如果合适地选择 A 的话,有时候可以使问题简化,跟着推导的思路看到最后就能理解了,来吧!)
记 g(y)=f(Ay),那么优化问题变为了 ming(y),注意由于 A 是非奇异的,所以这个问题跟原问题 minf(x) 是等价的。我们需要找满足 0∈∂g(y)=AT∂f(Ay) 的解,于是可以定义算子 G(y)=∂g(y)=ATF(Ay),这个时候 G 的图就是做一个线性变换
gr(G)=[A−100AT]gr(F)
如果 F 是一个单调算子的话,那么 G 也是一个单调算子,这是因为(结合 (★) 式)
[A−100AT]T[0II0][A−100AT]=[0II0]
然后对 ming(y) 应用 PPA 迭代格式为
yk+1=(I+tkG)−1(yk)
我们把 xk=Ayk,G=ATF(Ay) 都代入进去,就能把上面的式子等价表示为
tk1H(xk−x)∈F(x)
其中 H=(AAT)−1≻0。这个式子又可以表示为
xk+1=(H+tkF)−1(Hxk)
因为 ming(y)⟺minf(x),所以上面这个迭代格式也完全适用于原问题,如果取 H=I 那就是原始形式的 PPA,如果取别的形式,那么就获得了推广形式的 PPA!
引入 A 有什么作用呢?我们看
tk1H(xk−x)∈F(x)⟺xk+1=argxmin(f(x)+2tk1∥x−xk∥H2)
其中 ∥x∥H2=xTHx,如果说 f(x)=(1/2)∥Bx−b∥2,那么我们就可以选择 A 使 H=(1/α)I−BTB,这样迭代求解 xk+1 就简单了。当然这个作用范围很有限,下面的例子更能显现他的威力。
我们再回到原始对偶问题,记算子 F 为
F(x,z)=[0−AAT0][xz]+[∂f(x)∂g⋆(z)]
优化问题就是要找到 0∈F(x,z)。如果用原始的 PPA 算法,迭代方程为 (xk+1,zk+1)=(I+tF)−1(xk,zk),(xk+1,zk+1) 是下面方程的解
注意到 x,z 纠缠在一起了,我们想把他们拆开来分别求解 x,z,问题就能更简单。怎么做呢,引入一个 H
H=[I−τA−τAT(τ/σ)I]
其中若 στ∥A∥22<1 则 H 为正定矩阵。这个时候 (xk+1,zk+1) 就是下面方程的解
1τI−τA−τAT(τ/σ)I][xk−xzk−z]∈[0−AAT0][xz]+[∂f(x)∂g∗(z)]⇕0∈∂f(x)+τ1(x−xk+τATzk)0∈∂g∗(z)+σ1(z−zk−σA(2x−xk))⇕xk+1zk+1=(I+τ∂f)−1(xk−τATzk)=(I+σ∂g∗)−1(zk+σA(2xk+1−xk))
对于化简后的式子,我们就可以先单独求解 xk+1,然后再求解 zk+1。这实际上也是 PDHG 的迭代方程
xk+1=proxτf(xk−τATzk)zk+1=proxσg∗(zk+σA(2xk+1−xk))
最后给我的博客打个广告,欢迎光临
https://glooow1024.github.io/
https://glooow.gitee.io/
前面的一些博客链接如下
凸优化专栏
凸优化学习笔记 1:Convex Sets
凸优化学习笔记 2:超平面分离定理
凸优化学习笔记 3:广义不等式
凸优化学习笔记 4:Convex Function
凸优化学习笔记 5:保凸变换
凸优化学习笔记 6:共轭函数
凸优化学习笔记 7:拟凸函数 Quasiconvex Function
凸优化学习笔记 8:对数凸函数
凸优化学习笔记 9:广义凸函数
凸优化学习笔记 10:凸优化问题
凸优化学习笔记 11:对偶原理
凸优化学习笔记 12:KKT条件
凸优化学习笔记 13:KKT条件 & 互补性条件 & 强对偶性
凸优化学习笔记 14:SDP Representablity
最优化方法 15:梯度方法
最优化方法 16:次梯度
最优化方法 17:次梯度下降法
最优化方法 18:近似点算子 Proximal Mapping
最优化方法 19:近似梯度下降
最优化方法 20:对偶近似点梯度下降法
最优化方法 21:加速近似梯度下降方法
最优化方法 22:近似点算法 PPA
最优化方法 23:算子分裂法 & ADMM
最优化方法 24:ADMM
最优化方法 25:PDHG