Line Search,BGFS,LBGFS
Line Search
line search方法:
1.首先找到一个下降方向;
2.然后计算目标函数将沿着这个方向减小的一个步骤大小。
3.最后确定应该沿着这个方向移动的距离。
下降方向的计算方法有梯度下降法、牛顿法等。
例子:
下面是一个使用行搜索的梯度方法示例。
1.设置迭代计数器,并初始猜测的最小重复次数。
2.Repeat:
3.计算下降方向
4.选择去不精确的最小化
5.更新和
6.直到 <
在行搜索步骤(4)中,该算法可以通过求解来精确地最小化h,也可以通过让h有足够的减少量来不精确地最小化h。
前者称为精确行搜索,例如共轭梯度法。
后者称为不精确行搜索,例如回溯行搜索或者使用Wolfe条件。
Wholfe Condition
在无约束最小化问题中,Wolfe条件是一组执行不精确线搜索的不等式,特别是在准牛顿方法中,
由Philip Wolfe于1969年首次发表。
对于连续光滑的函数,为了求解的最小值,可将问题转化为求解多个子问题:。
其中是当前最好的猜测,是一个搜索方向,以及是步长。
当前最好的猜测意思是指当前的是最接近的一个值。
不精确的线搜索提供了计算可接受的步长的有效方式,这样就可以“充分”降低目标函数,而不是精确地最小化目标函数。
在线搜索中,还没有找到新的搜索方向的时候,对的估计都可以使用Wolfe条件。
Armijo规则和曲率:
如果有以下两个不等式成立:
那么说明在梯度下降的方向上,步长满足了沃尔夫的条件。
不等式1被称为Armijo规则而不等式2作为曲率的条件;不等式1确保步长能使充分地减少,不等式2确保梯度充分地减小,可以分别解释步长值的上限和下限。
通常取一个较小的值而通常取一个较大的值,且满足。
Nocedal建议,而在牛顿或拟牛顿方法中为0.9,在非线性共轭梯度中为0.1。
曲率强的Wolfe条件
表示关于的单变量函数限制在方向。
Wolfe条件可能导致步长的值不接近最小值。所以我们可以将曲率条件(即不等式2)修改为以下形式:
然后1和3形成强沃尔夫条件,使接近临界点的。
原理
在一个优化算法中强加Wolfe条件是为了确保梯度收敛到零。具体来说,如果和梯度所成角度的值:
被限制大于0,并且有不等式1和不等式2成立,那么。
BFGS
本文参考:
wiki百科
割线法求方程根
Broyden–Fletcher–Goldfarb–Shanno algorithm
牛顿法需要计算Hessian矩阵的逆矩阵,运算复杂度太高。在动辄百亿、千亿量级特征的大数据时代,模型训练耗时太久。因此,很多牛顿算法的变形出现了,这类变形统称拟牛顿算法。拟牛顿算法的核心思想用一个近似矩阵B替代逆Hessian矩阵。不同算法的矩阵B的计算有差异,但大多算法都是采用迭代更新的思想在tranning的每一轮更新矩阵B。
由于BFGS涉及割线等式(secant equation),所以先介绍一下割线法。
割线法:
方法:
optimization图20.png
割线法的最初两个迭代。红色曲线表示函数f,蓝色曲线表示割线。
割线法由以下的递推关系定义:
从上式中可以看出,割线法的初始值x0和x1,离函数的根越近越好。
方法的推导:
给定和,我们通过作点和的直线,得到函数f的割线。这条割线的点斜式直线方程为:
当时,求解即为求解,此时有方程:
收敛:
如果初始值和离根足够近,那么割线会在第n次迭代后将收敛于的一个根。收敛速率为α,其中:
是黄金比。特别地,收敛速率是超线性的。
这个结果只在某些条件下才成立,例如是连续的二阶可导函数,且函数的根不是重根。
如果初始值离根太远,则不能保证割线法收敛。
BGFS原理:
优化问题是最小化,其中是中的向量,并且是一个可微分的标量函数。可以采用的值没有限制。 该算法从最佳值的初始估计开始,并迭代地进行以在每个阶段获得更好的估计。
可由牛顿方程的模拟解给出阶段k的搜索方向:
其中是Hessian矩阵的近似值,在每个阶段迭代更新,是函数的梯度在评估。然后通过使用最小化的方向的线搜索来查找下一个点(>0)。
对的更新施加的拟牛顿条件是:
设,然后化为(割线方程)。当为正定时,曲率条件。
为了使函数为强凸,通过在阶段k处添加两个矩阵使近似Hessian矩阵:
(其中和都是秩为1的对称的矩阵,但它们的和是秩为2更新矩阵。)
另一种更简单的使秩为一的方法称为对称秩一方法。由于对称秩一方法不保证正定性,所以为了保持的对称性和正定性,选择作为更新形式,又加入之前提到的割线条件:。此时让和,我们可以获得:
最后,将的和替换,得到更新等式:
算法实现:
从初始的和近似Hessian矩阵开始,重复以下步骤,直到收敛:
- 通过解获得方向;
- 执行一维的最优化(线搜索)以在的方向找到一个可接受的步长,对有:。
- 设(步长和方向),然后更新
- 设
其中表示要最小化的目标函数。可以通过观察梯度的范数来检查是否收敛。如果被初始化,则第一步将等同于梯度下降,但随着步骤加深,近似于Hessian。
该算法的第一步需要使用矩阵的逆,它可以有效地通过Sherman-Morrison公式在第5步来获得:
这可以在没有临时矩阵的情况下有效地计算。
由于是对称的,并且和是标量,可以使用变式:
Limited-memory BFGS(存储受限的BFGS)
参考:
牛顿法与拟牛顿法学习笔记(五)L-BFGS 算法
wiki Limited-memory BFGS
BFGS的优点是其花费较少的时间改进每个线搜索。在另一方面,BFGS 算法必须存储 Hessian逆矩阵B,需要的存储空间,使BFGS不适用于大多数具有百万级参数的现代深度学习模型。而LBFGS通过避免存储完整的Hessian逆近似B,使算法的存储代价可以显著降低。
该算法基于Hessian逆矩阵的BFGS递推算法:
推导递归算法的性质:
定义,,等式可以改为:
从最初的计算到有:
由上式可知,如果要计算需要储存个数据,这与我们的低存储的期望不符,于是我们只存储m个数据进行近似计算:
算法实现:
首先定义,然后固定的k,我们又定义了一个向量序列,其中和。然后定义,那么对有。接下来我们还定义了另一个向量序列,其中,然后定义,那么对有,初始化,然后递归地使用。最后得到的就是梯度下降方向。
按以下方式计算梯度下降方向:
(其中:)
(使用对进行缩放,可以得到一个合适步长。)
第一个循环计算并存储,第二个循环请注意在其中的变化。
无论是最小化还是最大化,这个公式都是有效的。注意,如果我们最大化,搜索方向将是的负数(因为是“下坡”),并且应该是负定的,而不是正定的。对于最小化,Hessian矩阵逆必须是正定的。因此,矩阵通常表示为对角线矩阵,另外还有一个好处,即最初设置只需要逐个元素的乘法。
网友评论