1

我有一个非常复杂的树结构搜索空间。在顶层,我需要做出分类选择——探索哪个参数子空间。举个简单的例子,你可以想象我需要在使用线性回归、SVM 或某些神经网络之间做出决定。每个子空间的大小都大不相同,我希望 Optuna 采样器(我正在考虑使用 TPESampler)花更多时间探索更大的空间。

如果我做

  trial.suggest_categorical("network_type", ["linear", "svm", "nn"])

和分支取决于这里选择的内容,我将探索比我想要的更多的小子空间。从概念上讲,如果我可以为每个类别传递一个weight,它将解决我的问题。

我可以想象要求一个随机浮点数并将其映射到正确的类别,但它有一些明显的问题,包括:查看结果更难;采样器实际上并不知道它是一个分类空间(例如靠近的浮点数将代表完全不同的类别)。

在这个简单的例子中,TPESampler 可能会发现哪个“network_type”效果好并更频繁地选择它。在我的实际用例中,我有一千多个类别。

编辑:

我很高兴了解人们的经验,即 Optuna 在没有太多先验的情况下运行良好。我想这是非常依赖问题的。当搜索空间是高度结构化的具有 O(1000) 基数的多个分支时,即使从每个叶子空间中获取一个样本也可能非常困难。

可能没有自动调谐器可以解决我的问题,但我仍然希望知道实际问题的答案。有人能以某种方式“指导” optuna 在分类分布中的选择吗?

4

1 回答 1

0

感觉就像您在尝试第二次猜测黑盒优化器。我建议让 Optuna 学习空间并寻找有希望的答案。

在这个简单的例子中,TPESampler 可能会发现哪个“network_type”效果好并更频繁地选择它。

正确的。找到行之有效的价值观不是您想要做的吗?

就个人而言,我曾尝试使用可视化并手动减少搜索空间来“帮助”Optuna。一般来说,当我可以看到更好的搜索区域时,我发现 TPE 已经知道它们,所以只要让 Optuna 运行,我就会得到更快的答案。

于 2021-07-13T01:26:20.727 回答