梯度下降(Gradient Descent)

梯度下降

考虑一个无约束的,平滑的凸优化问题
minxf(x)\min_x f(x)

其中,ff是凸函数,且在定义域dom(f)=Rndom(f)=R^n上是可微的。

算法

选择一个初始点x(0)Rnx^{(0)}\in R^n,重复操作:
x(k)=x(k1)tkf(x(k1)), k=1,2,3.,..x^{(k)} = x^{(k-1)} - t_k \cdot \nabla f(x^{(k-1)}),\ k=1,2,3.,..

直到达到某阈值后停止。梯度下降法就是沿着梯度减小的方向,每次走一定的步长,直到到达最优点为止。
在这里插入图片描述

梯度下降的解释

在每一次迭代中,对当前点做二次泰勒展开:
f(y)f(x)+f(x)T(yx)+12tyx22f(y)\approx f(x)+\nabla f(x)^T(y-x)+\frac{1}{2t}\|y-x\|^2_2

这里用1tI\frac{1}{t}I代替了二次项系数海森矩阵2f(x)\nabla^2 f(x)
选择下一个点y=x+y=x^+去最小化该二次近似可以得到:
x+=xtf(x)x^+=x-t\nabla f(x)

所以,梯度下降相当于在函数的每个点处都做二次近似,然后求解最小点的位置。

在这里插入图片描述

步长的选择

既然梯度下降每次迭代都要走一定的步长,那这个步长要怎么选择呢?
一种简单的方式是把步长固定,每次都移动常数距离,tk=t, for all k=1,2,3,...t_k=t,\ for\ all\ k=1,2,3,...。但是这样存在问题,如果tt太大,梯度下降可能会发散而不收敛;如果tt太小,梯度下降就会收敛很慢。只有tt选得“刚好”时,才能兼顾收敛性和收敛速度。另一种方法可以自适应地调整步长——回溯线性搜索

回溯线性搜索

  1. 首先固定参数0<β<10<\beta<10<α1/20<\alpha\leq 1/2
  2. 在每次迭代中,首先设置t=tinitt=t_{init},然后只要:
    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
  3. 重复步骤2,直到满足条件为止。然后进行梯度下降更新:
    x+=xtf(x)x^+=x-t\nabla f(x)

在这里插入图片描述
在实践中可以进一步简化α=1/2\alpha=1/2

收敛性分析

已知ff是凸函数,且在定义域dom(f)=Rndom(f)=R^n上是可微的。而且f\nabla f是关于常数L>0L>0 Lipschitz连续的:
f(x)f(y)2Lxy2for any x,y\|\nabla f(x)-\nabla f(y)\|_2 \leq L\|x-y\|_2\quad for\ any\ x,y(或者说二次微分2f(x)LI\nabla ^2f(x) \preceq LI
那么,梯度下降有O(1/k)O(1/k)的收敛率,kk为迭代次数。也就是说,在O(1/ϵ)O(1/\epsilon)次迭代后,可以找到ϵ\epsilon误差的次优点。
如果ff是强凸的,即存在m>0m>0,使得f(x)m2x22f(x)-\frac{m}{2}\|x\|^2_2是凸的(或者说二次微分2f(x)mI\nabla ^2f(x) \succeq mI),那么收敛率将会达到指数收敛率O(γk)O(\gamma ^k)0<γ<10<\gamma<1。也就是说,在O(log(1/ϵ))O(log(1/\epsilon))次迭代后,可以找到ϵ\epsilon误差的次优点。

优缺点

优点

  1. 方法简单,每次迭代都很快;
  2. 对于良态的,强凸问题有很快的收敛速度。

缺点

  1. 由于许多问题是非强凸或良态的,因此梯度下降往往需要很多次迭代,收敛速度很慢;
  2. 不能应对不可微的函数。

在非凸问题上的分析

假设ff是可微的,且f\nabla f是Lipschitz连续的,但是非凸的。在这种情况下,我们不再寻找最优点,而是寻找稳定点解,那么梯度下降有O(1/k)O(1/\sqrt{k})(或O(1/ϵ2)O(1/\epsilon^2))的收敛率。

参考资料

CMU:Convex Optimization

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章