04 无限制条件的优化方法

998 阅读6分钟

梯度下降

基本概念

这个不赘述了

x(k)x(k1)+tf(x)x^{(k)}\leftarrow x^{(k-1)}+t\nabla f(x)

这里t是步长。

其思想就是在前点利用二阶近似来拟合邻域,然后在邻域里找局部最小值。二阶近似为f(y)=f(x)+f(x)T(yx)+12tyx22f(y)=f(x)+\nabla f(x)^T (y-x)+\frac{1}{2t}||y-x||_2^2。这里把二阶导的Hessen矩阵用t代替了,然后关于y求梯度=0,可以得到y=x+tf(x)y=x+t\nabla f(x)

步长设置

太大会震荡不收敛,太小会训练太慢,如何选取合适的步长?

backtracking

初始化t=t0t=t_0,每次迭代,如果f(xtf(x))>f(x)αtf(x)22f(x-t\nabla f(x))>f(x)-\alpha t||\nabla f(x)||_2^2,则t=βtt=\beta t,之后梯度下降。这里α\alpha一般是1/2,0<β<10<\beta<1

gd.png 这个图很直观,这里的Δx=f(x)\Delta x=-\nabla f(x)(沿着负梯度前进)。实线是实际的函数图,两条虚线是在当前x的线性近似,如果乘α\alpha会减缓近似的那条直线下降的速度。这样相当于把近似夹在了一个空间里。如果实线大于了上面那条虚线,那么说明现在的近似不太对,或者说t有点偏大了,因此shrink一下。

exact 最速下降法

就说前面我们使用f(x)f(x)的二阶近似找的,那我直接找最佳可以吗,这个理论上可以但不太现实,即直接找t=argmins0f(xsf(x))t=\arg\min_{s\ge 0}f(x-s\nabla f(x))

收敛分析

先来一个前置知识:李比希次连续 f(x)f(y)2Lxy2||f(x)-f(y)||_2\le L||x-y||_2

再来一个前置,矩阵的范数,注意它和向量范数有区别。

Ap=maxx0Axpxp||A||_p =\max_{x\ne 0}\frac{||Ax||_p}{||x||_p}
  • p取1时,矩阵的最大列和。
  • p取2时,矩阵ATAA^TA特征值根号的最大值。
  • p取无穷,矩阵的最大行和。

对于凸函数ff,如果他的一阶导数是李比希次连续,那么f(y)f(x)2Lxy2||\nabla f(y)-\nabla f(x)||_2\le L||x-y||_2

如果是二次可微,则对任意x它的Hessian矩阵最大特征值不会超过L,因此2f2<L||\nabla^2 f||_2<L,所以2f(x)LI\nabla^2 f(x)\le LI,这里表示半负定。

收敛性分析的一般思路:
最终目标是要构造一个形如f(xk+t)pf(xk)pϵ\frac{|f(x^{k+t})-p^*|}{|f(x^k)-p^*|}\le \epsilon。以此建立t和ϵ\epsilon的关系。
关键是lhs怎么构造。这里一般基于递推构造,即首先构造f(xk+1)f(x^{k+1})f(xk)f(x^k)的不等关系。
最后分析收敛程度,横轴是迭代轮次,纵轴是log(f(xk)p)\log(f(x^k)-p^*),看向下的趋势。

重要定理

对于固定的步长t=1/Lt=1/Lf(x(k))fx0x222tkf(x^{(k)})-f^* \le \frac{||x^{0}-x^*||_2^2}{2tk},如果是backtracking的方法,则tt替换成β/L\beta/L即可。

在初始点确定、参数确定的情况下,右侧随着k增大而减小,因此收敛率为O(1/k)O(1/k),从另一个角度看,相当于实现ϵ\epsilon-optimal需要O(1/ϵ)O(1/\epsilon)步。

如果函数不仅仅是导数李比希次,还能够强凸(f(x)m2x22f(x)-\frac{m}{2}||x||_2^2,此时有2f(x)mI\nabla^2f(x)\ge mI),那么收敛速度还可以更快,对于固定的t2/(m+L)t\le 2/(m+L),有

f(x(k))fγkL2x(0)x22f(x^{(k)})-f^*\le \gamma^k \frac{L}{2}||x^{(0)}-x^*||_2^2

其中γ=O(1m/L)\gamma=O(1-m/L),这样是指数的速度,换句话说ϵ\epsilon-optimal只需要O(log(1/ϵ))O(\log(1/\epsilon))的复杂度。

这里补充一下pp阶收敛的知识,设e=xkxe=|x_k-x^*|表示第k步的绝对误差。limkek+1ekp=c\lim_{k\rightarrow\infty} \frac{e_{k+1}}{e_k^p}=c成立的p就是收敛阶数。

二次型上的小应用

