automl / HpBandSter

a distributed Hyperband implementation on Steroids
BSD 3-Clause "New" or "Revised" License
611 stars 109 forks source link

Unexpected distribution of the budget and the sampled configurations #85

Closed tschechlovdev closed 4 years ago

tschechlovdev commented 4 years ago

Hi, I am wondering how many configurations are actually sampled during a run of Hyperband/BOHB. As explained in this issue, I understand that when, e.g., setting min_budget=1 and max_budget=10 with eta=3, Hyperband starts by selecting 10 configurations with budget=1. Then from these, the best 1/eta (1/3 in this case) configs are taken to the next round and so on. This would mean if I n_iterations=1, only one SH run is performed and thus, 10 (first run) + 3 (second run) + 1 (last run) = 14 configurations should be executed overall, while only one with the largest budget.

However, when executing Hyperband for my example I get the following result:

config budget loss 0 0 1.111111 1.065852 1 1 1.111111 0.804863 2 2 1.111111 0.709007 3 3 10.000000 0.391982 4 3 10.000000 0.337096 5 3 10.000000 0.337096 6 6 1.111111 0.575394 7 7 1.111111 0.550342 8 8 3.333333 0.467931 9 9 3.333333 0.400403 10 10 3.333333 0.468913 11 11 3.333333 0.461708 12 12 1.111111 1.027357

This is the result when calling

 res1, res2 = result.get_pandas_dataframe()
 merged_result = pd.merge(res1, res2, right_index=True, left_index=True)

on the result of Hyperband. I removed the exact configs with dummy values because I do not think they are important here. However, what I do not get, is why there are 3 configurations with the largest budget? Moreover, it happens that these are actually the same configurations. I tried it multiple time and the same happened, so it is not due to some non-deterministic behaviour.

In addition, why do I have to specify n_iterations, shouldn't that be determined by the budgets and eta? If I do not specify it, the default is 1, right?