线搜索(line search)方法

转自http://www.cnblogs.com/kemaswill/p/3416231.html

 在机器学习中, 通常需要求某个函数的最值(比如最大似然中需要求的似然的最大值). 线搜索(line search)是求得一个函数f(x)f(x)的最值的两种常用迭代方法之一(另外一个是trust region). 其思想是首先求得一个下降方向,在这个方向上f(x)f(x)会下降, 然后是求得f(x)f(x)在这个方向上下降的步长. 求下降方向的方法有很多, 比如梯度下降, 牛顿方法和Quasi-Newton方法, 而步长可以是固定值, 也可以通过诸如Armijo算法来求得.

  1. 线搜索(line search)

  线搜索是一种迭代的求得某个函数的最值的方法. 对于每次迭代, 线搜索会计算得到搜索的方向pkpk以及沿这个方向移动的步长αkαk.

  大多数的线搜索方法都会要求pkpk是下降方向(descent direction), 亦即需要满足以下条件: pkTfk<0pkT∇fk<0, 这样就能够保证函数ff(x)沿着这个方向是下降的. 一般来说, 搜索方向是pk=B1kfkpk=−Bk−1∇fk

  其中BkBk是一个对称非奇异矩阵. 在最深下降(steepest descent)方法中, BkBk是单位矩阵II, 在牛顿方法(Newton)中BkBk则是海森(Hessian)矩阵2f(xk)∇2f(xk), 在Quasi-Newton方法中通过迭代求得Hessian矩阵的近似矩阵.

  当pkpk由上式定义, 且BkBk是正定矩阵时:

pTkfk=fTkB1kfk<0pkT∇fk=−∇fkTBk−1∇fk<0
所以 pkpk是下降方向(descent direction).

  2. 步长

  步长αα应该最小化下面的函数:

ϕ(α)=f(xk+αpk)ϕ(α)=f(xk+αpk)

  但是求得使上式最小的αα比较困难, 且计算量比较大, 实际常用的方法是在可接受的计算量的情况下尽可能的求得较大的步长, 以使得ϕ(α)ϕ(α)尽可能的降低. 经典的线搜索方法通过迭代来求得αα, 直至达到某个停止条件. 一般的线搜索方法都包含以下两个步骤:

  1. bracketing: 求得一个包含理想的步长的区间
  2. 二分法或者插值法: 在这个区间内使用二分法或者插值法来求得步长

  2.1 对于凸函数的二分搜索算法

  如果f(x)f(x)是一个可微分的凸函数, 则我们的目标是求得αα, 使得

α=argminλ>0f(x+λp)α=argminλ>0f(x+λp)

  令ϕ(α)=f(xk+αpk)ϕ(α)=f(xk+αpk), 其中ϕ(α)ϕ(α)是αα的凸函数, 所以问题转化为求:

α¯=argminα>0ϕ(α)α¯=argminα>0ϕ(α)

  因为ϕ(α)ϕ(α)是凸函数, 所以ϕ(α¯)=0ϕ′(α¯)=0. 可以得到ϕ(α)=f(x+αp)Tpϕ′(α)=∇f(x+αp)Tp, 因为p是梯度下降方向, 所以ϕ(0)<0ϕ′(0)<0.

  假设我们知道一个α^α^使得ϕ(α^)>0ϕ′(α^)>0, 那么使得ϕ(α¯)=0ϕ′(α¯)=0的αα肯定位于(0,α^α^)区间内. 然后我们可以使用以下二分查找算法来求解ϕ(α)0ϕ′(α)≈0 

  1. 令k=0, αl:=0αl:=0, αu:=α^αu:=α^令α~=αu+αl2α~=αu+αl2, 然后计算ϕ(α~)ϕ′(α~):
    • 如果ϕ(α~)>0ϕ′(α~)>0, 则令αu:=α~αu:=α~, 令kk+1k←k+1
    • 如果ϕ(α~)<0ϕ′(α~)<0, 则令αl:=α~αl:=α~, 令kk+1k←k+1
    • 如果ϕ(α~)=0ϕ′(α~)=0, 停止迭代

  2.2 Armijo算法

  使用二分查找法来求步长的计算复杂度很高, 因为在最小化f(x)f(x)的每次迭代中我们都需要执行一次线搜索, 而每次线搜索都要用上述的二分查找算法. 我们可以在牺牲一定的精度的条件下来加快计算速度, Armijo算法是一种近似线搜索算法.

  首先, 我们要求每次的步长αkαk都使得f(x)f(x)充分的降低:

f(xk+αpk)f(xk)+c1αfTkpkf(xk+αpk)≤f(xk)+c1α∇fkTpk

  上述条件称作 充分下降条件 , 其中c1(0,1)c1∈(0,1), 一般来说c1=104c1=10−4. 亦即f(x)f(x)的下降应该至少和αkαk以及fTkpk∇fkTpk成正比. 如下图所示, 上式的右边f(xk)+c1αfTkpkf(xk)+c1α∇fkTpk是一个线性函数, 可以表示为l(α)l(α).

  充分下降条件规定只有使得ϕ(α)l(α)ϕ(α)≤l(α)的αα才满足条件. 其区间如上图所示.

  单独只有充分下降条件是不够的, 因为如上图, 所有充分小的αα都满足上述条件, 但是αα太小会导致下降不充分, 为了排除这些小的αα, 我们引入了第二个要求, 亦即 曲率条件(curvature condition) :

f(xk+αkpk)Tpkc2fTkpk∇f(xk+αkpk)Tpk≥c2∇fkTpk
其中c2(c1,1)c2∈(c1,1). 上式的左边就是ϕ(αk)ϕ′(αk), 右边则是ϕ(0)ϕ′(0), 亦即上式要求ϕ(αk)ϕ′(αk)大于等于c2c2倍的ϕ(0)ϕ′(0), 这是因为如果ϕ(α)ϕ′(α)是很小的负数, 则我们可以在这个方向上继续使得f(x)f(x)下降更多. 如下图所示

  上述两个条件合起来称作 Wolfe条件 :

  

f(xk+αpk)f(xk)+c1αfTkpkf(xk+αpk)≤f(xk)+c1α∇fkTpk
f(xk+αkpk)Tpkc2fTkpk∇f(xk+αkpk)Tpk≥c2∇fkTpk

  其中0<c1<c2<10<c1<c2<1

  我们可以使用以下算法来求得满足Wolfe条件的步长αα, 其主要思想是从一个初始的步长之后逐步减少αα, 直至其满足充分下降条件, 同时可以防止αα变得太小:

  1. 选择一个(¯α)>0,ρ,c(0,1);(¯α)>0,ρ,c∈(0,1);令αα¯α←α¯
  2. 重复以下步骤直到f(xk+αpk)f(xk)+c1αfTkpkf(xk+αpk)≤f(xk)+c1α∇fkTpk:
  • αραα←ρα

     3.  返回αk=ααk=α

  [1]. Numerical Optimization, Chapter 3, p35-p42. J. Nocedal, S.Wright.

  [2].  Continuous Optimization Methods: Line search methods: one-dimensional optimization .

  [3]. Wikipedia: Line Search .

--------------------- 本文来自 Tsroad 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tsroad/article/details/50249393?utm_source=copy 

猜你喜欢

转载自www.cnblogs.com/xiaoboge/p/9713419.html