前言:

             在各种论文中,我见到过最多的优化器就是SGD,虽然Adam,Nadam很潮,优点很多,但是我也不知道为啥,那些很优秀的论文总是喜欢用SGD,或许是因为SGD的学习率和和decay可‘手动’调节的缘故吧,SGD的学习率衰减策略有很多,接下来就讲解一个各个衰减策略,以及poly衰减策略的实现,另一方面是网上基本上是没有Keras上实现poly的代码,经过我一个下午的摸索,终于实现了。


SGD优化策略:

随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量。

keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)

参数:

  • lr:大于0的浮点数,学习率
  • momentum:大于0的浮点数,动量参数
  • decay:大于0的浮点数,每次更新后的学习率衰减值
  • nesterov:布尔值,确定是否使用Nesterov动量

其中这个decay是很值得玩味的

 

默认decay设置

Keras 已经内置了一个基于时间的学习速率调整表,并通过上述参数中的 decay 来实现,学习速率的调整公式如下:

LearningRate = LearningRate * 1/(1 + decay * iteration)

当我们初始化参数为:

LearningRate = 0.1
decay = 0.001

100 个 iteration后学习速率将变为 0 ,其变化曲线如下: 

Keras中poly学习策略的实现

 

相关文章: