如何(系统地)使用梯度下降作为优化器来调整学习率?


12

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

  • 批次大小128
  • 步骤数:足以填满2个纪元
  • 隐藏层的大小:1024、305、75
  • 重量初始化:使用std正常截断。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
  • 我应该如何系统地调整学习率?
  • 学习率与步数有何关系?

1
tpot提供了自动ML调整管道
denfromufa 2016年

Answers:


4

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

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

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

编辑

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

通常,请看一下AutoML Challenge,您还可以在这里找到团队的源代码。在这一挑战中,目标是使机器学习自动化,包括超参数调整。

最后,LeCun的本文DeepMin的最新教程(请参见第8章)提供了一些见解,这些见解可能对您的问题有用。

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


我已经在代码中使用了Gradient Descent Optimizer。感谢您的链接!
Thoran '16

@Thoran好的,没有阅读代码:D(这个问题没有提到优化程序)。我已经修改了答案,为您提供更多帮助:)
Simon

良好的发展使像<这样的局外人更容易工作。您是否知道步数和学习率之间的关系?我的直觉告诉我,如果有更多的步骤,学习过程应该会更慢。
Thoran '16

@Thoran通常是的,步骤数越高,过程越慢(但也越稳定)。我通过添加一些“技巧”的参考来进一步编辑我的答案,这些参考对于手工调整超参数很有用。
西蒙

非常酷的东西,我要花一些时间才能消化它:D
Thoran


1

带有超梯度下降的在线学习速率调整中提供了一种最新的自动学习速率调谐器

此方法非常易于实现,SGD的核心结果为:

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

其中是一个(超)超参数。该方法还适用于其他基于梯度的更新(基于动量的方法)。无需验证集:它只需要存储先前的渐变。这个想法是使用目标函数的偏导数和学习率()来得出alpha的更新规则。例如 ˚F θ - 2αβe.g.f(θt2)α

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


0

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


保留数据集与测试或验证数据集有何不同?
Thoran '16

holdout是验证的另一个名称。基本上,您有三个不相交的数据集:训练,保持和测试。训练仅用于学习模型权重(例如,使用梯度下降)。Heldout用于调整模型参数。测试仅用于测量泛化性能(即,如何期望我的模型对看不见的数据执行性能测试)
Alireza,2016年

感谢@Alireza花时间解释。我已经在使用验证数据集。如果没有测试,就无法测量准确性!
Thoran '16

好吧,您最初的问题是确定学习率:如果原始帖子的第一列保持(而不是训练)准确性,那么您可以说0.5优于0.1(尽管您应该继续尝试> 0.5)。[注意:如果您要重新进行实验,只需对一些数据进行分区以进行测试]
Alireza,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.