爱奇艺机器学习平台建设实践
当用户在具体做一个模型调优的时候,如果模型的参数设置不对的话,很影响模型的准确率。模型的参数也并不相同,像LR、线性回归4个参数,多的像XGBoost暴露出17个参数,虽然不是每个参数都参与调参,但是总是会遇到一些排列组合。如果人工调参,参数组少则几十,多则上百种组合。比如XGBoost,使用人力来调参基本不可想象。
目前的机器学习框架,普遍自带调参功能,比如Spark ML,但是调参能力相当有限,因为只能做随机和全组合(穷举搜索)。使用Spark自带的调参方法,如果用户没有一点直觉经验排除调参区间,那就需要拼计算资源或者人品。
算法框架自带的调参系统还有另一个局限性,就是无法跨平台复用调参算法。因此我们设计一个系统层面的调参框架,可以调用Spark、python等不同算法框架,也可以不局限在算法框架语言限制内开发自己的调参算法。
我们的自动调参的系统从流程上来看比较简单。系统把调参分为多轮次迭代进行。传统调参算法比如随机调参、网格搜索调参只有一轮,高级的算法会有多轮调参,通过前一轮调参的评估结果适当缩小调参区间,最终把参数收敛到一个最优值。
系统读取用户设置的参数区间后,根据用户的需求把区间划分为多个子区间,并在每个子区间随机采样参数作为首次调参的组合,并通过任务分发服务下发给执行引擎,调度对应的算法框架训练和评估。训练任务结束后,执行引擎把评估结果返回给调参服务。
收集到当前轮次所有评估结果后,调参服务调起算法计算下一轮的调参空间,并调整下一轮的取样个数,再次下发给执行引擎测试,循环往复,直到达到最大轮次限制或收敛程度。
我们可以把整个调参流程看做是一个大型的模型训练过程,通过结果反馈不断找到极值的过程。从这种思路出发,可以加入很多适用的算法作为调参算法。
目前机器学习平台除了支持随机算法和网格搜索的算法,也实现了贝叶斯优化以及自研的遗传算法。测试发现自研的算法调参效率远优于传统默认的算法。