目录

  • 一维搜索
    • 黄金分割法
    • 牛顿法
  • 最速下降法
  • 牛顿法与拟牛顿法
  • 参考

一维搜索

最优化问题一般选择某一组变量,然后在满足一定的限制条件下,求出使目标值达到最优(最大或最小)的变量值。大部分时候,最优化问题都采用迭代计算的方式来求解。而大多数迭代下降算法都具有的共同点是在得到某次迭代点xkx^kxk后,需要按照一定规则来确定一个方向dkd^kdk,沿着该方向在直线上求函数的极小点得到下一个迭代点xk+1x^{k+1}xk+1。这样不断在一维的目标函数上,求其在各迭代点的直线方向上的极小点,直到求出问题最优解的方式就被称为一维搜索,或者线搜索。其一般过程可用如下公式表示:
xk+1=xk+λdkx^{k+1}=x^k+λd^kxk+1=xk+λdk
其上dkd^kdk,表示在这一步的搜索方向,步长因子λλλ决定了沿着该方向前进多远。这两者共同决定了该搜索算法的好坏。一维搜索的算法有好多种,以下介绍几种常见的。

黄金分割法

基础公式:
λk=ak+0.382(bk−ak)λ_k=a_k+0.382(b_k-a_k )λk​=ak​+0.382(bk​−ak​)
μk=ak+0.618(bk−ak)μ_k=a_k+0.618(b_k-a_k)μk​=ak​+0.618(bk​−ak​)
流程如下:

0.618法和Fibonacci法的运作机理是一致的,且都适用于单峰函数的情形,只不过将区间长度缩短比例由常数0.618更改为了斐波那契数列。在实际应用问题中,目标函数在其定义域内很有可能不是单峰的,因此我们在使用时需要先确定其单峰区间再行计算。

牛顿法


牛顿法迭代法的基本思想是利用二阶泰勒展开在极小点附近来近似目标函数,最终解出极小点的一个近似值。其主要解算步骤如下:
xk+1=xk−f′(xk)/f′′(xk)x^{k+1}=x^k-f^{'}(x^k)/f^{''}(x^k)xk+1=xk−f′(xk)/f′′(xk)

若是初始点选择的比较靠近极小点,迭代过程就能很快地收敛,反之则有可能不收敛到极小点。

最速下降法

上文中的一维搜索可归结为单变量函数的最优化问题,也是最速下降法的基础。
xk+1=xk+λdkx^{k+1}=x^k+λd^kxk+1=xk+λdk
其迭代过程中最重要的就是为下次迭代选择一个合适的方向dkd^kdk。人们利用了梯度方向是函数值增长最快的方向的思想,来让迭代点沿着负梯度方向前进,保证函数的“最速”下降。
以下直接给出公式:
xk+1=xk−λ∇f(xk)x^{k+1}=x^k-λ∇f(x^k)xk+1=xk−λ∇f(xk)
在多元函数中:
∇f(x)=(∂f(x)/(∂x1),…,∂f(x)/(∂xn))∇f(x)=(∂f(x)/(∂x_1 ),…,∂f(x)/(∂x_n ))∇f(x)=(∂f(x)/(∂x1​),…,∂f(x)/(∂xn​))
步长λλλ由求解式: argminf(xk+λdk)argminf(x^k+\lambda d^k)argminf(xk+λdk)得到,是一种精确步长的搜索方式。其与梯度下降法的区别也在于此,梯度下降中的步长往往是由工程师自己预先设置好的一个固定值,因此梯度下降法只是最速下降法中的一种特殊形式。

形象点地说,假设有一小球要从山顶滚到山脚,那么每次沿最陡峭(梯度)的方向向下滚是最快的。在确定了每次下降的方向的同时也需要小心地选择一个合适的步长。若是过大,可能导致迭代点发散,过小则导致收敛太慢。由于梯度为0的点是函数取极值的必要条件,却不是充分条件,所以梯度下降法最终带给我们的解,可能只是一个局部最优解:也就是我们的小球陷入了山腰上的某个小坑中无法动弹(然而事实上在机器学习中,往往梯度下降只能让loss函数下降到鞍点,甚至无法抵达局部最优解)。而随机梯度下降法则为跳出局部最优解提供了可能,如下图所示:

其会比较多个小球的结果,而当小球数目足够多时,其中海拔最低的那个球也就为我们带来了全局最优解。
最速下降算法还有一个局限之处是存在下图所示的锯齿现象:

由于最速下降法在极小化目标函数时的相邻两个搜索方向是正交的,以下给出简易证明过程:
g(λ)=f(xk+λdk)g(\lambda)=f(x^k+\lambda d^k)g(λ)=f(xk+λdk)
为了求其在方向dk=−∇f(xk)d^k=-∇f(x^k)dk=−∇f(xk)上的极小点,需要先确定步长,令:
g′(λ)=∇f(xk+λkdk)Tdk=0g^{'}(\lambda)=∇f(x^k+\lambda_k d^k)^Td^k=0g′(λ)=∇f(xk+λk​dk)Tdk=0
可得:
−∇f(xk+1)T∇f(xk)=0-∇f(x^{k+1})^T ∇f(x^k)=0−∇f(xk+1)T∇f(xk)=0
即方向dk+1d^{k+1}dk+1与方向dkd^kdk正交。所以使用最速下降法得到的迭代路线往往是呈现一个之字形的走势。而当迭代点越靠近极小点,其移动的步长较小,严重影响到了收敛的速度。虽然从局部来看,每次选择的方向都是函数值下降最快的方向,但是从全局来看,锯齿现象导致当距离极小点较近时需要绕不少弯路才能收敛,反而收敛较慢。因此在计算的前中期使用梯度下降,而在接近极小点时使用其他算法进行迭代会是更理想的方案。

牛顿法与拟牛顿法

此处介绍的牛顿法是其在一维搜索中的推广形式。与最速下降法一样可用于求解一般无约束的多元优化问题。其基本思想还是采用泰勒二阶展开来拟合极小点附近的函数来进行迭代:
xk+1=xk−∇2f(xk)−1∇f(xk)x^{k+1}=x^k-∇^2f(x^k)^{-1}∇f(x^k) xk+1=xk−∇2f(xk)−1∇f(xk)
可以看到我们需要函数在迭代点处的梯度∇f(xk)∇f(x^k)∇f(xk)以及∇2f(xk)∇^2f(x^k)∇2f(xk)海森矩阵的逆矩阵来进行下一步的迭代点的计算。也有许多文献证明牛顿法的收敛速度是很快的,特别对于目标函数为二次凸函数的情况来说,其只需一次迭代就能得到极小点,像这样在有限次迭代后能使函数必定达到极小点的方法我们可称其具有二次终止性。像上文中的最速下降法对一般的凸函数就不具备此性质。

但是牛顿法也有可能无法收敛,因为牛顿方向并不一定是下降的方向。因此人们提出了结合沿牛顿方向进行一维搜索的修正牛顿法。机智的小伙伴们可能注意到,无论是牛顿法还是修正牛顿法都有一个问题:他们都需要海森矩阵的逆矩阵才能进行迭代。因此针对海森矩阵为奇异矩阵,或者海森矩阵维度过高,求逆所需的计算量太庞大的情况:拟牛顿法应运而生。我们会构造一个新的对称正定矩阵来取代海森矩阵进行迭代,避免了求逆以及二次微分的计算。根据不同的构造方式还可细分成不同的子方法如:BFGS、DFP等。具体的构造方法以及推导过程有很多文献,这里不多做介绍了。

参考

陈宝林,《最优化理论与算法》。

一维搜索、最速下降(梯度下降)与牛顿法(拟牛顿法)相关推荐

  1. 机器学习优化算法中梯度下降,牛顿法和拟牛顿法的优缺点详细介绍

    1.梯度下降法 梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解.一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的. 梯度下降法的优化思想:用当前位置负梯度方向作为搜 ...

  2. 机器学习中梯度下降法和牛顿法的比较

    在机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解.在逻辑斯蒂回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法.由于两种方法有些相似 ...

  3. 关于梯度下降法和牛顿法的数学推导

    作者:LogM 本文原载于 https://blog.csdn.net/qq_28739605/article/details/80862810,不允许转载~ 文章难免有错误之处,请在原文评论处指出~ ...

  4. GBDT与xgb区别,以及梯度下降法和牛顿法的数学推导

    为什么要介绍梯度下降法和牛顿法那? 这里提及两个算法模型GBDT和XGBoost,两个都是boosting模型. GBDT和xgb的目标函数是不同的,同时针对其目标函数中的误差函数 L(θ) 的拟合方 ...

  5. python牛顿法寻找极值_python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例...

    Rosenbrock函数的定义如下: 其函数图像如下: 我分别使用梯度下降法和牛顿法做了寻找Rosenbrock函数的实验. 梯度下降 梯度下降的更新公式: 图中蓝色的点为起点,橙色的曲线(实际上是折 ...

  6. “随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam”

    "随机梯度下降.牛顿法.动量法.Nesterov.AdaGrad.RMSprop.Adam" 随机梯度下降法 牛顿法 动量法 Nesterov 学习率应该慢慢减小的. AdaGra ...

  7. 梯度下降法和牛顿法计算开根号

    梯度下降法和牛顿法计算开根号 本文将介绍如何不调包,只能使用加减乘除法实现对根号x的求解.主要介绍梯度下降和牛顿法者两种方法,并给出 C++ 实现. 梯度下降法 思路/步骤 转化问题,将 x \sqr ...

  8. 梯度下降、牛顿法凸优化、L1、L2正则化、softmax、Batchnorm、droupout、Targeted Dropout详解

    一.梯度下降 问题提出:虽然给定一个假设函数,我们能够根据cost function知道这个假设函数拟合的好不好,但是毕竟函数有这么多,总不可能一个一个试吧?因此我们引出了梯度下降:能够找出cost ...

  9. 通过梯度下降和牛顿法求解一个数的平方根

    梯度下降 梯度下降法(Gradient descent)是一个一阶最优化算法,就是让参数沿着损失函数负梯度的方向更新.迭代的步长,也就是学习率是事先给定的,如果负梯度的绝对值越大,这次更新的幅度也会越 ...

  10. 梯度下降、牛顿法、拟牛顿法

    介绍 在向量微积分中,标量场的梯度是一个向量场.标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率.更严格的说,从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似 ...

最新文章

  1. 【Ant Design Pro 五】箱套路由在菜单栏显示返回上一页
  2. ZJU-java进阶笔记 第一、二周(类与对象,对象交互)
  3. Python进阶【第五篇】函数式编程及某些特殊函数
  4. linux获取url中文内容_Chrome OS 似乎将在Linux 的方向上更进一步
  5. linux shell date 日期格式转换
  6. 设计模式——UML图
  7. java file源码_java File源码理解,探索File路径
  8. JavaScript 语言基础知识点图示
  9. mxnet深度学习(NDArray)
  10. conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一 次。
  11. UIBezierPath IOS贝塞尔曲线
  12. PHP与JSP的比较
  13. c语言 malloc_C语言数据结构 | 第一讲
  14. quickserver java_QuickServer--在吵闹的环境里快速搭建自己的TcpServer(Pragmatic系列) - java - CSDN技术中心...
  15. web移动端开发总结
  16. 高通WLAN驱动分析
  17. UiBot 网页数据抓取
  18. 优秀实践采购团队的8个要点
  19. Springboot中@autowired和@resource注解的区别
  20. AI语音机器人拿来做什么用?

热门文章

  1. 用剥洋葱的方式处理数组
  2. cf#273-D. Red-Green Towers-dp
  3. 推荐系统----协同过滤算法原理及实现
  4. Storm8 游戏盘点
  5. 林期苏曼属性标签编辑_SEO丨SEO是怎样通过标签优化作用于排名的?
  6. SegmentFault 巨献 1024 程序员游戏「红岸的呼唤」第一天任务攻略
  7. 用c++制作酒店管理系统
  8. python爬取51job的示例
  9. python爬取王者_教你用Python爬取手机APP数据!以王者荣耀的数据信息为例
  10. 阿里CTO:阿里是世界领先的大数据公司