在Keras中实施了最新的“ Lookahead Optimizer”论文?

fzy*_*cjy 6 python deep-learning keras

超前优化器是最近才提出的(https://arxiv.org/abs/1907.08610),并且看起来非常有前途(甚至Hinton都是其中的一位!)。

因此,我想知道如何在keras中实现它?我认为许多人可能需要此问题的答案,因为我们希望将其插入我们现有的代码中,并且可能会产生更好的结果。

我是新来的喀拉拉邦人,所以任何帮助将不胜感激。谢谢!

现有优化程序的ps源代码:https : //github.com/keras-team/keras/blob/master/keras/optimizers.py

sid*_*dev 3

为了演示背后的概念,可以在 Keras 回调中实现 Lookahead 优化器,请参阅此处的实现https://github.com/kpe/params-flow/blob/master/params_flow/optimizers/lookahead.py

def on_train_batch_end(self, batch, logs=None):
    self.count += 1
    if self.slow_weights is None:
        self.slow_weights = self.model.trainable_weights
    else:
        if self.count % self.k == 0:
            slow_ups, fast_ups = [], []
            for fast, slow in zip(self.model.trainable_weights,
                                  self.slow_weights):
                slow_ups.append(K.update(slow, slow + self.alpha * (fast - slow)))
                fast_ups.append(K.update(fast, slow))
            K.batch_get_value(slow_ups)
            K.batch_get_value(fast_ups)
Run Code Online (Sandbox Code Playgroud)

其作用在概念上非常简单——每次k更新权重都会alpha=0.5向迭代前的值移动一半 ( ) k

注意:上述实现在 GPU 或 TPU 上可能效果不佳,因为slow_weights权重副本可能会在 CPU 上更新(并且移动权重需要时间)。