在AI领域调参是一件十分常见的事情,每个模型的训练过程可能包含几十个可调节参数,每个参数的细微变化对于模型效果有很大的影响,如何正确的在业务流量下评估不同参数带来的不同的模型效果需要A/B Test系统实现。
今天就基于Google的一篇论文《Overlapping Experiment Infrastructure :More, Better, Faster Experimentation》介绍一下如何基于流量去做不同模型的A/B Test。
A/B Test系统的设计原则
在介绍具体做法之前先给大家介绍一下Google这篇论文介绍的A/B Test系统的3个设计原则,分别是More、Better、Faster。
- More:要同时支持尽可能多的实验,无论是大改动的实验还是小改动的实验,都需要尽可能的同步支持
- Better:需要建立一套实验的评估体系,不好的实验不应该执行,效果不好的实验需要快速被发现
- Faster:构建实验和实验评估的链路需要自动化和迅速
A/B Test系统设计方案
首先设计一个A/B Test系统需要包含3层概念,分别是Domain、Layer、Experiment
- Domain:指的是一个领域的流量,比如在业务中我们可以把男用户和女用户的流量做一个分割,属于不同的Domain。
- Layer:Layer是一个流量纵向分割的概念,我们可以把流量的从上到下的流动分成不同的Layer,Layer间彼此正交(正交的意思是相互不影响)。举个例子,在推荐业务中流量需要先通过召回模块,再通过排序模块,那么召回和排序就可以作为两个Layer,并且这两个Layer是同享流量的,相互正交
- Experiment:Experiment指的是一个单点的实验,Experiment可能是Layer或者Domain的组成部分。对应AI流程,可能某个训练参数的变化就是一个Experiment
接下来针对几个典型场景介绍下在A/B Test系统设计中以上3个概念是如何运用的。
(1)单Domain、多层、多实验模式
图A展示的是3层,每层一个实验的模式。3层流量直接相互正交,每一层都可以享受全部的流量做不同的实验。
(2)多Domain、多层、多实验模式
可以看下,实验被分为两个大的Domain,一个是non-over lapping domain,另一个是右边的domain。右侧的domain可以增加实验。这样的分布经常被用于新实验上线的时候,横向将流量做比例分割,一边保持原样,另一边做新的实验尝试。
(3)多层、多Domain、多实验模式
C图展示的是先纵向多层实验区分,再横向Domain划分的模式。流量需要先通过两个launch layer,再做各种实验对比。
总结一下,Google这篇论文用很简洁的概念大体描述清楚了在各种复杂场景下该如何做各种横向、纵向的实验划分,并且给整个系统元素做了很好地概念定义,是一篇介绍AB Test的好文章。