机器学习之优化算法学习总结

优化算法演化历程

机器学习和深度学习中使用到的优化算法的演化历程如下:
SGD –> Momentum –> Nesterov –> Adagrad –> Adadelta –> Adam –> Nadam

1   表 1     优 化 算 法 演 化 过 程 及 其 原 因

演化过程 原因
SGD –> Momentum 由于SGD在优化过程中容易产生震荡,为减小震荡,Momentum在梯度下降过程中引入了动量,使之具有惯性
Momentum –> Nesterov 对梯度项进行矫正,使梯度下降方向由积累的动量和假设走到下一步的梯度两部分决定的
Nesterov –> Adagrad Adagrad中引入二阶动量,使之能够自适应调节学习率
Adagrad –> Adadelta 由于Adagrad 使用了之前所有梯度的平方,会导致训练到后面梯度为0,因此,在Adadelta中只用前面一段时间的下降梯度的配方
Adadelta –> Adam 在梯度更新中,使用了动量,并且能够自适应调节学习率
Adam –> Nadam 引入了Nesterov 动量项

各优化算法的公式与特点

SGD

公式:

  • θ=θηθJ(θ) θ = θ − η ∇ θ J ( θ )

特点:

  • 仅由当前所在的梯度来决定参数如何更新
  • 梯度下降过程中容易出现震荡

Momentum

公式:

  • mt=μmt1+ηθJ(θ) m t = μ ∗ m t − 1 + η ∇ θ J ( θ )
  • θt=θt1mt θ t = θ t − 1 − m t

特点:

  • 引入动量,减小SGD在梯度下降过程中的震荡
  • 梯度下降过程中,之前的动量也对当前运动有影响

Nesterov

公式:

  • mt=μmt1+ηθJ(θμmt1) m t = μ ∗ m t − 1 + η ∇ θ J ( θ − μ ∗ m t − 1 )
  • θt=θt1mt θ t = θ t − 1 − m t

特点:

  • 在Momentum优化算法的基础上,对当前梯度值进行矫正
  • 矫正方式为,假设参数往积累的动量方向走了一步时所在位置的梯度作为当前的梯度值

Adagrad

公式:

  • gt=θJ(θ) g t = ∇ θ J ( θ )
  • nt=nt1+(gt)2 n t = n t − 1 + ( g t ) 2
  • θt=θt1ηnt+ϵgt θ t = θ t − 1 − η n t + ϵ ∗ g t

特点:

  • 适合用于稀疏梯度
  • 前期梯度下降较快,后期梯度下降较慢
  • 具有自适应学习率
  • 训练后期,由于梯度累计较大,会使训练提前结束

Adadelta

公式:

  • gt=θJ(θ) g t = ∇ θ J ( θ )
  • nt=vnt1+(1v)(gt)2 n t = v ∗ n t − 1 + ( 1 − v ) ∗ ( g t ) 2
  • θt=θt1ηnt+ϵgt θ t = θ t − 1 − η n t + ϵ ∗ g t

特点:

  • 在Adagrad基础上,减小提前结束训练的风险

Adam

公式:

  • mt=μmt1+(1μ)θJ(θ) m t = μ ∗ m t − 1 + ( 1 − μ ) ∇ θ J ( θ )
  • nt=vnt1+(1v)(gt)2 n t = v ∗ n t − 1 + ( 1 − v ) ∗ ( g t ) 2
  • mt^=mt1μt m t ^ = m t 1 − μ t
  • nt^=nt1vt n t ^ = n t 1 − v t
  • θt=θt1mt^ηnt^+ϵgt θ t = θ t − 1 − m t ^ ∗ η n t ^ + ϵ ∗ g t

特点:

  • Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳
  • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
  • 为不同的参数计算不同的自适应学习率
  • 也适用于大多非凸优化问题——适用于大数据集和高维空间

各优化算法的分类

2   表 2     各 优 化 算 法 的 分 类

梯度修正 优化算法
没进入动量,且不具有自适应学习率 BGD、SGD
引入动量 Momentum、Nesterov
自适应学习率 Adagrad、Adadelta、RMSprop
引入动量且自适应学习率 Adam、Adamx、Nadam

优化算法使用总结

  • 在不考虑优化算法的使用细节及其技巧的情况下,一般使用Adam
  • 虽然后面的优化算法都是在SGD上改进而来,但是目前很多paper依旧使用SGD
  • 一般在训练时,数据都要进行shuffle
  • 几种优化算法并不一定哪一个绝对好,视模型和数据而定

你可能感兴趣的:(机器学习,算法)