t7000 如何利用AI实现自动化测试
机器之心专栏
机器之心编辑部
一文梳理腾讯 QQ 浏览器 2021AI 算法大赛冠军方案。
历时两个多月的腾讯 QQ 浏览器 2021AI 算法大赛 [9] 已经告一段落,大赛自 2021 年 8 月 15 日启动以来,受到了全球 AI 算法爱好者及业界的广泛关注。整个赛程历时 68 天,覆盖全球 279 个城市,共吸引来自 276 个不同高校、企业和社会的算法精英 1853 人,组成 852 支队伍参赛,其中进入决赛的 TOP 20 队伍就涵盖了北京大学、清华大学、复旦大学、香港科技大学、中科院大学、华南理工大学、浙江大学、西安交大、中山大学、西安电子科技大学等顶尖院校,也有来自德国、加拿大等国际高校的学生,期间共完成了近 7000 次提交。
腾讯 QQ 浏览器为优秀参赛团队提供价值共计 41.7 万人民币的总奖池,除此之外每个赛道前 15 名队伍将会额外收获校招直通复试卡,前 8 名队伍可获得 QQ 浏览器实习生直通终面卡。
首届 AI 算法大赛议题设置 “多模态视频相似度” 和“自动超参数优化”两大赛道,以下为 “自动超参数优化” 赛道冠军团队,来自北京大学的队伍 PKU-DAIR 的方案分享。(PKU-DAIR 队成员:姜淮钧、沈彧、黎洋)
团队介绍
PKU-DAIR 团队的三位成员来自北京大学崔斌教授 DAIR 实验室的 AutoML 自动化机器学习项目组。团队研究方向包括超参数优化(HPO)、神经网络结构搜索(NAS)、自动化机器学习系统(AutoML System)等。团队不仅在国际顶级会议上发表了多篇论文,为提高 AutoML 技术的易用性与可用性,团队还相继在 Github 开源了黑盒优化系统 OpenBox[1][7]、自动化机器学习系统 MindWare[2][8]等。
在本次自动化超参数优化赛道中,团队基于实验室自研开源黑盒优化系统 OpenBox 进行调参。初赛时使用 OpenBox 系统中的并行贝叶斯优化(Bayesian optimization)算法,决赛在初赛基础上加入早停机制。比赛代码已在 Github 上开源[3]。下面将进行详细介绍。
Rank 1st 比赛代码开源地址:https://github.com/PKU-DAIR/2021_AIAC_Task2_1st黑盒优化系统 OpenBox 地址:https://github.com/PKU-DAIR/open-box
图:data-30 搜索空间中 2 个最好配置和 8 个随机配置的奖励 – 轮数曲线,包含置信上界(蓝色)、均值(红色)、置信下界(绿色)曲线。
我们在比赛开源代码仓库中提供了上述 “数据探索” 代码。
上述数据探索结果表明,根据前 13 轮的置信区间,我们可以推测第 14 轮奖励均值的位置。利用前 13 轮的均值大小关系,我们可以估计第 14 轮最终均值的大小关系,但是由于数据噪音的存在,排名靠前的超参数配置大小关系无法通过部分验证结果预估。由此我们设计了两种早停算法,分别是基于置信区间的早停和基于排名的早停,将在下一部分详细描述。
过于激进的早停策略在比赛中仍然存在问题。如果使用贝叶斯优化只对全量验证数据建模,由于总体优化预算时间很少,早停会减少可用于建模的数据量,使得模型不能得到充分训练。为解决这一问题,我们引入插值方法,增加模型可训练数据。
基于以上考量,最终我们的决赛算法在初赛贝叶斯优化算法的基础上,前期执行完整贝叶斯优化使模型得到较为充分的拟合,后期使用早停技术与插值法,加速超参数验证与搜索过程。下面将对早停模块做详细介绍。
算法核心技术——早停模块介绍
早停方法
由于超参数配置之间的部分验证轮次均值大小关系与最终均值大小关系存在一定的相关性,我们受异步多阶段早停算法 ASHA[5]的启发,设计了基于排名的早停算法:一个超参数如果到达需要判断早停的轮次,就计算其性能均值处于历史中同一轮次的超参数性能均值的排名,如果位于前 1/eta,则继续验证,否则执行早停。
依据 95% 置信区间的含义,我们还设计了另一种早停方法,即使用置信区间判断当前超参数配置是否仍有验证价值。如果某一时刻,当前验证超参数的置信区间上界差于已完全验证的性能前 10 名配置的均值,则代表至少有 95% 的可能其最终均值差于前 10 名的配置,故进行早停。使用本地数据验证,以空间中前 50 名的配置对前 1000 名的配置使用该方法进行早停,早停准确率在 99% 以上。
经过测试,结合贝叶斯优化时两种方法效果近似,我们最终选择使用基于排名的早停方法。无论是哪种方法,都需要设计执行早停的轮次。早停越早越激进,节省的验证时间越多,但是得到的数据置信度越低,后续执行插值时训练的模型就越不准确。为了权衡早停带来的时间收益和高精度验证带来的数据收益,我们选择只在第 7 轮(总共 14 轮)时判断每个配置是否应当早停。早停判断准则依据 eta=2 的 ASHA 算法,即如果当前配置均值性能处于已验证配置第 7 轮的后 50%,就进行早停。
以下代码展示了基于排名的早停方法。首先统计各个早停轮次下已验证配置的性能并进行排序(比赛中我们使用早停轮次为第 7 轮),然后判断当前配置是否处于前 1/eta(比赛中为前 1/2),否则执行早停:
# 基于排名的早停方法,prune_eta=2,prune_iters=[7]def prune_mean_rank(self, iteration_number, running_suggestions, suggestion_history): # 统计早停阶段上已验证配置的性能并排序 bracket = dict() for n_iteration in self.hps[‘prune_iters’]: bracket[n_iteration] = list() for suggestion in running_suggestions suggestion_history: n_history = len(suggestion[‘reward’]) for n_iteration in self.hps[‘prune_iters’]: if n_history >= n_iteration: bracket[n_iteration].append(suggestion[‘reward’][n_iteration – 1][‘value’]) for n_iteration in self.hps[‘prune_iters’]: bracket[n_iteration].sort(reverse=True) # maximize # 依据当前配置性能排名,决定是否早停 stop_list = [False] * len(running_suggestions) for i, suggestion in enumerate(running_suggestions): n_history = len(suggestion[‘reward’]) if n_history == CONFIDENCE_N_ITERATION: # 当前配置已完整验证,无需早停 print(‘full observation. pass’, i) continue if n_history not in self.hps[‘prune_iters’]: # 当前配置不处于需要早停的阶段 print(‘n_history: %d not in prune_iters: %s. pass %d.’ % (n_history, self.hps[‘prune_iters’], i)) continue rank = bracket[n_history].index(suggestion[‘reward’][-1][‘value’]) total_cnt = len(bracket[n_history]) # 判断当前配置性能是否处于前1/eta,否则早停 if rank / total_cnt >= 1 / self.hps[‘prune_eta’]: print(‘n_history: %d, rank: %d/%d, eta: 1/%s. PRUNE %d!’ % (n_history, rank, total_cnt, self.hps[‘prune_eta’], i)) stop_list[i] = True else: print(‘n_history: %d, rank: %d/%d, eta: 1/%s. continue %d.’ % (n_history, rank, total_cnt, self.hps[‘prune_eta’], i)) return stop_list
代码以图示为准
总结
本文介绍了自动化超参数优化赛道的冠军方案,包括贝叶斯优化算法和早停方法。很幸运能够拿到此次比赛的冠军。感谢赛事主办方为我们提供了富有现实意义的比赛场景,让我们积累了宝贵的比赛经验和超参数优化实际经验。希望我们的分享能够对大家有所帮助。
引用
[1] 黑盒优化系统 OpenBox
https://github.com/PKU-DAIR/open-box
[2] 自动化机器学习系统 MindWare
https://github.com/PKU-DAIR/mindware
[3] 比赛冠军源码
https://github.com/PKU-DAIR/2021_AIAC_Task2_1st
[4] https://github.com/automl/ConfigSpace
[5] Liam Li, Kevin Jamieson, Afshin Rostamizadeh, Ekaterina Gonina, Jonathan Bentzur, Moritz Hardt, Benjamin Recht, and Ameet Talwalkar. 2020. A System for Massively Parallel Hyperparameter Tuning. Proceedings of Machine Learning and Systems 2 (2020), 230–246.
[6] Yang Li, Yu Shen, Jiawei Jiang, Jinyang Gao, Ce Zhang, and Bin Cui. 2021. MFES-HB: Efficient Hyperband with Multi-Fidelity Quality Measurements. In Proceedings of the AAAI Conference on Artificial Intelligence, Vol. 35. 8491–8500.
[7] Yang Li, Yu Shen, Wentao Zhang, Yuanwei Chen, Huaijun Jiang, Mingchao Liu, Jiawei Jiang, Jinyang Gao, Wentao Wu, Zhi Yang, Ce Zhang, and Bin Cui. 2021. OpenBox: A Generalized Black-box Optimization Service. Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery & Data Mining (2021).
[8] Yang Li, Yu Shen, Wentao Zhang, Jiawei Jiang, Bolin Ding, Yaliang Li, Jingren Zhou, Zhi Yang, Wentao Wu, Ce Zhang, and Bin Cui. 2021. VolcanoML: Speeding up End-to-End AutoML via Scalable Search Space Decomposition. Proceedings of VLDB Endowment 14 (2021), 2167–2176.
[9]QQ 浏览器 2021AI 算法大赛
https://algo.browser.qq.com/
如发现本站有涉嫌抄袭侵权/违法违规等内容,请<举报!一经查实,本站将立刻删除。