文章目录
开发进度面板
TODO LIST
- 热启动的支持,并对
timestamps
做调整保证HpBandSter的可视化功能不出错 (high)- 将SMAC对incumbent的打印功能(调研incumbent_trajectory)移植过来 (high)
- 加载最好模型时选用budget最大的模型 (medium)
- 集成学习时支持不同尺寸的验证数据 (参考PoSH-AutoSklearn) (medium)
- 支持
iterations
budget_mode,并用redis对workflow做缓存(调研redis的持久化) (high)连续减半(SuccessiveHaving)删除废弃模型的redis键值对 (medium)- 对BOHB的kde模型做进一步调研并做充分测试 (low)
- 整合scikit-optimize的GP,RF,ET,GBRT代理模型 (low)
- 将SMAC的局部搜索功能移植过来 (low)
- 调研scikit-optimize的EI, PI, LCB等采集函数,整合EIPS,PIPS等采集函数 (low)
- 整合scikit-optimize的可视化功能 (low)
- 整合BOAH的可视化功能 (low)
- 整合HyperOpt的TPE和adaptive-TPE代理模型 (low)
- 调研超参优化库的benchmark,并在benchmark上测试 (low)
- 重新支持手动建模 (medium)
- 重新跑通所有单元测试(除了HttpClient) (medium)
- 调研HpBandSter系统对于异常记录是如何表达的,并适配这种表达
- 避免两次启动BOHB随机采样时样本相同问题?
异常边界条件面板
- 如果ConfigSpace的样本空间特别少,例如100次以下,20次以下,是否可以自动切换为网格搜索?
- 对
_get_sorted_trial_records
,_get_best_k_trial_ids
两个函数的budget_id
做出限制。因为用户可能更换过budget方案,例如原先用budget=4对应5折,后面用budget=4对应10折。欣慰的是,热启动时budget_id是where条件之一。
整合HpBandSter开发方案
实例化BOHB或其他Master需要提供ConfigSpace
class BOHB(Master):
def __init__(
self,
configspace=None,
eta=3,
min_budget=0.01,
max_budget=1,
min_points_in_model=None,
top_n_percent=15,
num_samples=64,
random_fraction=1 / 3,
bandwidth_factor=3,
min_bandwidth=1e-3,
**kwargs
):
配置空间:
configspace=None
HyperBand相关:
eta=3,
min_budget=0.01,
max_budget=1,
CG_BOHB相关:
min_points_in_model=None,
top_n_percent=15,
num_samples=64,
random_fraction=1 / 3,
bandwidth_factor=3,
min_bandwidth=1e-3,
迭代类型 |
---|
HyperBand |
SuccessiveHaving |
Simple |
但是Simple
其实可以看做是SuccessiveHaving
的特殊情况(min_budget==max_budget)
所以只需要4个参数就能囊括以上3种迭代类型:
迭代控制参数 |
---|
min_budget |
max_budget |
eta( η \eta η) |
SH_only(这个参数参考PoSH-AutoSklearn) |
除了以上的迭代控制参数,用户再提供一个配置采样器。在fit
函数启动后,传入ConfigSpace,就组成了一个优化器对象(Optimizer),这个类继承自Master。
重构fit
,拆成一下几个phase:
phase | comment |
---|---|
input_experimental_data | 传入实验依赖的各种数据,并计算出task_id , hdl_id |
start_nameserver | 将task_id , hdl_id , user_id 组装为run_id ,并结合在Estimator构造参数中传入的ns_port等参数启动NS |
run_evaluators | 根据input_experimental_data 传入的实验数据,加上构造参数传入的 n_workers ,worker_host 等参数进行实例化,并启动。重写 run 函数,增加concurrent_type 参数。 |
run_optimizer | 在执行input_experimental_data 后,将ConfigSpace参数和构造器中的其他参数一并实例化 Optimizer 对象,并启动。 |
为了与HpBandSte