前面的章节基本上讲完了凸优化相关的理论部分,在对偶原理以及 KKT 条件那里我们已经体会到了理论之美!接下来我们就要进入求解算法的部分,这也是需要浓墨重彩的一部分,毕竟我们学习凸优化就是为了解决实际当中的优化问题。我们今天首先要接触的就是大名鼎鼎的梯度方法。现在人工智能和人工神经网络很火,经常可以听到反向传播,这实际上就是梯度下降方法的应用,他的思想其实很简单,就是沿着函数梯度的反方向走就会使函数值不断减小。
xk+1=xk−tk∇f(xk),k=0,1,...
上面的式子看起来简单,但是真正应用时你会发现有各种问题:
- 下降方向怎么选?∇f(xk) 吗?选择其他方向会不会好一点呢?
- 如果 f(x) (在某些点)不可导又怎么办呢?
- 步长 tk 怎么选呢?固定值?变化值?选多大比较好?
- 收敛速度怎么样呢?我怎么才能知道是否达到精度要求呢?
- …
1. 凸函数
前面讲凸函数的时候我们提到了很多等价定义:Jensen’s 不等式、“降维打击”、一阶条件、二阶条件。这里我们主要关注其中两个:
- Jensen’s 不等式:f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)
- 一阶条件等价于梯度单调性:(∇f(x)−∇f(y))T(x−y)≥0 for all x,y∈domf
也就是说凸函数的梯度 ∇f:Rn→Rn 是一个单调映射。
2. Lipschitz continuity
函数 f 的梯度满足**利普希茨连续(Lipschitz continuous)**的定义为
∥∇f(x)−∇f(y)∥∗≤L∥x−y∥ for all x,y∈domf
也被称为 L-smooth。有了这个条件,我们可以推出很多个等价性质,这里省略了证明过程

也就是说下面的式子都是等价的
∥∇f(x)−∇f(y)∥∗≤L∥x−y∥ for all x,y∈domf
(∇f(x)−∇f(y))T(x−y)≤L∥x−y∥2 for all x,y∈domf
f(y)≤f(x)+∇f(x)T(y−x)+2L∥y−x∥2 for all x,y∈domf
(∇f(x)−∇f(y))T(x−y)≥L1∥∇f(x)−∇f(y)∥∗2 for all x,y
g(x)=2L∥x∥22−f(x) is convex
Remarks 1:
上面的第 3 个式子
f(y)≤f(x)+∇f(x)T(y−x)+2L∥y−x∥2 for all x,y∈domf
实际上定义了一个二次曲线,这个曲线是原始函数的 Quadratic upper bound

并且由这个式子可以推导出
2L1∥∇f(z)∥∗2≤f(z)−f(x⋆)≤2L∥z−x⋆∥2 for all z
这个式子中的上界 2L∥z−x⋆∥2 带有 x⋆ 是未知的,而下界只与当前值 z 有关,因此在优化过程中我们可以判断当前的 f(z) 与最优值的距离至少为 2L1∥∇f(z)∥∗2,如果这个值大于0,那么我们一定还没得到最优解。
Remarks 2:
上面的最后一个式子
(∇f(x)−∇f(y))T(x−y)≥L1∥∇f(x)−∇f(y)∥∗2 for all x,y
被称为 ∇f 的 co-coercivity 性质。(这其实有点像 ∇f 的反函数的 L-smooth 性质,所以它跟 ∇f 的 L-smooth 性质是等价的)
3. 强凸函数
满足如下性质的函数被称为 **m-强凸(m-strongly convex)**的
f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)−2mθ(1−θ)∥x−y∥2 for all x,y∈domf,θ∈[0,1]
m-强凸跟前面的 L-smooth 实际上非常像,只不过一个定义了上界,另一个定义了下界。
类似上面的 L-smooth 性质,我们课可以得到下面几个式子是等价的
f is m-strongly convex
(∇f(x)−∇f(y))T(x−y)≥m∥x−y∥2 for all x,y∈domf
f(y)≥f(x)+∇f(x)T(y−x)+2m∥y−x∥2 for all x,y∈domf
g(x)=f(x)−2m∥x∥2 is convex
注意上面第3个式子不等号右遍实际上又定义了一个二次曲线,这个二次曲线是原函数的下界。与前面的二次上界类比可以得到
Quadratic lower bound |
Quadratic upper bound |
 |
 |
