第四范式 AutoML 的效果
我们选取了 10 个 Kaggle 比赛数据,分别通过第四范式 AutoML Tables 和 Google Cloud AutoML Tables 产生结果并提交,然后分别计算每种方法的在整个排行榜中的相对排名,如图所示,第四范式的 AutoML 在表数据上的效果大部分要优于 Google Cloud AutoML,其中图中青色代表第四范式,蓝色代表 Google,柱状图越高表示效果越好。
下面我主要从五个方面进行介绍:
AutoML Tables 的背景
AutoML Tables 的自动特征工程
AutoML Tables 的自动参数寻优
第四范式 AutoML Tables 的落地案例
对未来工作的展望
AutoML Tables 的背景
1. 什么是机器学习?
Tom Mitchell 在 1997 年《机器学习》的教材中讲到,定义如下:A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
2. 什么是 AutoML?
机器学习步骤
以现实中的场景“反欺诈”为例,介绍下机器学习的步骤。
① 形式化的定义问题
② 收集数据
③ 特征工程
④ 模型的训练
⑤ 模型的评估
⑥ 部署和应用(如果效果达到目标)
上述所有的工作基本都是由机器学习的专家来完成的。该过程可能是一个迭代的过程,需要根据模型的效果,多次选择数据、特征和调整模型等。
AutoML 做什么?
AutoML ( Automated Machine Learning ) 是利用机器来完成机器学习步骤中的某部分工作,而不是全部由专家来完成。目前,在相当多的领域缺乏有机器学习背景的开发人员。因此,利用 AutoML 可以使得机器学习更好的应用到更多的行业、更快地造福于社会。
现在 AutoML 主要侧重于特征工程、模型训练和模型评估,对于问题的形式化研究较少。
3. 什么是 Tables ?
通常大家对于 AutoML 的印象更多来自于 Google 的 NAS 方面的文章,例如自动在 CIFAR10 或者 ImageNet 上搜索网络结构。这些通常是应用于图像数据的。
AutoML for tables 的工作主要是面对通过业务逻辑拼接成的宽表,不涉及图像数据或者 NLP。图中示例的数据集是来自 UCI 的数据,主要预测是否给客户贷款,是否有风险,用到的特征有年龄、工作、教育、资产等。
AutoML Tables 自动特征工程
根据前面提到的机器学习的 pipeline,我们先介绍 AutoML Tables 的自动特征工程。在参加竞赛中,大家会提到一个说法“特征决定了效果的上限,模型只是决定趋近于这个上限的程度”。在我们的实际工作中,特征也是一个提升空间更大的地方。
自动特征工程主要是由下面几个模块组成:
自动拼表
自动特征生成
自动特征选择
自动特征增强
1. 自动拼表
现实中完成一个业务场景的任务,是需要很多张表的。例如一张表描述用户信息,一张表描述商品信息,还有一张表描述其他的补充信息(例如上下文,浏览记录等)。
2. 自动特征生成
在自动特征生成中,我们主要是有下面四类的算子:
① 一元算子
基于特征做线性和非线性的变换,例如归一化、log 变换等。n 个特征,复杂度是 O(n)。
② 二元操作算子
例如加减乘除,笛卡尔积等。n 个特征,进行二元操作,则复杂度为 O(n2)。
③ group-by 算子
Group-by operator 是比较特殊的一种算子,它需要先做 partition,然后做 aggregation。此外,如果牵扯到时序性 ( 时序可能放在 group by,或者放在 window function ),算子的复杂度会比较高,同时需要小心穿越。
④ 高阶的算子 ( high-order )
例如有 k 阶,则从 n 个特征中选择 k 个进行操作,数量为 Cnk,再从这些特征中进行选择的话,就是指数的指数级,指数空间的搜索问题很难。
3. 自动特征选择
特征是不是越多越好?答案是否定的。一方面有的特征是有害的,另一方面特征较多对于系统性能都会增加要求。所以,在自动生成了很多特征后,我们需要考虑如何从自动生成的特征中选取有效的特征。
首先,最直观的做法是将特征放入模型中,如果模型效果好就保留,效果不好就舍弃。这个方法有两个问题,一是如果应用到全量数据,进行计算会比较贵;另一个是一个特征本身没有用,和其他的特征组合有用。
经典的特征选择主要有 Filter、Wrapper、Embedded 三种方式,可以去查看相关的资料。我们做的工作的目标是快速地,低代价的进行特征选择。这次主要介绍一个 PFI ( permutation feature importance ) 特征重要性的方法和 ( field-wise logistic regression ) 的方法。
PFI ( permutation feature importance ) 方法
下面举例来介绍 PFI 方法,假设我们有 10 个特征待评估,首先进行一个模型训练,得到了模型的效果评估值 ( performance ) AUC 为 0.8。然后,固定 9 个特征不变, shuffle 第一个特征,再次进行模型训练,得到新的评估值 AUC 为 0.7。判定特征的重要性为两次的差值 0.8-0.7,为 0.1。重复上面的过程,如针对第二个特征,固定除这个特征外的 9 个特征,只是对第二个特征进行 shuffle,这个时候模型为 0.75,则第二个特征的重要性为 0.8-0.75,为 0.05。该方法既可以做特征重要性,亦可做特征可解释性。该方法的动机是,特征越重要,对其扰动后,模型的效果抖动越大。
逐域对数几率回归 ( field-wise logistic regression,FLR ) 方法
当我们有 10 个特征,可分别用每个特征单独训练 LR 模型,但是这样代价比较高。我们主要进行了两方面的改进。
① 并行化改进
我们的改进之一是借鉴 boosting 的思想,并行来完成对于特征的建模。部分特征建模后,固定其权重,再进行剩余部分特征的建模。例如,当原始表有 100 个特征,又增加 10 个特征时,我们先利用 100 个特征训练的模型得到的特征权重,固定好这 100 个特征权重后,也即让 LR 有一个起始点,然后在这个起始点再去训练其他 10 个特征的权重。请注意:这 10 个特征的学习过程互相独立,即权重互不影响。
② 工程化改进
如果每次读取数据,只针对一个特征训练相应的 LR 模型,频繁 IO 导致性能下降。所以,我们结合参数服务器,实现扫描一次数据,训练出所有特征对应的 LR 模型,也即扫描一次数据,得到所有的特征重要性。
我们采用这两种方法得到特征重要性,然后进行迭代,最后得到有效的特征组合。
4. 自动特征增强
我们做的另一个工作是自动特征增强,由于里面仍然有很多问题较为困难,仍需要进一步研究。表数据中可能有各种数据,如 NLP 类型 ( 一个 user 的 profile 为文本 ),image 类型 ( user 的头像 ),audio 类型。另外还有 graph 类型 ( 例如考察团伙作案 ),以及 user 的住址等 Knowledge graph 的信息等。处理的方法一方面是进行直接处理 ( nlp 直接分词 ),另一种是 embedding 的方法,可以进行微调 ( fine tune ),也可以不做。
我们最后将其应用到不同的数据集中,如下图。有的数据集上的效果很好,有的数据集上的提升效果较小,但也可以提升建模效果。
5. AutoCross 介绍
下面介绍下我们在 KDD 2019 上面的一个工作:自动特征组合 ( AutoCross ),详细可以参看文献 AutoCross: Automatic Feature Crossing for Tabular Data in Real-World Applications,地址:
https://arxiv.org/abs/1904.12857
5.1 AutoCross 的系统设计
该系统包含从右到左三个部分:
① 基础设施
我们基于已有的大规模分布式的机器学习平台,搭建了一个并行处理机器学习算法。主要有参数服务器,cache 的优化, feature 的优化管理等。
② 算法集合
Beam Search 方法
基于 Beam search 解决了如何从原始特征选出 2 阶、5 阶乃至 10 阶的高阶特征生成与选择方法。主要是采用贪婪算法,首先进行 2 阶选择,然后将重要的特征放入下一步,逐次迭代生成多阶特征组合。形象地解释,beam 就是一束光,光照到的就会进行特征验证,没有照到的就不会被衍生下去。
逐域对数几率回归方法 ( field-wise logistic regression,FLR )
如前文所述,它可以快速地选择特征。
连续批训练梯度下降 ( successive mini-batch gradient descent )
即使有 50 个原始特征 ( 现实较为常见 ) 两两组合后特征就上千,在全部数据上扫一遍会代价很高。为了加速迭代,我们借用调参算法的思想,将评估特征逐步砍半,降低评估代价。
多粒度离散化 ( multi-granularity discretization ) 方法
当组合离散特征和连续特征进行建模的时候,需要进行连续特征变换。传统的方法是 log,或者分桶。我们在实际过程中发现,在一些数据集合上,连续特征离散化对于桶的个数很敏感 ( 效果有 5%的差异 )。为此,我们采用多粒度的离散化方法,对数值特征,根据不同粒度做离散化,同时生成多个不同粒度离散化对应的离散特征,然后采用逐域对数几率回归挑选出最优的离散特征。多个划分粒度既可以由用户指定,也可以由 AutoCross 根据数据大小和计算环境来自适应地选择,使得用户不需要反复调整离散化的粒度。
③ 工作流实现
对数据进行基本的预处理后,我们将特征组合和特征选择迭代,最终选出来 Top-K 个的特征。
5.2 AutoCross 的效果
基于 5 个公开的数据集和 5 个实际业务数据集,我们验证 AutoCross 的效果。数据集范围从几万到几千万。
① 线性模型
首先对比利用生成特征和无该特征的建模效果的差异性,具体如下面的 LR ( base ) 和 AC+LR 的对比,可知 AutoCross 可以提升线性模型的建模效果。
② 非线性模型
此外,可以发现 AC+W&D 结合后,模型效果不比 xDeepFM,因此 AutoCross 对非线性模型 ( DNN ) 也可以提升效果。
AutoML Tables 自动参数寻优
关于超参数优化,常用方法有 Random search ( 方法较为简单,而且效果够好 ),论文中常用的 Grid search 方法,以及贝叶斯优化方法。我们这次不再讲解,主要介绍随机坐标收缩、连续减半算法、基于种群的优化和双层优化四种方法。
超参数寻优过程主要面临下面两个问题:
用什么样的模型刻画超参数空间和效果,例如贝叶斯模型为高斯过程的,random search 是 Model free 的。
当有了模型效果评估后,如何选取采样策略,生成下一个组采样点和下一组超参数配置。
1. 优化算法
① 随机坐标收缩 ( RAndom COordinate Shrinking, RACOS )
该方法基于分类的思想,利用分类器将一个较大的超参数空间分成好坏两部分。其将一个超参数的组合定为一个坐标,操作过程中,每一维是独立的,操作显示为图中的矩形方式。其中,离散值是要或者不要该点,连续值为左移或者右移。在划分为好的超参数区间以一定的概率进行采样,同时兼顾探索和开发,随后逐渐将这些坐标收缩到某一点。具体为,在最小化的过程中,逐渐缩小分类器的阈值,逐渐缩小好的参数空间的范围。
② 连续减半算法 ( SHA )
该方法思想朴素,然而非常有效。例如有 30 组参数,先在十分之一的数据上运行,选择出最好的十组,相当于砍掉了三分之二。然后利用这十组的数据,再跑一定的数据。如图,后面的数据只跑了一轮,所以它的代价一般较小。
③ 基于种群的优化
PBT 主要有提前停止、热启动和分支限界三个特征。右边的图中,红色的点为起始点,组成了初始的种群,好的点会进行交叉变异等操作,进行生长直到生成下面蓝色的点 ( 效果比较好 )。
④ 双层优化
该方法属于层次优化的范畴。具体来说,机器学习会在训练集 ( training set ) 求得模型的参数,在验证集 ( validation set ) 上优化超参数。可以将训练集中对模型本身参数的选取作为一层,超参数在验证集上的优化作为一层,两层可以进行交互迭代。但该方法一个问题显著问题是:两层优化需要求二阶导数,会使得计算代价较高,对此也有些近似的方法可以替代。
2. 算法实例-AutoDSN
我们针对推荐等大规模稀疏数据,构建深度稀疏神经网络 ( DSN,Deep Sparse Network ) 方法。由于神经网络对于参数敏感,我们针对深度稀疏网络利用前面提到的方法进行自动超参数寻优。自动调整神经网络 ( AutoDSN ) 在五个数据集上面的效果都较好。在 3-9 倍代价内,可以达到专家调参效果的 99%以上。
AutoML Tables 落地案例
1. 学习圈理论
公司基于库伯经典学习圈提炼了机器学习的闭环流程。库伯的学习圈指的是人有理论后可以指导行动,行动有反馈,也即生成了经验,不断反思可以补充完善理论。这个对应机器学习就是收集行为数据,得到反馈数据,不断进行模型训练,然后进行模型的应用,模型应用后又可以收集数据。
我们基于学习圈理论做了一个 AutoML 产品,如左边为一个学习圈的全流程闭环设计图。它可以支持一键建模,也支持 AI 模型的可解释和特征可解释性,并可以进行数据自动回流和指标自动计算等。
2. 实际应用场景
我们利用闭环的机器学习的产品给一个大型的互联网公司做了一个项目,目前看项目的效果不错,具体见图中描述。
AutoML Tables 展望
下面主要考虑未来我们还可以做什么,主要包括效率、效果和交互式三个方面。
1. 效果和效率
AutoML 是需要同时追求效果和效率的,一要降低成本,二要提高效果。如果不达到一定建模效果,那就不可以用。但如果为了达到一定的效果代价太高,也是不可行的。效果方面,从问题定义到模型上线都有可以优化的点。效率方面,一是可以应用更好的硬件,软硬一体,另一方面可以优化算法,例如通过特征空间划分等提高效率。
2. 可交互
当前的 AutoML 比较封闭,人的参与度不高。我们希望可以达到人需要的时候 AutoML 帮助我们,不需要 AutoML 时用户自定义,来提高建模效率。当人在建模流程中,不想要做某方面的选择,可以给定目标函数、输入,让机器来优化 ( 机器较为擅长 )。在优化的过程中,人可以随时介入到学习过程中,提前终止或修改搜索空间和方向。
作者介绍:
罗远飞,2015 年 10 月加入第四范式,任职算法科学家。研发多个针对表数据的自动机器学习算法并产品化,显著提升了自动机器学习建模效果;参与设计开发了第四范式独有的大规模分布式机器学习框架。曾获得国内首届迁移学习算法大赛冠军,在 KDD/ACL/EMNLP 上发表文章,并申请十几项国内外专利。
本文来自 DataFun 社区
原文链接:
评论