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

The*_*ron 2 python deep-learning keras

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

optimizer = optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)
Run Code Online (Sandbox Code Playgroud)

这是文档:https : //keras.io/optimizers/#adadelta 但正如我们所知,Adadelta 不使用任何学习率。那么lr有什么用呢?

Fal*_*nUA 6

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

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

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

所以文档本身承认这种方法不需要学习率。我相信这个设计决定是因为项目中的一些其他模板、依赖项或代码。

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


比较

现在,让我们将Keras 的 Adadelta 实现原始论文进行比较

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

    new_a = self.rho * a + (1. - self.rho) * K.square(g)
    self.updates.append(K.update(a, new_a))
    
    Run Code Online (Sandbox Code Playgroud)

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

    在此处输入图片说明

  • 第 410 行: delta 计算(这里d_a是 delta 累加器,也是移动平均线的形式):

    update = g * K.sqrt(d_a + self.epsilon) / K.sqrt(new_a + self.epsilon)
    
    Run Code Online (Sandbox Code Playgroud)

    这完全对应

    在此处输入图片说明

  • 第 411 行:现在是棘手的部分。代码如下所示:

    new_p = p - lr * update
    
    Run Code Online (Sandbox Code Playgroud)

    这不遵循论文中的原始算法:

    在此处输入图片说明

    此外,这种学习率通过学习率衰减参数允许变化。然而,默认值lr在Keras是1.0,并且decay0.0因此默认情况下它不应该影响结果。