f(y)≥f(x)+∇f(x)T(y−x)+2m∥y−x∥2 |
f(y)≤f(x)+∇f(x)T(y−x)+2L∥y−x∥2 |
⟹2m∥z−x⋆∥2≤f(z)−f(x⋆)≤2m1∥∇f(z)∥∗2 |
⟹2L1∥∇f(z)∥∗2≤f(z)−f(x⋆)≤2L∥z−x⋆∥2 |
例子:如果函数 f 既是 m-强凸的,又是(关于2范数) L-smooth 的,那么
- 函数 h(x)=f(x)−2m∥x∥2 是 (L-m)-smooth 的
- 函数 h 的 co-coercivity 可以写为
(∇f(x)−∇f(y))T(x−y)≥m+LmL∥x−y∥22+m+L1∥∇f(x)−∇f(y)∥22 for all x,y∈domf
4. 梯度方法收敛性分析
下面给出一些常见梯度下降方法的分析。先回顾一下梯度方法的一般表达式
xk+1=xk−tk∇f(xk)
首先有一些假设
-
f convex 且可导,domf=Rn
-
∇f 关于2范数 L-Lipschitz continuous
- 最优解有限且可取
4.1 固定步长
固定步长为 t,则 x+=x−t∇f(x),根据 L-smooth 性质有
f(x−t∇f(x))≤f(x)−t(1−2Lt)∥∇f(x)∥22
如果 0<t≤1/L,则有
f(x+)≤f(x)−2t∥∇f(x)∥22
这表明(只要步长 t 比较小)函数值总是在不断减小的。从上面的式子结合凸函数性质我们还可以得到
f(x+)−f⋆≤∇f(x)T(x−x⋆)−2t∥∇f(x)∥22=2t1(∥x−x⋆∥22−∥x−x⋆−t∇f(x)∥22)=2t1(∥x−x⋆∥22−∥∥x+−x⋆∥∥22)
从这个式子可以得到我们到最优点 x⋆ 的距离在不断减小。那么可以得到下面的式子
i=1∑k(f(xi)−f⋆)≤2t1i=1∑k(∥xi−1−x⋆∥22−∥xi−x⋆∥22)=2t1(∥x0−x⋆∥22−∥xk−x⋆∥22)≤2t1∥x0−x⋆∥22⟹f(xk)−f⋆≤k1i=1∑k(f(xi)−f⋆)≤2kt1∥x0−x⋆∥22
因此普通的固定步长的梯度下降有以下收敛性质
- f(xk+1)<f(xk)
- ∥xk+1−x⋆∥<∥xk−x⋆∥
-
f(xk)−f⋆≤2kt1∥x0−x⋆∥22,要想满足精度 f(xk)−f⋆≤ϵ 需要的迭代次数为 O(1/ϵ)
4.2 线搜索
线搜索就是每步都要计算合适的步长,计算方法为不断地迭代 tk:=βtk,0<β<1 直到 tk 满足下面的条件
f(xk−tk∇f(xk))<f(xk)−αtk∥∇f(xk)∥22
形象理解就是下面这幅图,一开始我们的 tk 可能很大,表示梯度下降的步长过大,不能使函数值减小,那我们就减小步长 tk=βtk,直到进入绿线与蓝线交点左侧这部分,我们就可以保证一定有 f(xk+1)<f(xk),这时就是我们要取的 tk,这也是线搜索的含义,线搜索实际上就是在搜索合适的步长 tk。

主要到上面的式子中有一个参数 α 会影响我们的搜索结果,比如上图中 α 越大,则绿线的斜率越大,那么最终搜索到的 tk 应该就越小,表示我们每一步的步长都会更小。实际中往往取 α=1/2,此时理想的搜索结果实际上就是 quadratic upper bound 的最小值点。也就是说我们用二次上界曲线来近似待优化的函数,而二次上界的最小值点对应的步长就是 t=1/L,但由于我们是线搜索,实际得到的 tk 一般会比这个值略小一点。

