目前的机器学习框架,普遍自带调参功能,比如Spark ML,但是调参能力相当有限,因为只能做随机和全组合(穷举搜索)。使用Spark自带的调参方法,如果用户没有一点直觉经验排除调参区间,那就需要拼计算资源或者人品。
算法框架自带的调参系统还有另一个局限性,就是无法跨平台复用调参算法。因此我们设计一个系统层面的调参框架,可以调用Spark、python等不同算法框架,也可以不局限在算法框架语言限制内开发自己的调参算法。
我们的自动调参的系统从流程上来看比较简单。系统把调参分为多轮次迭代进行。传统调参算法比如随机调参、网格搜索调参只有一轮,高级的算法会有多轮调参,通过前一轮调参的评估结果适当缩小调参区间,最终把参数收敛到一个最优值。
系统读取用户设置的参数区间后,根据用户的需求把区间划分为多个子区间,并在每个子区间随机采样参数作为首次调参的组合,并通过任务分发服务下发给执行引擎,调度对应的算法框架训练和评估。训练任务结束后,执行引擎把评估结果返回给调参服务。
收集到当前轮次所有评估结果后,调参服务调起算法计算下一轮的调参空间,并调整下一轮的取样个数,再次下发给执行引擎测试,循环往复,直到达到最大轮次限制或收敛程度。