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


算法核心技术——贝叶斯优化模块介绍
贝叶斯优化简介
超参数优化是典型的黑盒优化问题 , 即对于目标函数(超参数-奖励函数) , 具体表达式或导数信息是不可知的 , 只能通过尝试输入获取输出来推测目标函数的内部情况 。
贝叶斯优化是解决黑盒优化问题的一个迭代式框架 , 优化流程包括如下步骤:
使用代理模型(surrogatemodel)对已有观测历史数据(尝试过的超参数和对应的奖励)进行建模拟合;使用采集函数(acquisitionfunction)评估搜索空间内的超参数 , 平衡探索与利用 。 对采集函数执行优化 , 找到验证价值最大(使采集函数值最大)的下一组超参数;在目标函数上评估超参数 , 得到奖励;将新评估的超参数和结果加入观测历史数据 , 重复以上步骤 。注:以下代码分为文字版和图示版 , 代码以图示版为准 。
贝叶斯优化算法封装在OpenBox系统中 , 代码实现的主要流程如下:
#使用贝叶斯优化得到超参数配置推荐defget_suggestions(self,history_container,batch_size):#...#基于观测历史数据 , 训练贝叶斯优化代理模型self.surrogate_model.train(X,Y)#...#更新采集函数(使用EI函数时 , 要更新当前最优观测值)self.acquisition_function.update(eta=incumbent_value,...)#使用优化器优化采集函数 , 得到使采集函数值最大的一个(一组)超参数challengers=self.optimizer.maximize(...)#...returnbatch_configs_list#依据并行算法 , 得到下一轮需要验证的超参数腾讯QQ浏览器2021AI算法大赛,北大冠军团队经验分享,附详细代码
文章图片
代码以图示为准
超参数空间定义
首先 , 我们使用ConfigSpace库[4]定义超参数空间 。 由于赛题中的超参数均为离散浮点型 , 并可近似为等间距分布 , 因此使用Int型定义超参数(本质上和使用Float定义相同 , 但避免了赛题中超参数取值范围边缘可能出现不同间距的问题) 。 在ConfigSpace库中 , Float型和Int型超参数均被视作连续型 , 在执行优化时会自动将参数范围缩放至[0,1] 。
初始化方法
贝叶斯优化需要一定数量的历史数据才能启动 , 我们使用了一种贪心法生成初始超参数配置 。 该方法从随机候选配置中 , 逐步挑选距离已有配置最远的配置加入初始配置集合 。 使用该方法进行初始化能更好地探索超参数空间 , 经测试效果稍好于完全随机初始化方法 。 初始化配置数设置为10个 。 该方法集成在OpenBox系统中 , 可通过init_strategy=''random_explore_first''调用 。
代理模型
贝叶斯优化中的代理模型(surrogatemodel)有多种选择 , 包括高斯过程(Gaussianprocess)、概率随机森林(probabilisticrandomforest)、TreeParzenEstimator(TPE)等 , 其中高斯过程在连续超参数空间上(如数学问题)优化效果较好 , 概率随机森林在含有分类超参数的空间上优化效果较好 。 本次比赛只包含连续型超参数 , 经测试 , 高斯过程作为代理模型效果最好 。 高斯过程使用OpenBox系统默认的Matern5/2核 , 核超参数通过最大似然(maximizeloglikelihood)得到 。
采集函数与优化
我们使用常用的ExpectedImprovement(EI)函数作为贝叶斯优化的采集函数(acquisitionfunction) 。 在优化采集函数时 , 我们使用系统中的''random_scipy''优化器 。 该优化器在结合局部搜索与随机采样的基础上 , 使用L-BFGS-B算法对采集函数执行优化 。 测试表明 , 相较于单纯使用随机采样 , 该方法能对采集函数进行更为充分的优化 , 从而更大程度发挥GP模型和EI函数的潜能 。
其他
腾讯QQ浏览器2021AI算法大赛,北大冠军团队经验分享,附详细代码