Skip to main content

超参数优化

视频教程


你好,欢迎来到ClearML。在本视频中,我们将探讨除了远程重新运行任务之外,使用代理的另一种酷炫方式:超参数优化(HPO)。

到目前为止,我们知道ClearML可以轻松捕获我们的超参数和标量作为实验跟踪的一部分。我们还知道我们可以克隆任何任务并更改其超参数,因此它们将在运行时注入到原始代码中。在最后一个视频中,我们学习了如何使用代理让远程机器自动执行此任务。

那么... 我们可以像克隆任务100次一样,在每个克隆中注入不同的超参数,在10个代理上运行这些克隆,然后根据特定的标量对结果进行排序吗?

是的,是的,我们可以,这被称为超参数优化。而且我们也可以自动完成所有这些!你不可能自己去克隆和编辑那100个任务,对吧?

如果你还不知道什么是超参数优化,你可以在下面的描述中找到我们关于该主题的博客文章的链接。但在其最基本的形式中,超参数优化试图通过改变一组输入来优化某个输出。

假设我们一直在研究这个模型,并且无论如何都在跟踪我们的实验。我们可以在Web UI的超参数选项卡中看到一些需要处理的超参数。它们是通过在我们的代码中使用Task.connect函数记录的。这些是我们的输入。我们还有一个称为validation/epoch_accuracy的缩放器,我们希望尽可能提高它。这是我们的输出。例如,我们也可以选择最小化epoch_loss,这是你可以自己决定的事情。

我们可以看到,没有使用代码来记录标量。这是自动完成的,因为我们正在使用TensorBoard。

我们在这里的示例中使用了一个训练脚本作为我们的任务,但优化器实际上并不关心我们的任务中有什么,它只关心输入和输出。所以你可以基本上优化任何你想要的东西。

我们开始优化这个模型唯一需要做的就是编写一个小的python文件,详细说明我们希望优化器做什么。

当您是ClearML Pro用户时,您可以直接从UI启动优化器,但稍后会详细介绍。

首先,ClearML中的一切都是一个任务。优化器本身也是一个任务,因此我们通过使用task_type参数让服务器知道这一点。

接下来,我们通过提供其ID来选择我们想要优化的任务。

现在优化器需要它的输入和输出。对于输入,我们可以告诉它从离散的选项列表中选择一个参数,或者在某个范围内选择。超参数的名称由它报告的部分组成,后面跟着一个斜杠,然后是它的名称。

对于输出,我们告诉优化器我们想要优化的标量是什么。你可以在原始任务中的标量部分找到必要的信息。指标标题是图表的标题,指标系列是轨迹,符号是我们想要最小化还是最大化这个标量。

还有许多参数可以调整,但如果您想深入了解,请查看我们网站上的其他HPO博客文章以及描述。

就是这样!只需几行代码,我们就可以优化一个任务。如果我们现在看一下实验列表,我们可以看到我们的优化器任务和不同的克隆都显示在这里。每个克隆都使用与原始任务相同的代码,但注入了不同的超参数。

这真的很酷!与大多数优化库不同,我们没有将HPO过程插入到原始代码中,而是将其放在了代码之上。因此,我们可以将代码与优化过程完全分开。这再次意味着我们可以优化任何我们想要的东西。

我们现在可以通过查看图表部分下的优化器任务来跟踪优化过程的进展。在这里,我们可以看到一些有趣的事情正在发生。

图中的每个点代表一个任务,或者使用特定超参数配置运行代码的一次执行。它将为您提供所有任务执行情况的快速概览。

下一个图表非常酷,旨在让您直观地了解哪些参数范围是好的,以及哪些参数对最终结果影响最大。例如,在这里我们可以清楚地看到,对于我们的任务,adam优化器比sgd优化器要好得多。

然后我们有表格,它是一个包含所有任务的目标值、参数组合和当前状态的排序列表。

正如我们之前所见,如果您是ClearML专业用户,您甚至可以直接从UI启动优化器,无需优化器脚本,并且您将获得一个更美观的概览仪表板。这意味着您可以在短短一分钟内优化您的任务。

别忘了自动扩展功能!当然,你可以免费使用代码来运行它,但使用ClearML Pro,你也可以在用户界面中进行设置。这意味着,从零开始,你可以在几分钟内拥有一个自动扩展的云虚拟机集群,在你的实验任务上运行超参数优化。这有多酷呢?

在下一个视频中,我们将看看自动化的另一个好例子:流水线。同时,为什么不尝试在app.clear.ml上免费优化您现有的一个模型,如果您需要任何帮助,别忘了加入我们的Slack频道