深度学习优化算法大全系列7:NAdam,算法选择,调参

1.NAdam集大成

前面我们讲Adam的时候,提到Adam是Adaptive+Momentum。更前面的时候,我们还提到Nesterov,如果把Nesterov跟Adam结果,就是我们最后的集大成者NAdam。

class Nadam(Optimizer):
  """Nesterov Adam optimizer.

  Much like Adam is essentially RMSprop with momentum,
  Nadam is Adam RMSprop with Nesterov momentum.

  Default parameters follow those provided in the paper.
  It is recommended to leave the parameters of this optimizer
  at their default values.

  Arguments:
      lr: float >= 0. Learning rate.
      beta_1/beta_2: floats, 0 < beta < 1. Generally close to 1.
      epsilon: float >= 0. Fuzz factor. If `None`, defaults to `K.epsilon()`.
  """

  def __init__(self,
               lr=0.002,
               beta_1=0.9,
               beta_2=0.999,
               epsilon=None,
               schedule_decay=0.004,
               **kwargs):
    super(Nadam, self).__init__(**kwargs)
    with K.name_scope(self.__class__.__name__):
      self.iterations = K.variable(0, dtype='int64', name='iterations')
      self.m_schedule = K.variable(1., name='m_schedule')
      self.lr = K.variable(lr, name='lr')
      self.beta_1 = K.variable(beta_1, name='beta_1')
      self.beta_2 = K.variable(beta_2, name='beta_2')
    if epsilon is None:
      epsilon = K.epsilon()
    self.epsilon = epsilon
    self.schedule_decay = schedule_decay
...

tensorflow中Nadam源码,开篇两句话就揭示了本质:
1.Adam的本质是带动量的RMSprop。
2.Nadam是带Nesterov动量的Adam RMSprop。

β 1 , β 2 \beta_1, \beta_2 β1,β2等参数与Adam的含义与数值都是一致的。

2.如何选择优化算法

1.如果数据稀疏,一般自适应算法比较好,比如AdaGrad, AdaDelta, RMSProp, Adam等。
2.一般来说,Adam会是一个不错的选择。
3.可以在训练初始阶段,采用Adam提升收敛速度,后期在切换到SGD进行调优。

参考文献

https://zhuanlan.zhihu.com/p/32338983

你可能感兴趣的:(NAdam,算法选择)