如何在 PyTorch 中实现学习率的随机对数空间搜索?

时间:2021-02-05 00:15:56

标签: machine-learning deep-learning pytorch hyperparameters learning-rate

我希望微调 GNN,我的主管建议探索不同的学习率。我遇到了 this tutorial video,他提到在实践中通常会进行超参数的随机对数空间搜索。为了介绍性教程,这里没有涉及。

非常感谢有关如何在 PyTorch 中实现此目的的任何帮助或指示。谢谢!

1 个答案:

答案 0 :(得分:1)

以对数形式设置比例可以让您考虑更理想的学习率值,通常值低于 0.1

想象一下,您希望采用介于 0.1 (1e-1) 和 0.001 (1e-4) 之间的学习率值。然后,您可以通过在其上应用以 10 为底的对数,log10(0.1) = -1 和 log10(0.001) = -4,在对数刻度上设置此下限和上限。 Andrew Ng 在此 video 中提供了更清晰的解释。

在 Python 中,您可以为此使用 np.random.uniform()

searchable_learning_rates = [10**(-4 * np.random.uniform(0.5, 1)) for _ in range(10)]
searchable_learning_rates
>>>
[0.004890650359810075,
 0.007894672127828331,
 0.008698831627963768,
 0.00022779163472045743,
 0.0012046829055603172,
 0.00071395500159473,
 0.005690032483124896,
 0.000343368839731761,
 0.0002819402550629178,
 0.0006399571804618883]

如您所见,您可以尝试从 0.0002819402550629178 到接近上限的 0.008698831627963768 学习率值。数组越长,您尝试的值就越多。

按照您提供的视频中的示例代码,您可以通过将 learning_rates 替换为 searchable learning_rates 来实现学习率的随机对数搜索

for batch_size in batch_sizes:
    for learning_rate in searchable_learning_rates:
    ...
    ...