f(β)=12(yXβ)T(yXβ)f(\beta)=\frac{1}{2}(y-X\beta)^T(y-X\beta),那么这是一个没有限制条件的二次型凸优化问题

  • 先来讨论李比希次条件,2f(β)=XTX\nabla^2 f(\beta)=X^TX,因此如果2fLI\nabla^2 f \le LI,则L=λmax(XTX)L=\lambda_{\max}(X^TX)
  • 再分析强凸条件,需要保证f(x)m2x22f(x)-\frac{m}{2}||x||_2^2是凸的,即2fmI\nabla^2 f\ge mI,所以m=λmin(XTX)m=\lambda_{\min}(X^TX)。因此如果这个矩阵的列数大于行数,一定不满秩,最小特征值为0,那就没发保证强凸了。

停止定理

如果ff强凸,且参数为mm,那么f(x)22mϵf(x)fϵ||\nabla f(x)||_2\le \sqrt{2m\epsilon}\rightarrow f(x)-f^*\le \epsilon

Newton法

前面梯度下降法对于二阶近似直接把hassian矩阵近似掉了。Newton法就是不去近似,直接写出来。即

f(y)=f(x)+f(x)T(yx)+12(yx)TH(x)(yx)f(y)=f(x)+\nabla f(x)^T (y-x) + \frac{1}{2}(y-x)^T H(x) (y-x)

那么f(y)=0\nabla f(y)=0处应该为极小值,所以有

f(x)T+H(x)(yx)=0\nabla f(x)^T+H(x)(y-x)=0

因此y=xH1(x)fT(x)y=x-H^{-1}(x)\nabla f^T(x)。这就是迭代更新公式。可以很明显看到和梯度下降的区别,就是学习率从t的近似变成了hassian矩阵的拟。

如果矩阵是正定的,并且初始值合适,可以保证二阶收敛。

缺点也很明显:计算Hassian矩阵太复杂,还得求逆(未必有),可能收敛于鞍点。位了保证正定可逆,采用强迫正定策略,即H(x)+αIH(x)+\alpha I再求逆。

另外最速下降法的思路在这里一样可以用,就是依然再更新时添加步长,y=xtH1(x)fT(x)y=x-tH^{-1}(x)\nabla f^T(x)t=argmintf(xtH1(x)fT(x))t=\arg\min_t f(x-tH^{-1}(x)\nabla f^T(x))

应对不可导情况:次梯度法

次梯度

一种梯度概念的推广, 其定义是一个闭区间中的任意值,区间左右端点分别是左导数和右导数。

例如f(x)=xf(x)=|x|,在x0x\ne 0的时候导数很容易求,但在x=0x=0处不可导,但是利用次梯度的概念,其次梯度为[1,1][-1,1]中的任何数。

次微分就是把整个区间看作一个整体。它的性质有:

  • 如果可导,次微分就是一个单点即导数。
  • 反过来也成立,如果次微分只包含一个单点,那这个单点就是导数。
  • 凸函数的次微分非空。
  • 最优化条件:f(x)=minf(x)0f(x)f(x^*)=\min f(x)\Leftrightarrow0\in \partial f(x^*)。即极值点处的次微分包含0。

eg Lasso问题

minβ12yXβ22+λβ1\min_\beta \frac{1}{2}||y-X\beta||_2^2+\lambda ||\beta||_1

极值点满足0(12yXβ22+λβ1)0\in \partial (\frac{1}{2}||y-X\beta||_2^2+\lambda ||\beta||_1)

分情况讨论

  • βi0\beta_i\ne 0,那么次微分就一个值,满足最优化条件必须得等于0,因此XT(yXβi)=λsgn(βi)X^T(y-X\beta_i)=\lambda sgn(\beta_i)
  • 对于βi=0\beta_i=0的情况,那么此时绝对值的次微分为[1,1][-1,1],为了让0在整个loss的次微分里,需要满足XT(yXβi)λ0-X^T(y-X\beta_i)-\lambda\le0XT(yXβi)+λ0-X^T(y-X\beta_i)+\lambda\ge0,即XT(yXβi)λ||X^T(y-X\beta_i)||\le \lambda

X=IX=I的情况下,上面的两个情况简化为

  • yiβi=λsgn(βi),βi0y_i-\beta_i=\lambda sgn(\beta_i), \beta_i \ne 0
  • yiβiλ,βi=0|y_i-\beta_i|\le \lambda, \beta_i =0

尝试求出β\beta,如果βi\beta_i的解为0,那意味着yiλ|y_i|\le \lambda,否则,yiβi=λsgn(βi)y_i-\beta_i=\lambda sgn(\beta_i),因此βi=[Sλ(y)]i\beta_i=[S_\lambda(y)]_i

  • yiλ,(yi>λ)y_i-\lambda, (y_i > \lambda)
  • 0,(yiλ)0, (|y_i|\le \lambda)
  • yi+λ,(yi<λ)y_i+\lambda, (y_i <-\lambda)

