参赛者需要提交超参数生成的算法代码 , 算法每一轮需要提供一组超参数 , 裁判程序会返回超参数对应的 reward 。 参赛者的算法要求在限定的迭代轮次和时间内 , 找到 reward 尽可能大的一组超参数 , 最终按照找到的最大 reward 来计算排名 。
针对该赛题 , 优化器需要在每轮以同步并行方式推荐 5 个超参数配置 , 共执行 20 轮推荐 , 即总共搜索 100 个超参数配置 。 对每个超参数配置均执行完整资源的验证 , 并且在比赛的问题抽象中 , 不同超参数的验证时间相同 。
根据现有研究 , 贝叶斯优化是超参数优化(黑盒优化)问题上 SOTA 的方法 , 而且比赛场景中的超参数空间维度不超过 6 维 , 并非超高维问题 , 较适合贝叶斯优化方法 , 因此我们选定贝叶斯优化作为初赛的搜索算法 。 另外 , 问题中所有的超参数均为连续型(离散浮点型)超参数 , 这决定了我们的超参数空间定义方法、贝叶斯优化代理模型以及优化器的选择 , 接下来也将分别进行介绍 。
算法核心技术——贝叶斯优化模块介绍
贝叶斯优化简介
超参数优化是典型的黑盒优化问题 , 即对于目标函数(超参数 - 奖励函数) , 具体表达式或导数信息是不可知的 , 只能通过尝试输入获取输出来推测目标函数的内部情况 。
贝叶斯优化是解决黑盒优化问题的一个迭代式框架 , 优化流程包括如下步骤:
- 使用代理模型(surrogate model)对已有观测历史数据(尝试过的超参数和对应的奖励)进行建模拟合;
- 使用采集函数(acquisition function)评估搜索空间内的超参数 , 平衡探索与利用 。 对采集函数执行优化 , 找到验证价值最大(使采集函数值最大)的下一组超参数;
- 在目标函数上评估超参数 , 得到奖励;
- 将新评估的超参数和结果加入观测历史数据 , 重复以上步骤 。
贝叶斯优化算法封装在 OpenBox 系统中 , 代码实现的主要流程如下:
# 使用贝叶斯优化得到超参数配置推荐
def get_suggestions(self, history_container, batch_size):
# ...
# 基于观测历史数据 , 训练贝叶斯优化代理模型
self.surrogate_model.train(X, Y)
# ...
# 更新采集函数(使用EI函数时 , 要更新当前最优观测值)
self.acquisition_function.update(eta=incumbent_value, ...)
# 使用优化器优化采集函数 , 得到使采集函数值最大的一个(一组)超参数
challengers = self.optimizer.maximize(...)
# ...
return batch_configs_list # 依据并行算法 , 得到下一轮需要验证的超参数
推荐阅读
- 安全|Redline Stealer恶意软件:窃取浏览器中存储的用户凭证
- 吴祖榕|上线 2 周年,用户数破 2 亿,腾讯会议和我们聊了聊背后的产品法则
- 硬件|上线两年用户破两亿,腾讯会议还能做什么?
- 设计|腾讯宣布企业级设计体系 TDesign 对外开源
- 警告!|冒充老干妈员工诈骗腾讯被判12年 两被告提出上诉
- Tencent|继百度网盘后腾讯微云也已解除限速 不用单独下载App
- 文化|“视频会员”的意义,藏在腾讯视频VIP九周年里
- 彩云|解除限速!腾讯微云 App 更新,提供无差别速率服务
- 公司|《Control》开发商正在与腾讯合作开发一款PVE射击网游
- 国计民生|25万亿级新蓝海!百度、华为、腾讯重磅出击,抢食智慧城市"大蛋糕",AI巨头如何赋能?来看真实案例
