Keras的Adadelta Optimizer中的学习速率参数是什么?

时间:2019-06-24 06:26:13

标签: python keras deep-learning

在Keras中,SGD有一个Adadelta优化器,如下所示:

optimizer = optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)

以下是文档:https://keras.io/optimizers/#adadelta 但是我们知道,Adadelta没有使用任何学习率。那么,lr的作用是什么?

1 个答案:

答案 0 :(得分:1)

为什么要做出这样的设计决定?

这确实是一个非常有趣的问题。让我们看看如何在Keras文档中对此进行描述:

  

在原始版本的Adadelta中,您不必设置初始学习率。在该版本中,可以像大多数其他Keras优化器一样设置初始学习率和衰减因子。

因此,文档本身承认此方法不需要学习率。我相信做出此设计决定是因为项目中还有其他模板,依赖项或代码。

更具体地说,keras的理念是您可以组合所需的任何构建基块(即统一的API)。如果您从中删除参数lr,我相信您将无法使用某些回调


比较

现在,让我们将Keras的Adadelta implementationoriginal paper进行比较:

  • Line 406:,这里的梯度累积为移动平均值(a是移动平均值,rho是衰减率,如本文中的g是参数p的计算梯度:

    new_a = self.rho * a + (1. - self.rho) * K.square(g)
    self.updates.append(K.update(a, new_a))
    

    这完全对应于算法中的以下行:

    enter image description here

  • Line 410:增量计算(此处,d_a是增量累加器,也采用移动平均值的形式):

    update = g * K.sqrt(d_a + self.epsilon) / K.sqrt(new_a + self.epsilon)
    

    这完全对应于

    enter image description here

  • Line 411:现在这是棘手的部分。代码如下:

    new_p = p - lr * update
    

    不遵循本文的原始算法:

    enter image description here

    而且,这样的学习速率通过学习速率衰减参数允许变化。但是,在Keras中,lr的默认值为1.0,而decay0.0,因此默认情况下它不会影响结果。