形状类似阶梯型。被称为软阈值。

次梯度法

适用于凸的未必可微函数。就是梯度下降的梯度替换成了次梯度,替换方法就是从次微分区间里任选一个值。还要注意次梯度并不保证每次都下降,因此不能只记录当前值,还得维护最优值。

步长可以定长或衰减,但是不能应用最速下降。收敛率为O(1/ϵ2)O(1/\epsilon^2),慢于梯度下降。

应对不可导:proximal gradient

近端梯度也是一种应对不可导的方法。 考虑凸优化问题f(x)=g(x)+h(x)f(x)=g(x)+h(x),我们把优化目标拆分成两块,其中gg是凸且可微的,hh凸不可微,但他是闭函数(sublevel test凸)。

在这种情况下,我们发现其实即使只有gg的梯度也可以找到一个合适的优化方向。即xk=proxtk,h(xk1tkg(xk1))x^k=prox_{t_k,h}(x^{k-1}-t_k\nabla g(x^{k-1}))

首先明确符号表示proxtk,h(n(x))=argminu{h(u)+12tkun(x)22}prox_{t_k,h}(n(x))=\arg\min_u \{h(u)+\frac{1}{2t_k}||u-n(x)||_2^2\}

然后把前面说的proxtk,h(xk1tkg(xk1))prox_{t_k,h}(x^{k-1}-t_k\nabla g(x^{k-1}))带入看

xk=proxtk,h(xk1tkg(xk1))=argminu{h(u)+12tku(xk1tkg(xk1))22}=argminu{h(u)+12tkuxk1+tkg(xk1)22}=argminu{h(u)+tk2g(xk1)22+g(xk1)T(uxk1)+12tkuxk122}=argminu{h(u)+g(xk1)+g(xk1)T(uxk1)+12tkuxk122}argminu{h(u)+g(u)}x^k=prox_{t_k,h}(x^{k-1}-t_k\nabla g(x^{k-1})) \\ = \arg\min_u\{h(u)+\frac{1}{2t_k}||u-(x^{k-1}-t_k\nabla g(x^{k-1}))||_2^2\} \\ =\arg\min_u\{h(u)+\frac{1}{2t_k}||u-x^{k-1}+t_k\nabla g(x^{k-1})||_2^2\} \\ = \arg\min_u\{h(u)+\frac{t_k}{2}||\nabla g(x^{k-1})||_2^2 + \nabla g(x^{k-1})^T(u-x^{k-1})+\frac{1}{2t_k}||u-x^{k-1}||_2^2\} \\ = \arg\min_u\{h(u)+g(x^{k-1}) + \nabla g(x^{k-1})^T(u-x^{k-1})+\frac{1}{2t_k}||u-x^{k-1}||_2^2\} \\ \approx \arg\min_u\{h(u)+g(u)\}

这里前四行都很简单,到第5行的代换,是因为外面是关于u的argmin,这说明所有和u无关的项都可以随意替换。于是替换凑成了一个关于g在xk1x^{k-1}的二阶Taylor展开。

上面的推导说明利用prox选取的xkx^k可以让原问题进一步变小。然后重新写一下迭代式

xk=xk1tkGtk(xk1),Gt(x)=1t(xproxt,h(xtg(x)))x^{k}=x^{k-1}-t_kG_{t_k}(x^{k-1}), \\ G_{t}(x)=\frac{1}{t}(x-prox_{t,h}(x-t\nabla g(x)))

步长选择tkt_k,可以固定,也可以使用线性搜索,不断衰减t=βtt=\beta t直到g(xtGt(x))g(x-tG_t(x))不超过g(x)g(x)的二阶近似值。这个很神奇,gg括号里面就是下一步的x值,我们只要求这个值在g函数上是减小的,丝毫没考虑h,就可以保证迭代收敛了。

应对不可导:坐标下降法

对于f(x)f(x)可以写成g(x)+h(xi)g(x)+\sum h(x_i)的情况,g是可微凸函数,h是凸的。

使用坐标下降求最小值,对于x0=(x10,...,xn0)x^0=(x_1^0,...,x_n^0),先固定n-1个维度,把其中一个维度作为变量,求最小。这一步因为只有一个变量,所以一维搜索或者求导很容易得到。

求完再求第二个维度,以此类推,得到x1=(x11,...,xn1)x^1=(x_1^1,...,x_n^1)。直至两次迭代的坐标点距离很近。

坐标下降的顺序任意、关键是一次一个坐标更新,否则可能不收敛。可以把任意一个坐标推广成一部分坐标。如果是全部坐标那就是梯度下降。