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



浏览器|腾讯QQ浏览器2021AI算法大赛,北大冠军团队经验分享,附详细代码
文章图片

代码以图示为准
超参数空间定义
首先 , 我们使用 ConfigSpace 库 [4] 定义超参数空间 。 由于赛题中的超参数均为离散浮点型 , 并可近似为等间距分布 , 因此使用 Int 型定义超参数(本质上和使用 Float 定义相同 , 但避免了赛题中超参数取值范围边缘可能出现不同间距的问题) 。 在 ConfigSpace 库中 , Float 型和 Int 型超参数均被视作连续型 , 在执行优化时会自动将参数范围缩放至[0, 1] 。
初始化方法
贝叶斯优化需要一定数量的历史数据才能启动 , 我们使用了一种贪心法生成初始超参数配置 。 该方法从随机候选配置中 , 逐步挑选距离已有配置最远的配置加入初始配置集合 。 使用该方法进行初始化能更好地探索超参数空间 , 经测试效果稍好于完全随机初始化方法 。 初始化配置数设置为 10 个 。 该方法集成在 OpenBox 系统中 , 可通过 init_strategy="random_explore_first" 调用 。
代理模型
贝叶斯优化中的代理模型(surrogate model)有多种选择 , 包括高斯过程(Gaussian process)、概率随机森林(probabilistic random forest)、Tree Parzen Estimator(TPE)等 , 其中高斯过程在连续超参数空间上(如数学问题)优化效果较好 , 概率随机森林在含有分类超参数的空间上优化效果较好 。 本次比赛只包含连续型超参数 , 经测试 , 高斯过程作为代理模型效果最好 。 高斯过程使用 OpenBox 系统默认的 Matern5/2 核 , 核超参数通过最大似然 (maximize log likelihood) 得到 。
采集函数与优化
我们使用常用的 Expected Improvement(EI)函数作为贝叶斯优化的采集函数(acquisition function) 。 在优化采集函数时 , 我们使用系统中的 "random_scipy" 优化器 。 该优化器在结合局部搜索与随机采样的基础上 , 使用 L-BFGS-B 算法对采集函数执行优化 。 测试表明 , 相较于单纯使用随机采样 , 该方法能对采集函数进行更为充分的优化 , 从而更大程度发挥 GP 模型和 EI 函数的潜能 。
其他
传统的贝叶斯优化每轮只能推荐一个超参数配置 , 因此设计并行推荐方法是一个值得考虑的问题 。 我们尝试了系统中实现的并行贝叶斯方法 , 包括 "median_imputation" 中位数插补法 , 即使用历史观察结果的中位数 , 填补并行 batch 中推荐配置的性能 , 重新训练代理模型并得到下一个并行推荐配置 , 以及 "local_penalization" 局部惩罚法 , 对并行已推荐配置在采集函数上施加局部惩罚 , 这两种方法的目的都是提高对超参数空间的探索性 。 不过经过测试 , 在本次比赛问题上这些方法的效果不佳 , 最终我们采用多次优化采集函数并去重的方式执行并行推荐 , 达到了较好的性能 。

推荐阅读