常见问题解答

我发现了一个问题。该怎么办?

如果你认为你发现了问题或 bug,请使用我们的GitHub 问题跟踪器。请尽可能多地提供关于你环境的信息以及一个能够重现该问题的最小工作示例。

似乎有些 workers 正在等待某些东西。但我没有收到错误消息。这是正常行为吗?

不,不是。请尝试启用调试输出,以查看 worker 端是否发生任何异常。尝试在本地运行你的优化,可以使用非常小的 budgets,或者用一个虚构值替换昂贵的计算。通常,问题源于 compute 方法返回的值无法被底层的 Pyro4 包序列化。确保 compute 方法返回的所有值都是 Python 的内置数据类型,例如列表和字典。

Pip 找不到 HpBandster 包。

请检查你是否使用了 pip3。HpBandster 是为 python3 开发的。

如何设置 budgets 以及我应该优化多少个 iterations?

budgets 的含义和实际值高度依赖于具体问题,因此我们无法在这里给出一般性答案。请查阅最佳实践以获取关于 budgets 和 iterations 数量的一些建议。

BOHB 采样的配置都不来自模型?

如果你分析了你的运行结果,发现没有配置是从模型中采样的,可能有几种解释

  1. 也许你的运行时间太短了。BOHB 在对任何 budget 进行 d+2 次 observations 后开始构建模型(通常首先在最小的 budget 上进行),其中 d 是 configuration space 中的参数数量。如果你的运行时间相对于空间的 dimensionality 而言较短,可能还没有可供采样的模型。考虑运行更长时间 (请参考此高级示例<warmstarting>,了解如何从之前的评估继续)。
  2. 你的 ConfigurationSpace 可能包含 BOHB 不支持的特性,即 ordinals 和 constants。这些特性由 ConfigSpace 包支持,但目前 BOHB 尚未处理。
  3. 如果你的搜索空间受到多个 forbidden clauses 的限制,从模型采样可能只会产生 forbidden configurations(实践中不太可能,但仍有可能)。为了让 BOHB 了解这些 constraints 并学会避免它们,尝试从 configuration space 定义中移除 forbiddens,并在 compute 中让 worker 检查它们。如果一个 configuration 违反了 constraints,你可以在 worker 中直接抛出一个 exception。这样,HpBandSter 会自动捕获它,并且基于模型的 optimizers 会将最差的 loss 与该 configuration 相关联。这样,BOHB 就学会了避免 forbidden regions,并尝试在 feasible configurations 的空间中积极采样。

在存在 forbidden clauses 的情况下,如何提高性能?

虽然 ConfigSpace 允许定义 forbidden clauses,但这种纳入 constraints 的方式对于基于模型的 optimizers 来说是次优的,因为它们无法了解这些 constraints。有关解决方案,请参阅上面问题的 c 部分。