二次优化问题dfp_机器学习优化算法(一)

fd193ddd8b411088ac75355d8730c9e6.png

在机器学习领域,数理统计、概率论和优化理论等知识是必不可少的,尤其是以优化理论最为重要。机器学习经常会把问题抽象为一个优化问题,比如最大化回报奖赏、最小化分类错误带来的损失或者最大化似然等等,而如何求解这些问题就必须有相应的优化算法。

本文将主要介绍几个常见的优化算法:

  • 随机梯度下降(Stochastic Gradient Descent, SGD)
  • 改进的迭代尺度算法(Improved Iterated Scaling, IIS)
  • 牛顿法(Newton) & 拟牛顿法(Quasi-Newton)
  • DFP
  • BFGS & L-BFGS

文章主要参考了李航老师的《统计学习方法》里面相关的介绍。

A. SGD

本文首先介绍SGD,这是最简单的优化方法,也是最为常用的方法。在深度学习里面,一般都会使用SGD或其变种进行优化,也是反向传播算法的核心。

那么对于SGD,假设优化目标为:

根据一阶泰勒展开式(假设目标函数有连续的一阶偏导数),那么有下式,其中
是第
次迭代的的变量值,
是函数
处的梯度:

为了使得目标函数的值下降的最快,那么选择
最为合适,即有以下更新:

使用以上权重更新之后的目标值更新的结果为:

可以看出目标值是下降的。其中

是学习率,可以使用固定值,也可以使用线性搜索求解,即:

一般来说,梯度下降法最为简单实用,但收敛速率有点慢。随机梯度下降则是基于批处理(Mini-Batch)的梯度下降,即函数的梯度信息是通过一个Mini-Batch的数据计算得到的,而不是所有的数据的梯度。

在深度学习领域,SGD是最为常用的优化方法,因为深度网络所拟合的函数是非线性、非凸的,很难求解最优解,与其耗费很多功夫设计一个优化算法,倒不如使用最为简单、通用的SGD。SGD会有很多变种,包括Momentum、AdaGrad、RMSProp、Adam等等。

经常会有这么一个问题:为什么深度学习里面的学习率都是固定的或者固定步长衰减?而不用这种线性搜索寻找最优的学习率呢?这是因为在深度网络里面,主要要求的是速度,正如深度网络不使用二阶优化(二阶优化需要大量的存储和计算时间)的目的一样,使用线性搜索带来的代价比较大。此外,由于深度网络里面都是使用的Mini-Batch的形式,计算的梯度只是真实梯度的一个近似,使用精确的线性搜索的结果不一定是最优的,所以倒不如直接固定学习率了。

如果将待优化的参数记为

,其梯度信息记作
,第
次迭代对应的参数和梯度分别为
,那么有下面的结果:
  • SGD采用MiniBatch数据计算出来的梯度作梯度下降。

  • Momentum计算梯度时综合考虑了当前步梯度和上一步梯度的信息,一方面,由于动量
    的影响,梯度方向不会大幅度震荡,尽量和上一次更新的方向保持一致;另一方面,当陷入平缓区域时,
    近乎为0,但此时由于有动量在
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值