腾讯QQ浏览器2021AI算法大赛,北大冠军团队经验分享,附详细代码( 三 )

】传统的贝叶斯优化每轮只能推荐一个超参数配置 , 因此设计并行推荐方法是一个值得考虑的问题 。 我们尝试了系统中实现的并行贝叶斯方法 , 包括''median_imputation''中位数插补法 , 即使用历史观察结果的中位数 , 填补并行batch中推荐配置的性能 , 重新训练代理模型并得到下一个并行推荐配置 , 以及''local_penalization''局部惩罚法 , 对并行已推荐配置在采集函数上施加局部惩罚 , 这两种方法的目的都是提高对超参数空间的探索性 。 不过经过测试 , 在本次比赛问题上这些方法的效果不佳 , 最终我们采用多次优化采集函数并去重的方式执行并行推荐 , 达到了较好的性能 。
此外 , 为增大贝叶斯优化的探索性 , 保证算法收敛 , 我们设置每次推荐时使用随机搜索的概率为0.1 。
代码实现
初赛代码仅需调用OpenBox系统中的并行贝叶斯优化器SyncBatchAdvisor , 即可实现上述功能:
fromopenboximportSyncBatchAdvisorself.advisor=SyncBatchAdvisor(config_space=self.config_space,batch_size=5,batch_strategy='reoptimization',initial_trials=10,init_strategy='random_explore_first',rand_prob=0.1,surrogate_type='gp',acq_type='ei',acq_optimizer_type='random_scipy',task_id='thpo',random_state=47,)腾讯QQ浏览器2021AI算法大赛,北大冠军团队经验分享,附详细代码
文章图片
代码以图示为准
每轮执行推荐时 , 调用advisor的get_suggestions接口:
defsuggest(self,suggestion_history,n_suggestions):history_container=self.parse_suggestion_history(suggestion_history)next_configs=self.advisor.get_suggestions(n_suggestions,history_container)next_suggestions=[self.convert_config_to_parameter(conf)forconfinnext_configs]returnnext_suggestions腾讯QQ浏览器2021AI算法大赛,北大冠军团队经验分享,附详细代码
文章图片
代码以图示为准
决赛算法介绍
赛题理解
决赛问题在初赛的基础上 , 对每个超参数配置提供14轮的多精度验证结果 , 供算法提前对性能可能不佳的配置验证过程执行早停 。 同时 , 总体优化预算时间减半 , 最多只能全量验证50个超参数配置 , 因此问题难度大大增加 。 如何设计好的早停算法 , 如何利用多精度验证数据是优化器设计的关键 。
我们对本地公开的两个数据集进行了探索 , 发现了一些有趣的性质:
对于任意超参数配置 , 其第14轮的奖励均值位于前13轮置信区间内的概率为95% 。 对于任意超参数配置 , 其前13轮中任意一轮的均值比第14轮均值大的概率为50% 。 对于任意超参数配置 , 其14轮的置信区间是不断减小的 , 但均值曲线是任意波动的 。我们也对两两超参数配置间的关系进行了探索 , 比较了两两配置间前13轮的均值大小关系和第14轮的均值大小关系的一致性 , 发现:
在所有超参数配置之间 , 部分验证(1-13轮)和全量验证(14轮)均值大小关系一致的概率大于95% 。 在空间中最终性能前1%的超参数配置之间 , 这种一致性大约在50%到70%之间 。下图为data-30空间中最终奖励排名前2的超参数和随机8个超参数的奖励-轮次关系:
腾讯QQ浏览器2021AI算法大赛,北大冠军团队经验分享,附详细代码
文章图片
图:data-30搜索空间中2个最好配置和8个随机配置的奖励-轮数曲线 , 包含置信上界(蓝色)、均值(红色)、置信下界(绿色)曲线 。
我们在比赛开源代码仓库中提供了上述“数据探索”代码 。
上述数据探索结果表明 , 根据前13轮的置信区间 , 我们可以推测第14轮奖励均值的位置 。 利用前13轮的均值大小关系 , 我们可以估计第14轮最终均值的大小关系 , 但是由于数据噪音的存在 , 排名靠前的超参数配置大小关系无法通过部分验证结果预估 。 由此我们设计了两种早停算法 , 分别是基于置信区间的早停和基于排名的早停 , 将在下一部分详细描述 。