梯度法

157 阅读3分钟

1.梯度法

负梯度是一个可微函数的局部最速下降方向,沿此方向可以快速找到局部极小点

梯度法
选择 x0Rnx_0 \in \mathbb{R}^n.
迭代xk+1=xkhkf(xk)x_{k+1} = x_{k} - h_k \nabla f(x_k), k = 0,1,2,...

其中hkh_k为步长,它必须为正数。

2.步长选择策略

有如下几种策略:
1.预先选择序列{hk}k=0\{ h_k \}^{\infty}_{k=0},例如

hk=hhk=hk+1\begin{aligned} h_k &= h \\ h_k &= \frac{h}{\sqrt{k+1}} \end{aligned}

2.全松弛(精确步长)

hk=arg  minh0f(xkhf(xk))h_k = arg \; \underset{h \ge 0}{min} f(x_k - h \nabla f(x_k))

3.Amijo\mathbf{Amijo}规则:对h>0h > 0,确定xk+1=xkhf(xk)x_{k+1} = x_k - h \nabla f(x_k),满足

αf(xk),xkxk+1f(xk)f(xk+1)(1.2.16)\alpha \langle \nabla f(x_k) , x_k - x_{k+1} \rangle \le f(x_k) - f(x_{k+1}) \tag{1.2.16}
βf(xk),xkxk+1f(xk)f(xk+1)(1.2.17)\beta \langle \nabla f(x_k) , x_k - x_{k+1} \rangle \ge f(x_k) - f(x_{k+1}) \tag{1.2.17}

其中0<α<β<10 < \alpha < \beta < 1.


第一种策略是最简单的,也常用于各种教材当中。
第二种策略是理论上的,实际上无法应用,因为即便在一维的情况下也无法在有限时间内找到最小的h
第三种策略用于很多实际的算法,从几何的角度来解释,取xRnx \in \mathbb{R}^nf(x)0\nabla f(x) \neq 0时,考虑关于h的函数:

ϕ(h)=f(xhf(x)),h0\phi(h) = f(x - h \nabla f(x)), h \ge 0

于是该策略可接受的步长介于下面两个线性函数之间:

ϕ1(h)=f(x)αhf(x)2ϕ2(h)=f(x)βhf(x)2\phi_1(h) = f(x) - \alpha h ||\nabla f(x)||^2 \\ \phi_2(h) = f(x) - \beta h ||\nabla f(x)||^2

这两个函数由(1.2.16)和(1.2.17)消去xk+1x_{k+1}得到。

F7FE2F7B670AE141BA2D2062766313B4.png

3.步长的最优选择

我们考虑y=xhf(x)y = x-h \nabla f(x),依据一些已有的结论公式,有

f(y)f(x)+f(x),yx+L2yx2=f(x)hf(x)2+h22Lf(x)2=f(x)h(1h2L)f(x)2(1.2.19)\begin{aligned} f(y) &\le f(x) + \langle \nabla f(x),y-x \rangle + \frac{L}{2}||y-x||^2 \\ &= f(x) - h||\nabla f(x)||^2 + \frac{h^2}{2}L||\nabla f(x)||^2 \\ &= f(x) - h(1-\frac{h}{2}L)||\nabla f(x)||^2 \tag{1.2.19} \end{aligned}

由此,我们希望得到一个f(y)f(y)最优上界 对应如下的一维问题:

Δ(h)=h(1h2L)minh\Delta(h) = -h(1-\frac{h}{2}L) \rightarrow \underset{h}{min}

利用简单的求导知识可以推知h=1Lh^* = \frac{1}{L}时取得最佳上界。 此时有

f(y)f(x)12Lf(x)2f(y) \le f(x) - \frac{1}{2L}||\nabla f(x)||^2

对于定长的策略,hk=hh_k = h,接下来的分析就和上述过程一致,
最后推理得到最优的选择为hk=1Lh_k = \frac{1}{L}

对于全松弛策略我们有同样的结论,因为这种策略不会比定长策略差

而对于Armijo\mathbf{Armijo}规则,依据(1.2.17)有

f(xk)f(xk+1)βf(xk),xkxk+1=βhkf(xk)2f(x_k) - f(x_{k+1}) \le \beta \langle \nabla f(x_k) , x_k - x_{k+1} \rangle = \beta h_k||\nabla f(x_k)||^2

同时由(1.2.19)又能得到

f(xk)f(xk+1)hk(1hk2L)f(xk)2f(x_k) - f(x_{k+1}) \ge h_k(1-\frac{h_k}{2}L)||\nabla f(x_k)||^2

