如何(系统地)调整以梯度下降为优化器的学习率?

机器算法验证 Python 机器学习 张量流 深度学习
2022-03-02 22:59:43

ML/DL 领域的局外人;开始了基于 TensorFlow 的 Udacity 深度学习课程;做作业 3 问题 4;尝试使用以下配置调整学习率:

  • 批量大小 128
  • 步数:足以填满 2 个 epoch
  • 隐藏层大小:1024、305、75
  • 权重初始化:用标准截断正常。sqrt(2/n) 的偏差,其中 n 是前一层的大小
  • 辍学保持概率:0.75
  • 正则化:未应用
  • 学习率算法:指数衰减

玩弄学习率参数;在大多数情况下,它们似乎没有效果;代码在这里结果:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • 我应该如何系统地调整学习率?
  • 学习率与步数有什么关系?
4个回答

使用梯度下降优化器。是一个很好的概述。

关于代码,请查看本教程是一些例子。

就个人而言,我建议使用 ADAM 或 RMSprop。仍然有一些超参数需要设置,但有一些“标准”的超参数在 99% 的时间内都有效。对于 ADAM,您可以在此幻灯片中查看其论文和 RMSprop

编辑

好的,您已经使用了梯度优化器。然后您可以执行一些超参数优化来选择最佳学习率。最近,已经提出了一种自动化方法此外, Frank Hutter在自动超参数调优方面有很多有前途的工作。

更一般地说,看看AutoML Challenge,您还可以在其中找到团队的源代码。在这个挑战中,目标是自动化机器学习,包括超参数调整。

最后,LeCun 的这篇论文DeepMin 最近的教程(查看第 8 章)提供了一些可能对您的问题有用的见解。

无论如何,请记住(特别是对于简单的问题),在使用梯度下降优化器时,学习率不会对学习产生太大影响是正常的。通常,这些优化器非常可靠并且使用不同的参数。

您可以自动调整许多机器学习算法本身中的超参数,或者只是梯度下降优化器的超参数,即学习率。

一个很受欢迎的图书馆是留兰香。

https://github.com/JasperSnoek/spearmint

Online Learning Rate Adaptation with Hypergradient Descent中给出了一个最近的自动学习率调节器

这种方法实现起来非常简单,SGD 的核心结果如下:

αt=αt1+βf(θt1)Tf(θt2)

其中是一个(超)超参数。该方法也适用于其他基于梯度的更新(基于动量的方法)。不需要验证集:它只需要存储之前的梯度这个想法是使用目标函数对学习率 ( ) 的偏导数,来推导 alpha 的更新规则。βe.g.f(θt2)α

有趣的是,我在现有问题的基础上实现了这一点,并观察到了更好的结果。我没有调整,而是从论文中建议的范围中挑选出来的。βα0

要调整超参数(无论是学习率、衰减率、正则化还是其他),您需要建立一个保留数据集;此数据集与您的训练数据集不相交。在调整了具有不同配置的几个模型(其中配置 = 每个超参数的特定选择)之后,您可以通过选择能够最大化保持精度的配置来选择配置。