入门指南#
SMAC 需要四个核心组件(配置空间、目标函数、场景和外观)来运行优化过程,所有这些组件都将在本页进行解释。
它们之间的交互方式如下

配置空间#
配置空间定义了超参数的搜索空间,因此也定义了可调参数的合法范围和默认值。
from ConfigSpace import ConfigSpace
cs = ConfigurationSpace({
"myfloat": (0.1, 1.5), # Uniform Float
"myint": (2, 10), # Uniform Integer
"species": ["mouse", "cat", "dog"], # Categorical
})
请参阅 ConfigurationSpace 的文档了解更多详细信息。
目标函数#
目标函数接受来自配置空间的一个配置,并返回一个性能值。例如,您可以使用神经网络对您的数据进行预测,并获得一些验证性能。例如,如果您调整网络的优化器的学习率,每个学习率都会改变网络的最终验证性能。这就是目标函数。SMAC 尝试通过尝试不同的值并评估目标函数来找到性能最佳的学习率——以一种高效的方式。
def train(self, config: Configuration, seed: int) -> float:
model = MultiLayerPerceptron(learning_rate=config["learning_rate"])
model.fit(...)
accuracy = model.validate(...)
return 1 - accuracy # SMAC always minimizes (the smaller the better)
注意
通常,目标函数的参数取决于强化器。然而,在所有情况下,第一个参数必须是配置(此处可以使用任意参数名)和一个种子。如果您在场景中指定了实例,SMAC 还需要 instance
作为参数。如果您使用 SuccessiveHalving
或 Hyperband
作为强化器但没有指定实例,SMAC 会将 budget
作为参数传递给目标函数。但不用担心:如果缺少某些内容或某些内容未使用,SMAC 会告诉您。
警告
SMAC 总是最小化目标函数返回的值。
警告
SMAC 将 instance
或 budget
传递给目标函数,但从不同时传递。
场景Scenario
使用 Scenario 来提供环境变量。例如,如果您想通过时间限制来限制优化过程,或者想指定保存结果的位置。
from smac import Scenario
scenario = Scenario(
configspace=cs,
name="experiment_name",
output_directory=Path("your_output_directory")
walltime_limit=120, # Limit to two minutes
n_trials=500, # Evaluated max 500 trials
n_workers=8, # Use eight workers
...
)
注意
如果未指定 name
,则使用实验的哈希值。稍后再次运行相同的实验将生成完全相同的哈希值。这很重要,因为如果未在 Facade 中另行指定,优化将基于现有评估进行热启动。
外观#
警告
默认情况下,外观会尝试基于预先存在的日志进行热启动。此行为可以通过 overwrite
参数指定。
一个 facade 是 SMAC 的入口点,它为您构建一个默认的优化流程。SMAC 提供了各种外观,它们满足许多常见用例,对于实现峰值性能至关重要。外观背后的想法是为 SMAC 的所有组件提供一个简单的接口,使其易于使用和理解,而无需深入研究细节。但是,鼓励专家根据其特定的超参数优化需求更改组件。下表(可水平滚动)显示了支持的功能并揭示了默认的 components
黑盒 | 超参数优化 | 多保真度 | 算法配置 | 随机 | Hyperband | |
---|---|---|---|---|---|---|
#参数 | 低 | 低/中/高 | 低/中/高 | 低/中/高 | 低/中/高 | 低/中/高 |
支持实例 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
支持多保真度 | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ |
初始设计 | Sobol | Sobol | 随机 | 默认 | 默认 | 默认 |
代理模型 | 高斯过程 | 随机森林 | 随机森林 | 随机森林 | 未使用 | 未使用 |
采集函数 | 期望提升 | 对数期望提升 | 对数期望提升 | 期望提升 | 未使用 | 未使用 |
采集函数最大化器 | 局部搜索和排序随机搜索 | 局部搜索和排序随机搜索 | 局部搜索和排序随机搜索 | 局部搜索和排序随机搜索 | 未使用 | 未使用 |
强化器 | 默认 | 默认 | Hyperband | 默认 | 默认 | Hyperband |
运行历史编码器 | 默认 | 对数 | 对数 | 默认 | 默认 | 默认 |
随机设计概率 | 8.5% | 20% | 20% | 50% | 未使用 | 未使用 |
信息
多保真度外观是与 BOHB 最接近的实现。
注意
我们想强调的是,SMAC 是一个高度模块化的优化框架。外观接受许多参数来指定流程的组件。另请注意,与以前的版本不同,传递的是实例化对象而不是 kwargs。
外观可以直接从 smac
模块导入。
from smac import BlackBoxFacade as BBFacade
from smac import HyperparameterOptimizationFacade as HPOFacade
from smac import MultiFidelityFacade as MFFacade
from smac import AlgorithmConfigurationFacade as ACFacade
from smac import RandomFacade as RFacade
from smac import HyperbandFacade as HBFacade
smac = HPOFacade(scenario=scenario, target_function=train)
smac = MFFacade(scenario=scenario, target_function=train)
smac = ACFacade(scenario=scenario, target_function=train)
smac = RFacade(scenario=scenario, target_function=train)
smac = HBFacade(scenario=scenario, target_function=train)