在我看来,将超频带与贝叶斯优化搜索相结合的自然方法是让搜索算法确定每个括号并让超频带调度程序运行该括号。也就是说,贝叶斯优化搜索每个括号只运行一次。查看Tune的源代码,我不清楚 Tune 库是否应用了这种策略。
特别是,我想知道 Tune 库如何处理搜索算法和试验调度程序之间的传递。例如,如果我将 SkOptSearch 和 AsyncHyperBandScheduler(或 HyperBandScheduler)一起调用如下:
sk_search = SkOptSearch(optimizer,
['group','dimensions','normalize','sampling_weights','batch_size','lr_adam','loss_weight'],
max_concurrent=4,
reward_attr="neg_loss",
points_to_evaluate=current_params)
hyperband = AsyncHyperBandScheduler(
time_attr="training_iteration",
reward_attr="neg_loss",
max_t=50,
grace_period=5,
reduction_factor=2,
brackets=5
)
run(Trainable_Dense,
name='hp_search_0',
stop={"training_iteration": 9999,
"neg_loss": -0.2},
num_samples=75,
resources_per_trial={'cpu':4,'gpu':1},
local_dir='./tune_save',
checkpoint_freq=5,
search_alg=sk_search,
scheduler=hyperband,
verbose=2,
resume=False,
reuse_actors=True)
根据上面链接的源代码和此处的源代码,在我看来,sk_search
一次最多返回 4 个试验组,但超带应该一次查询sk_search
算法以进行N_sizeofbracket
试验。