最优化算法基础

来源:互联网 发布:玄空排盘软件手机版 编辑:程序博客网 时间:2024/06/06 04:35
  • 一、问题定义
  • 二、代数方法求解
  • 三、迭代优化方法求解
    • 3.1 梯度方法
      • 3.1.1 随机梯度下降
      • 3.1.2 Momentum
      • 3.1.3 Adagrad
      • 3.1.4 Rmsprop
      • 3.1.5 Adam
    • 3.2 牛顿方法
      • 3.2.1 牛顿法
      • 3.2.2 修正牛顿法
      • 3.2.3 拟牛顿法 - DEP
      • 3.2.4 拟牛顿法 - BFGS
      • 3.2.5 拟牛顿法 - L-BFGS
      • 3.2.6 OWL-QN
    • 3.3 坐标下降法

一、问题定义

空间有两个点:, 求过两个点的直线。

假设直线为:

目的:求解

二、代数方法求解

     可写成:

可以求解得:

直线为:

三、迭代优化方法求解

可以通过随机初始化一组,然后通过某种优化算法迭代求解

设初始化系数为:

定义误差函数:

可以通过寻找使误差最小的一组来求解

3.1 梯度方法

参数在误差函数的负梯度方向进行迭代更新。包括原始的随机梯度下降法以及一些改进方法,如Momentum、Adagrad、Rmsprop、Adam等。

各种方法迭代速度对比

3.1.1 随机梯度下降

初始值在,需要通过某种方式找到最优化

随机梯度法是从开始,每次向负梯度方向做一次更新,更新的速率设为

梯度计算:

参数更新方式为:

更新速率可以采用线搜索技术求解,或者可以人为设定某个0-1之间的值。

SGD存在的问题:

 

各个维度步长相差较大,导致震荡从而收敛慢

3.1.2 Momentum

在一般机器学习过程中,常常采用的方式是一个batch一个batch地进行计算梯度,并以当前batch的梯度作为参数更新方向。这种方式参数的更新方式完全依赖当前的batch,会导致参数的更新不稳定。Momentum可以缓解这种不稳定性。

参数更新方式:

Momentum解决的问题:

在参数更新时,在一定程度上保留了之前更新的方向,同时利用当前的梯度进行微调做为最终的更新方向。

直观理解:如果同方向,由会增大更新量。如果异向,则会减小更新量。

3.1.3 Adagrad

SGD以及Momentum算法中的更新速率都是一个固定值,这一固定值不一定适合所有的参数位置,比如在即将达到极值处学习速率应该减小。Adagrad就是在SGD的基础上改进了一个自适就的学习速率。

参数更新方式:

式中:是平滑因子,一个很小的正数如; 

Adagrad解决的问题:

假设只有两个参数,上图方向上的梯度更大。这个公式作为分母,与对应的值会更大,因此会缓解这种震荡更新的情况。

3.1.4 Rmsprop

Rmsprop是对Adagrad的更新方式进行改进,引入泄露机制,使得G每次都损失一部分,从而使步长不再是单调递减。

参数更新方式:

式中:是平滑因子,一个很小的正数如; 

Rmsprop解决的问题:

避免Adagrad的步长单调递减的情况。

3.1.5 Adam

Adam可以理解为Momentum和Rmsprop的结合,具体更新方式:

第一项和Momentum类似,第二项和Rmsprop类似。作者建议

(Adam是推荐首先使用的一种优化算法)

3.2 牛顿方法
3.2.1 牛顿法

牛顿法的基本想法是,在迭代点处用行二阶泰勒式近似代替误差函数。然后通过求解二阶泰勒式的极小值点作为新的迭代点。

二阶泰勒展开式:

求上式的极小值点:

因此需要求解当前迭代点处的一阶导数和二阶导数

3.1 中已求得:

 本问题是二次函数,因此其二阶泰勒展开式子就是本身,所以用牛顿法迭代一次就是极小值。

3.2.2 修正牛顿法

牛顿法需要求迭代点处的二阶导数(hessian矩阵)在每一个迭代点处都是正定才能保证每次牛顿法方向都是误差函数的下降方向。

因此修正牛顿法对hessian矩阵进行变换,便得变换后的始终保持正定:

;其中为单位对角矩阵。

代替后得到的牛顿方向偏离了原来的最优方向,但是可以保持大体的方向。同时只要满足每次迭代都使误差下降即可完成优化工作。

因此修正之后的迭代方式为:

修正牛顿法主要是保证牛顿法中的hessian矩阵一直保持正定。

3.2.3 拟牛顿法 - DEP

拟牛顿法:

使用牛顿法时每一步迭代都需要求解hessian矩阵及其逆矩阵,对于参数多时计算量非常巨大甚至实现上不可行。拟牛顿法的基本想法是采用某个近似矩阵来代替hessian矩阵,同时要求近似矩阵有如下特性性:

a. 确保有近似二阶的收敛速度

b. 对于所有的k,是正定的,保证近似牛顿方向是误差下降的方向

c. 的更新规则简单,保证实现上较容易

对于误差函数在的二阶泰勒展开式子:

两边求导得:

令:    位移:    梯度差:

得:

因此,拟牛顿方法中需要求得一个近似矩阵来近似

令:

得拟牛顿方程:

较正方程:

通常将拟牛顿方程和较正方程所确定的方法称为拟牛顿法。有不同的变种如DEP、BFGS、L-BFGS、OWL-QN等。

DEP:

DEP的较正公式:

   若正定以及就可以保证正定。

同时需要做一些修正,修正后的公式:

换了一个优化目标,因为之前的例子是二次函数,一次就可以到达最优解。

解决问题:

避免每一次迭代都求解一次hessian矩阵及其逆矩阵。

3.2.4 拟牛顿法 - BFGS

。。。

3.2.5 拟牛顿法 - L-BFGS

以上两种拟牛顿法需要计算和存储hessian矩或者其近似矩阵,空间复杂度为当n很大最需要非常大的内存。L-BFGS就是在BFGS的基础上解决了内存问题。

推导:

3.2.6 OWL-QN

微软提出的,基于L-BFGS可用于求解L1正则的算法。

3.3 坐标下降法

坐标下降法的过程是,在每次迭代中沿当前点的一个坐标方向进行一维搜索,找到当前的局部最优值,然后再进行下一个坐标的搜索。

对于本问题,首先固定优化,然后再固定优化,依次进行。。。