Keras优化器介绍

Keras优化器介绍

在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,包括:

  • SGD (Stochastic gradient descent)
  • Mini-batch gradient descent
  • Adagrad
  • Adadelta
  • RMSprop
  • Adam

最后给出如何选择优化器的Tips!!

Stochastic gradient descent

SGD 每次更新时对每个样本进行梯度更新。
缺点: SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

1
2
3
4
5
for i in range(nb_epochs):  
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function, example, params)
params = params - learning_rate * params_grad

Mini-batch gradient descent

MBGD 每一次利用一小批样本,即 n 个样本进行计算。
这样它可以降低参数更新时的方差,收敛更稳定。
另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算

1
2
3
4
5
for i in range(nb_epochs):
np.random.shuffle(data)
for batch in get_batches(data, batch_size=50):
params_grad = evaluate_gradient(loss_function, batch, params)
params = params - learning_rate * params_grad

缺点:

  1. learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。
    有一种措施是先设定大一点的学习率,当两次迭代之间的变化低于某个阈值后,就减小 learning rate,不过这个阈值的设定需要提前写好,这样的话就不能够适应数据集的特点。
  2. 此外,这种方法是对所有参数更新时应用同样的 learning rate,如果我们的数据是稀疏的,我们更希望对出现频率低的特征进行大一点的更新。
  3. 另外,对于非凸函数,还要避免陷于局部极小值处,或者鞍点处,因为鞍点周围的error 是一样的,所有维度的梯度都接近于0,SGD 很容易被困在这里。

Adagrad

这个算法就可以对低频的参数做较大的更新,对高频的做较小的更新,也因此,对于稀疏的数据它的表现很好,很好地提高了 SGD 的鲁棒性,
一般 η 就取 0.01。
缺点:它的缺点是分母会不断积累,这样学习率就会收缩并最终会变得非常小

Adadelta

这个算法是对 Adagrad 的改进

RMSprop

  • RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法。
  • RMSprop 和 Adadelta 都是为了解决 Adagrad 学习率急剧下降问题的

Adam

  • 这个算法是另一种计算每个参数的自适应学习率的方法。实践表明,Adam 比其他适应性学习方法效果要好。
  • 除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值:

超参数设定值:

  • 建议 β1 = 0.9,β2 = 0.999,ϵ = 10e−8

如何选择?

  • 如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。
  • RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。
  • Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,
  • 随着梯度变的稀疏,Adam 比 RMSprop 效果会好。

总结

Adam 是最受欢迎和被广泛使用的优化算法之一,通常都会作为NLP领域研究人员的选择。
通常认为,Adam要明显优于传统的随机梯度下降(SGD)算法。
然而,虽然训练过程中Adam比SGD收敛快得多,但是SGD的在学习率上的退火速率要略胜于Adam。

最近的研究工作进一步表明,对SGD进行适当的动量调整将优于Adam算法。
SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点


Keras优化器介绍
http://example.com/2018/12/04/2018-12-04-Keras优化器介绍/
作者
NSX
发布于
2018年12月4日
许可协议