另一方面为了保证线搜索在有限步能够终止,还需要满足 tk≥tmin=min{t^,β/L},其中 t^ 是预先指定的一个参数。
那么线搜索的收敛性怎么样呢?首先根据线搜索的定义一定有
f(xi+1)≤f(xi)−2ti∥∇f(xi)∥22≤f⋆+∇f(xi)T(xi−x⋆)−2ti∥∇f(xi)∥22=f⋆+2ti1(∥xi−x⋆∥22−∥xi+1−x⋆∥22)
这表明 f(xi+1)<f(xi),∥xi−x⋆∥2>∥xi+1−x⋆∥2,类似前面固定步长的分析,可以得到
f(xk)−f⋆≤k1i=1∑k(f(xi)−f⋆)≤2ktmin1∥x0−x⋆∥22
因此对于线搜索的方法,我们可以得到如下的收敛性质
- f(xi+1)<f(xi)
- ∥xi−x⋆∥2>∥xi+1−x⋆∥2
- f(xk)−f⋆≤2ktmin1∥x0−x⋆∥22
所以线搜索实际上并不能提高收敛速度的阶,他与固定步长的方法都是 O(1/k) 的,为 sublinear 收敛。
4.3 一阶方法的收敛极限
不管是固定步长还是线搜索,前面的方法都是一阶方法,即
xk+1∈x0+span{∇f(x0),∇f(x1),…,∇f(xk)}
而理论上也证明一阶方法的收敛速度存在极限。
定理(Nesterov): for every integer k≤(n−1)/2 and every x0, there exist functions in the problem class such that for any first-order method
f(xk)−f⋆≥323(k+1)2L∥x0−x⋆∥22
也就是说收敛速度最多也就是 O(1/k2)。
4.4 强凸函数的梯度方法
对于强凸函数,即使采用固定步长的梯度方法,也可以得到线性收敛速度!这就是强凸性带来的好处。
考虑 0<t<2/(m+L),我们有
∥∥x+−x⋆∥∥22=∥x−t∇f(x)−x⋆∥22=∥x−x⋆∥22−2t∇f(x)T(x−x⋆)+t2∥∇f(x)∥22≤(1−tm+L2mL)∥x−x⋆∥22+t(t−m+L2)∥∇f(x)∥22≤(1−tm+L2mL)∥x−x⋆∥22
也就是说可以得到
∥xk−x⋆∥22≤ck∥x0−x⋆∥22,c=1−tm+L2mLf(xk)−f⋆≤2L∥xk−x⋆∥22≤2ckL∥x0−x⋆∥22
注意到前面是反比例下降,这里变成了指数下降。如果要打到精度 f(xk)−f⋆≤ϵ 需要的迭代次数为 O(log(1/ϵ))
5. BB 方法
Barzilai-Borwein (BB) method 也是梯度下降方法的一种,他主要是通过近似牛顿方法来实现更快的收敛速度,同时避免计算二阶导数带来的计算复杂度。
如果我们记 g(k)=∇f(x(k)) and F(k)=∇2f(x(k)),那么一阶方法就是 x(k+1)=x(k)−αkg(k),其中步长 αk 可以是固定的,也可以是线搜索获得的,一阶方法简单但是收敛速度慢。牛顿方法就是 x(k+1)=x(k)−(F(k))−1g(k),其收敛速度更快,但是海森矩阵计算代价较大。而 BB方法就是用 αkg(k) 来近似 (F(k))−1g(k)。
怎么近似呢?假如定义 s(k−1):=x(k)−x(k−1) and y(k−1):=g(k)−g(k−1),那么海森矩阵实际上就是
F(k)s(k−1)=y(k−1)
现在的想法就是用 (αkI)−1 来近似 F(k),那么应该有
(αkI)−1s(k−1)=y(k−1)
这个问题用最小二乘就可以解决了,下面两种选择都可以
αk−1=βargmin21∥∥∥s(k−1)β−y(k−1)∥∥∥2⟹αk1=(s(k−1))Ty(k−1)(s(k−1))Ts(k−1)αk=αargmin21∥∥∥s(k−1)−y(k−1)α∥∥∥2⟹αk2=(y(k−1))Ty(k−1)(s(k−1))Ty(k−1)
这两个解有一个微妙的不同点在于 αk1 的分母 (s(k−1))Ty(k−1) 有可能等于 0,这会给计算带来麻烦,而 αk2 则不会。
BB方法主要有以下几个特点:
- 几乎不需要额外的计算量,但是往往会带来极大的性能增益;
- 实际应用中这两个表达式用哪个都可以,甚至还可以交换使用,用哪个更好一般与具体的问题有关;
- 收敛性很难证明,没有收敛性的保证。比如下面的例子,他甚至不是单调下降的。
> 最后给我的博客打个广告,欢迎光临
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:梯度方法