结合上述两式,可以得到hk2L(1β)h_k \ge \frac{2}{L}(1-\beta)
同理利用(1.2.16)能够得到

f(xk)f(xk+1)αf(xk),xkxk+1=αhkf(xk)2f(x_k) - f(x_{k+1}) \ge \alpha \langle \nabla f(x_k) , x_k - x_{k+1} \rangle = \alpha h_k||\nabla f(x_k)||^2

继续与hk2L(1β)h_k \ge \frac{2}{L}(1-\beta)相结合,可以得到

f(xk)f(xk+1)2Lα(1β)f(xk)2f(x_k) - f(x_{k+1}) \ge \frac{2}{L} \alpha (1-\beta)||\nabla f(x_k)||^2

综合上述三种策略对应的结论,我们可以一般化地描述一个统一的结论

f(xk)f(xk+1)wLf(xk)2(1.2.20)f(x_k) - f(x_{k+1}) \ge \frac{w}{L} ||\nabla f(x_k)||^2 \tag{1.2.20}

其中ww是一个正常数

4.性能评估

我们将(1.2.20)式对k=0,1,,Nk = 0,1,\cdots,N进行累加,可以得到

wLk=0Nf(xk)2f(x0)f(xN+1)f(x0)f(1.2.21)\frac{w}{L} \sum^N_{k=0}||\nabla f(x_k)||^2 \le f(x_0) - f(x_{N+1}) \le f(x_0) - f^* \tag{1.2.21}

其中ff^*是函数局部最小值 由上述式子可以得知左式是有界的,那么

f(xk)0      k||\nabla f(x_k)|| \rightarrow 0 \; \; \; 当k \rightarrow \infty 时

我们先做出如下定义

gN=min0kNf(xk)g^*_N = \underset{0 \le k \le N}{min} ||\nabla f(x_k)||

其含义就是所有不同k中最小的梯度 结合(1.2.21)可以得到

gN1N+1[1wL(f(x0)f)]12(1.2.22)g^*_N \le \frac{1}{\sqrt{N+1}}[\frac{1}{w}L(f(x_0)-f^*)]^{\frac{1}{2}} \tag{1.2.22}

该式子可以描述f(xk)||\nabla f(x_k)||收敛的速率。

5.举个例子

考虑两个变量的函数

f(x)=f(x1,x2)=12x12+14x2412x22f(x) = f(x_1,x_2) = \frac{1}{2} x_1^2 + \frac{1}{4} x_2^4 - \frac{1}{2} x_2^2

求出该函数的梯度为f(x)=(x1,x23x2)T\nabla f(x) = (x_1,x_2^3-x_2)^T
于是可见有三个点满足梯度为0

x1=(0,0),  x2=(0,1),  x3=(0,1)x_1^* = (0,0),\; x_2^* = (0,-1),\; x_3^* = (0,1)

这三个点可能是函数的局部极小值。接着计算Hessian矩阵

Hessian矩阵

H=[2Fx12Fx1x2Fx1xn2Fx2x1Fx22Fx2xn2Fxnx1Fxnx2Fxn2]H = \begin{bmatrix} \frac {\partial^2F} {\partial x_1^2} & \frac {\partial^F} {\partial x_1 \partial x_2} & \cdots & \frac {\partial^F} {\partial x_1 \partial x_n} \\ \frac {\partial^2F} {\partial x_2 \partial x_1} & \frac {\partial^F} {\partial x_2^2} & \cdots & \frac {\partial^F} {\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac {\partial^2F} {\partial x_n \partial x_1} & \frac {\partial^F} {\partial x_n \partial x_2} & \cdots & \frac {\partial^F} {\partial x_n^2} \end{bmatrix}

用于判定极值点
当Hessian矩阵正定时,任意向量v有vTHv>0v^T H v > 0,为极小值点
当Hessian矩阵负定时,任意向量v有vTHv<0v^T H v < 0,为极大值点
当Hessian矩阵同时具有正负特征值时,该点为鞍点

于是此处的Hessian矩阵为

2f(x)=[1003x221]\nabla^2 f(x) = \begin{bmatrix} 1 & 0 \\ 0 & 3x_2^2 - 1 \end{bmatrix}

于是点x2,x3x_2^*,x_3^*代入矩阵为正定的,是局部最小值,而x1x_1^*则为鞍点。

接下来考虑从(1,0)出发的梯度算法路径,会发现无论怎么走第二个坐标恒为0,最终将会收敛到x1x_1^*,由此可见,缺乏约束的情况下,梯度法只能靠近一个稳定点。

参考资料

[1] Lectures on Convex Optimization(Second Edition)
[2] Hessian矩阵