线搜索(line search)方法
在机器学习中, 通常需要求某个函数的最值(比如最大似然中需要求的似然的最大值). 线搜索(line search)是求得一个函数\(f(x)\)的最值的两种常用迭代方法之一(另外一个是trust region). 其思想是首先求得一个下降方向,在这个方向上\(f(x)\)会下降, 然后是求得\(f(x)\)在这个方向上下降的步长. 求下降方向的方法有很多, 比如梯度下降, 牛顿方法和Quasi-Newton方法, 而步长可以是固定值, 也可以通过诸如回溯线搜索来求得.
1. 线搜索(line search)
线搜索是一种迭代的求得某个函数的最值的方法. 对于每次迭代, 线搜索会计算得到搜索的方向\(p_k\)以及沿这个方向移动的步长\(\alpha_k\).
大多数的线搜索方法都会要求\(p_k\)是下降方向(descent direction), 亦即需要满足以下条件: \({p_k}^T{\nabla}f_k <0\), 这样就能够保证函数\(f\)(x)沿着这个方向是下降的. 一般来说, 搜索方向是\(p_k=-B_k^{-1}\nabla f_k\)
其中\(B_k\)是一个对称非奇异矩阵. 在最深下降(steepest descent)方法中, \(B_k\)是单位矩阵\(I\), 在牛顿方法(Newton)中\(B_k\)则是海森(Hessian)矩阵\({\nabla}^2f(x_k)\), 在Quasi-Newton方法中通过迭代求得Hessian矩阵的近似矩阵.
当\(p_k\)由上式定义, 且\(B_k\)是正定矩阵时: $$p_k^T\nabla f_k = -\nabla f_k^T B_k^{-1}\nabla f_k <0$$所以\(p_k\)是下降方向(descent direction).
2. 步长
步长\(\alpha\)应该最小化下面的函数:$$\phi (\alpha)=f(x_k+\alpha p_k)$$
但是求得使上式最小的\(\alpha\)比较困难, 且计算量比较大, 实际常用的方法是在可接受的计算量的情况下尽可能的求得较大的步长, 以使得\(\phi(\alpha)\)尽可能的降低. 经典的线搜索方法通过迭代来求得\(\alpha\), 直至达到某个停止条件. 一般的线搜索方法都包含以下两个步骤:
- bracketing: 求得一个包含理想的步长的区间
- 二分法或者插值法: 在这个区间内使用二分法或者插值法来求得步长
2.1 对于凸函数的二分搜索算法
如果\(f(x)\)是一个可微分的凸函数, 则我们的目标是求得\(\alpha\), 使得$$\alpha=arg \min_{\lambda>0}f(x+\lambda p)$$
令\(\phi (\alpha)=f(x_k+\alpha p_k)\), 其中\(\phi(\alpha)\)是\(\alpha\)的凸函数, 所以问题转化为求:$$\bar{\alpha}=arg \min_{\alpha>0} \phi(\alpha)$$
因为\(\phi(\alpha)\)是凸函数, 所以\(\phi'(\bar{\alpha})=0\). 可以得到\(\phi'(\alpha)=\nabla f(x+\alpha p)^T p\), 因为p是梯度下降方向, 所以\(\phi'(0)<0\).
假设我们知道一个\(\hat{\alpha}\)使得\(\phi'(\hat{\alpha})>0\), 那么使得\(\phi'(\bar{\alpha})=0\)的\(\alpha\)肯定位于(0,\(\hat{\alpha}\))区间内. 然后我们可以使用以下二分查找算法来求解\(\phi'(\alpha) \approx 0\)
- 令k=0, \(\alpha_l :=0\), \(\alpha_u :=\hat{\alpha}\)
- 如果\(\phi'(\tilde{\alpha})>0\), 则令\(\alpha_u :=\tilde{\alpha}\), 令\(k\gets k+1\)
- 如果\(\phi'(\tilde{\alpha})<0\), 则令\(\alpha_l :=\tilde{\alpha}\), 令\(k\gets k+1\)
- 如果\(\phi'(\tilde{\alpha})=0\), 停止迭代
令\(\tilde{\alpha}=\frac{\alpha_u + \alpha_l}{2}\), 然后计算\(\phi'(\tilde{\alpha})\):
2.2 回溯线搜索(backtracking line search)
使用二分查找法来求步长的计算复杂度很高, 因为在最小化\(f(x)\)的每次迭代中我们都需要执行一次线搜索, 而每次线搜索都要用上述的二分查找算法. 我们可以在牺牲一定的精度的条件下来加快计算速度, 回溯线搜索是一种近似线搜索算法.
首先, 我们要求每次的步长\(\alpha_k\)都使得\(f(x)\)充分的降低:$$f(x_k +\alpha p_k)\leq f(x_k)+c_1 \alpha \nabla f_k^T p_k$$
上述条件称作充分下降条件, 其中\(c_1 \in (0,1)\), 一般来说\(c_1=10^{-4}\). 亦即\(f(x)\)的下降应该至少和\(\alpha_k\)以及\(\nabla f_k^T p_k\)成正比. 如下图所示, 上式的右边\(f(x_k)+c_1 \alpha \nabla f_k^T p_k\)是一个线性函数, 可以表示为\(l(\alpha)\).

充分下降条件规定只有使得\(\phi(\alpha)\leq l(\alpha)\)的\(\alpha\)才满足条件. 其区间如上图所示.
单独只有充分下降条件是不够的, 因为如上图, 所有充分小的\(\alpha\)都满足上述条件, 但是\(\alpha\)太小会导致下降不充分, 为了排除这些小的\(\alpha\), 我们引入了第二个要求, 亦即曲率条件(curvature condition):$$\nabla f(x_k + \alpha_k p_k)^T p_k \geq c_2 \nabla f_k^T p_k$$其中\(c_2 \in (c_1,1)\). 上式的左边就是\(\phi'(\alpha_k)\), 右边则是\(\phi'(0)\), 亦即上式要求\(\phi'(\alpha_k)\)大于等于\(c_2\)倍的\(\phi'(0)\), 这是因为如果\(\phi'(\alpha)\)是很小的负数, 则我们可以在这个方向上继续使得\(f(x)\)下降更多. 如下图所示

上述两个条件合起来称作Wolfe条件:
$$f(x_k +\alpha p_k)\leq f(x_k)+c_1 \alpha \nabla f_k^T p_k$$
$$\nabla f(x_k + \alpha_k p_k)^T p_k \geq c_2 \nabla f_k^T p_k$$
其中\(0<c_1 < c_2 <1\)
我们可以使用以下算法来求得满足Wolfe条件的步长\(\alpha\), 其主要思想是从一个初始的步长之后逐步减少\(\alpha\), 直至其满足充分下降条件, 同时可以防止\(\alpha\)变得太小:
- 选择一个\(\bar(\alpha)>0, \rho, c\in (0,1);\)令\(\alpha \gets \bar{\alpha}\)
- 重复以下步骤直到\(f(x_k +\alpha p_k)\leq f(x_k)+c_1 \alpha \nabla f_k^T p_k\):
- \(\alpha \gets \rho \alpha\)
3. 返回\(\alpha_k=\alpha\)
参考文献:
[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.
线搜索(line search)方法的更多相关文章
- 【原创】回溯线搜索 Backtracking line search
机器学习中很多数值优化算法都会用到线搜索(line search).线搜索的目的是在搜索方向上找到是目标函数\(f(x)\)最小的点.然而,精确找到最小点比较耗时,由于搜索方向本来就是近似,所以用较小 ...
- [原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则
[原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则 转载请注明出处:http://www.codelast.com/ line search(一维 ...
- 用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则
转载请注明出处:http://www.codelast.com/ line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法.它可以分为精确的一维搜索以 ...
- 一段有关线搜索的从python到matlab的代码
在Udacity上很多关于机器学习的课程几乎都是基于python语言的,博主“ttang”的博文“重新发现梯度下降法——backtracking line search”里对回溯线搜索的算法实现也是用 ...
- Line Search and Quasi-Newton Methods 线性搜索与拟牛顿法
Gradient Descent 机器学习中很多模型的参数估计都要用到优化算法,梯度下降是其中最简单也用得最多的优化算法之一.梯度下降(Gradient Descent)[3]也被称之为最快梯度(St ...
- Line Search and Quasi-Newton Methods
Gradient Descent 机器学习中很多模型的参数估计都要用到优化算法,梯度下降是其中最简单也用得最多的优化算法之一.梯度下降(Gradient Descent)[3]也被称之为最快梯度(St ...
- line search中的重要定理 - 梯度与方向的点积为零
转载请注明出处:http://www.codelast.com/ 对精确的line search(线搜索),有一个重要的定理: ∇f(xk+αkdk)Tdk=0 这个定理表明,当前点在dk方向上移动到 ...
- Backtracking line search的理解
使用梯度下降方法求解凸优化问题的时候,会遇到一个问题,选择什么样的梯度下降步长才合适. 假设优化函数为,若每次梯度下降的步长都固定,则可能出现左图所示的情况,无法收敛.若每次步长都很小,则下降速度非常 ...
- 重新发现梯度下降法--backtracking line search
一直以为梯度下降很简单的,结果最近发现我写的一个梯度下降特别慢,后来终于找到原因:step size的选择很关键,有一种叫backtracking line search的梯度下降法就非常高效,该算法 ...
随机推荐
- Navicat for MySQL笔记1
1.MySQL数据库的基本操作 A.系统数据库 安装MySQL数据库服务器后,自带的数据库. B.用户数据库 用户根据实际需求所创建的数据库. C.数据库对象 表.视图.存储过程.函数.触发器以及事件 ...
- Jquery插件收集【m了慢慢学】
1. Simple Effects for Drop-Down Lists 一个jQuery插件用于将普通的select控件转成一个带有一些简单扩展效果的下拉列表. 2. X-editable 这个插 ...
- nginx配置虚拟路径下载文件(.apk)
公司将安卓apk文件放到服务器上,实现用户点击链接并下载 nginx version 1.14.1 nginx配置修改 server { listen 80; server_name localhos ...
- A Chess Game HDU - 1524 (有向图博弈)
题意:在一个有向无环图上有n个顶点,每一个顶点都只有一个棋子,有两个人,每次根据这个图只能将任意一颗棋子移动一步 ,如果到某一步玩家不能移动时,那么这个人就输. 分析:本题是最典型的有向无环图的博弈, ...
- 初探Java 9 的的模块化
Java 9中最重要的功能,毫无疑问就是模块化(Module),它将自己长期依赖JRE的结构,转变成以Module为基础的组件,当然这在使用Java 9 开发也和以前有着很大的不同. Java8或更加 ...
- AC自动机【萌新文章】
我这个蒟蒻第一次写博客,有点小激动呢. 主要是最近刚学了AC自动机,学得糟糟糕糕,记录一下,看到dalao们都在写博客,决定自己也写一波[我好水的啦,写的也不好] AC自动机大概就是 Trie+ ...
- 《Linux内核设计与实现》第18章读书笔记
第十八章 调试 一.调试开始前的准备 1.准备开始 bug 藏匿bug的版本 相关内核代码的知识 成功调试的关键在于能否将错误重现 2.内核中的bug 其产生原因无数,表象变化也多种多样.从隐藏在源代 ...
- Python OS模块操作文件和目录
#-*-coding:utf-8-*- import os import shutil ###############OS模块############## #获得当前python脚本的工作目录 os. ...
- 遇到问题----java----myeclipse或者eclipse发布的项目时配置文件不更新或者无配置文件
myeclipse或者eclipse发布的项目时配置文件不更新或者无配置文件. 正常的web项目有目录 src/main/resources 和 src/main/java 这两个目录默认在编译发布时 ...
- 解题:WC 2007 石头剪刀布
题面 要我们把边定向,最大化留下来的三元环数目......并不能直接做,考虑容斥,去掉不合法的数目. 那么三个点不成环当且仅当有一个点出度为2一个点入度为2,发现最终答案就是$C_n^3-\sum C ...