HpBandSter搜索空间完全指南:用ConfigSpace定义连续/整数/类别超参数

📅 2026/8/26 15:27:52
HpBandSter搜索空间完全指南:用ConfigSpace定义连续/整数/类别超参数
HpBandSter搜索空间完全指南用ConfigSpace定义连续/整数/类别超参数【免费下载链接】HpBandStera distributed Hyperband implementation on Steroids项目地址: https://gitcode.com/gh_mirrors/hp/HpBandSterHpBandSterHyperBand on STERoids是一个分布式的超参数优化框架其核心玩法是先用 ConfigSpace 把要搜索什么描述清楚再交给 BOHB、Hyperband 等优化器自动找最优解。本文用项目自带的示例带你 10 分钟掌握如何定义连续、整数、类别三类超参数以及如何用条件依赖约束它们的关系。为什么 HpBandSter 必须先定义搜索空间优化器不会凭空猜测你要调什么。HpBandSter 把超参数集合称为配置空间ConfigurationSpace它是每次运行优化器的必传参数搜索空间决定了采样的维度与取值范围空间描述越精确含依赖约束优化器浪费的无效评估就越少HpBandSter 的所有优化器BOHB / Hyperband / RandomSearch都接收同一个ConfigurationSpace对象定义一次即可复用。安装后就可以开始定义空间它由依赖包 ConfigSpace 提供随框架一起安装pip install hpbandster 建议把搜索空间定义写在 Worker 里静态方法get_configspace保证优化脚本与训练脚本永远使用同一份空间。参考最佳实践文档 docs/source/best_practices.rst。第一步3 行代码定义你的第一个搜索空间项目入门示例里整个搜索空间只有 1 个连续参数x取值 0~1import ConfigSpace as CS config_space CS.ConfigurationSpace() config_space.add_hyperparameter(CS.UniformFloatHyperparameter(x, lower0, upper1))完整代码见 hpbandster/examples/commons.py第 48–53 行。这就是 HpBandSter 搜索空间的最小形态一个空间容器 N 个超参数 若干条件约束。三种超参数类型连续、整数、类别怎么写真实问题远比单参数复杂。项目 MNIST 示例的 PyTorch Worker 给出了教科书级的完整写法它一次性覆盖了全部三种类型源码见 hpbandster/examples/example_5_pytorch_worker.py 第 160–208 行参数名类型取值范围说明学习率lrfloat对数[1e-6, 1e-1]logTrue对数采样优化器optimizercategorical{Adam, SGD}离散选择SGD 动量sgd_momentumfloat[0, 0.99]仅在 SGD 时生效卷积层数num_conv_layersinteger[1, 3]只能取整数各层滤波器数num_filters_*integer对数[4, 64]对数整数采样Dropout 率dropout_ratefloat[0, 0.9]普通连续参数全连接单元数num_fc_unitsinteger对数[8, 256]对数整数采样连续超参数线性区间 vs 对数区间import ConfigSpace.hyperparameters as CSH # 普通线性区间dropout 在 [0, 0.9] 均匀采样 dropout_rate CSH.UniformFloatHyperparameter( dropout_rate, lower0.0, upper0.9, default_value0.5, logFalse) # 学习率这类跨数量级参数务必用对数尺度 lr CSH.UniformFloatHyperparameter(lr, lower1e-6, upper1e-1, default_value1e-2, logTrue)⚠️新手最常见的坑学习率、滤波器数量级跨度大若不加logTrue采样会严重偏向大值区间优化器很难摸到 1e-5 附近的甜点。整数超参数层数、滤波器数num_conv_layers CSH.UniformIntegerHyperparameter( num_conv_layers, lower1, upper3, default_value2) # 滤波器数量级跨度大同样建议对数整数 num_filters_1 CSH.UniformIntegerHyperparameter( num_filters_1, lower4, upper64, default_value16, logTrue)整数参数只会在 [1, 3] 这样的离散点上取值适合层数单元数这类只能取整的结构参数。类别超参数在几种结构中做选择optimizer CSH.CategoricalHyperparameter(optimizer, [Adam, SGD])类别参数表示从有限选项里挑一个比如优化器、激活函数、正则方式。它也是后面写条件依赖的触发器。进阶技巧用条件约束表达参数依赖真实搜索空间里参数往往互相牵制选了 SGD 才有动量参数只有 2 层以上网络才需要第二层滤波器数。ConfigSpace 通过条件Condition表达这种依赖cs.add_hyperparameters([lr, optimizer, sgd_momentum]) # 只有 optimizer SGD 时sgd_momentum 才参与采样 cond CS.EqualsCondition(sgd_momentum, optimizer, SGD) cs.add_condition(cond) # 卷积层数 2 时才采样第二层滤波器数 cond CS.GreaterThanCondition(num_filters_2, num_conv_layers, 1) cs.add_condition(cond)这样优化器永远不会生成选了 Adam 却带上动量这种无效配置直接砍掉搜索空间里的无效区域。除了EqualsConditionConfigSpace 还支持GreaterThanCondition、InCondition、OrCondition以及 Forbidden 禁止关系完整清单见 hpbandster/examples/example_5_keras_worker.pyKeras 版与 PyTorch 版空间定义完全一致可对照学习。把搜索空间接入 HpBandSter标准工作流定义好空间后接入 HpBandSter 只需 5 步官方速览文档 docs/source/quickstart.rst 有逐行注释启动 NameServer所有节点之间的总机启动 Worker负责用某个配置跑一次训练并返回 loss创建优化器把ConfigurationSpace对象交给 BOHB或 Hyperband、RandomSearch运行bohb.run(n_iterations...)并关闭服务从 Result 对象读取最优配置incumbent。bohb BOHB(configspacew.get_configspace(), run_idexample1, nameserver127.0.0.1, min_budgetargs.min_budget, max_budgetargs.max_budget) res bohb.run(n_iterationsargs.n_iterations)两个和搜索空间强相关的细节min_budget/max_budgetHyperband 的多保真度评估依赖预算它代表训练多少 epoch / 用多少数据。预算定义不合理再好的搜索空间也白搭HpBandSter 永远最小化想最大化准确率时请返回1 - accuracy作为 loss见 hpbandster/examples/example_5_keras_worker.py 第 178 行的注释。避坑清单老手总结的搜索空间设计经验 来自 docs/source/best_practices.rst 的官方建议控制维度官方建议在必要时简化空间到10 维以内高维空间会让 KDE 建模类优化器失效对数尺度学习率、滤波器数、隐藏层宽度这类跨数量级参数加logTrue给每个参数设合理的default_value随机初始化阶段会用到先本地小预算跑通在 Worker 脚本末尾加几行代码用随机配置 极小预算验证空间与训练代码匹配见 hpbandster/examples/example_5_pytorch_worker.py 第 270–277 行。效果验证看看搜索空间优化后的真实曲线下图展示了 HpBandSter 在带条件依赖的复杂搜索空间中不同预算b1/3/9下 loss 随时间的下降过程——小预算配置先被淘汰大预算配置被逐步精炼搜索空间设计得是否合理一个关键指标是不同预算之间的排名相关性。相关性越高说明小预算评估越能预测大预算表现Hyperband 类算法越有效如果想逐条对比每个采样配置的训练曲线可用交互式可视化工具示例代码见 hpbandster/examples/plot_example_7_interactive_plot.py左侧列出所有已评估配置小结搜索空间四步法CS.ConfigurationSpace()创建容器按类型加参数UniformFloatHyperparameter/UniformIntegerHyperparameter/CategoricalHyperparameter跨数量级的参数加logTrue用EqualsCondition/GreaterThanCondition描述依赖关系。空间定义好之后把它作为configspace参数传入任意 HpBandSter 优化器即可开跑。更多真实场景MNIST 上的 Keras/PyTorch 完整示例、续跑与热启动都在 hpbandster/examples/ 目录中照着改参数就能上手。【免费下载链接】HpBandStera distributed Hyperband implementation on Steroids项目地址: https://gitcode.com/gh_mirrors/hp/HpBandSter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考