AutoML(Automatic Machine Learning,自动机器学习)旨在研究在没有专业知识的情况下使用的低门槛甚至零门槛的机器学习算法,摆脱对机器学习专家的依赖,该技术正在成为机器学习赋能行业的关键。第四范式的 AutoML 技术已经投入实际工业应用,在金融、医疗等行业有多个实践案例。
第四范式智能推荐系统广泛应用于互联网行业,这次分享将介绍在推荐系统中对 AutoML 技术的应用,内容主要包含 AutoML 的技术思路、框架和要点。
本场 Chat 您将接触如下内容:
- 数据如何采样;
- 数据预处理的规则;
- 特征工程方面的知识;
- 如何选择或设计算法;
- 网络结构搜索;
- 神经网络的自动训练调参;
- 如何调整算法超参数;
- 评估模型性能等内容。
作者简介:
王嘉磊,第四范式资深算法科学家、负责设计实现第四范式 AutoML 产品算法。美国康奈尔大学运筹学博士,研究方向为贝叶斯优化及应用于自动化机器学习。曾任职 IBM Chief Analytics Office,任高级数据科学家。
程晓澄,第四范式资深算法科学家、推荐业务算法团队负责人。在第四范式负责推荐业务算法推荐系统的架构设计, 负责搭建了唱吧、知乎、罗辑思维等多个互联网推荐系统。曾任职豆瓣算法部门。
大家好,欢迎参加 GitChat 举办的线上分享活动。我是第四范式研究员嘉磊,今天我和同事远飞及负责推荐业务研究同事晓澄,一起给大家分享 AutoML 在推荐系统中的应用。
先介绍一下我们公司——第四范式。
第四范式是国际领先的人工智能技术与服务提供商,致力于降低人工智能应用的门槛,基于机器学习技术研发惠及不同领域的人工智能产品及解决方案,助力企业实现智能变革,提升运营绩效,创造商业价值。目前,已在金融、政府、制造、零售、医疗、文化、教育、互联网等领域有近 2000 个成功落地案例,SaaS 公有云服务客户超过 1000 家,服务金融机构资产总规模超过 50 万亿。
2017 年,第四范式以先荐推荐系统服务的模式赋能媒体,通过 AutoML 与先知机器学习平台等先进技术,提供高效、自助、自动的接入方式,一站式内容分发的解决方案,帮助媒体客户提升业务能力和价值。在众多案例中,先荐推荐系统帮助 CSDN 的内容点击率提升 110%,访问量增长 187%,营收增加 49%。帮助环球网点击率提升 58%,访问步长增长 69%,营收增加 20%。此外,在某客户场景下与对手 PK 竞赛中,先荐系统点击率领先对手 36%。
本次主要给大家带来 AutoML 在推荐系统中的应用分享,希望对大家有所启发和帮助。
今天,推荐系统的模型和应用已经相当成熟,然而部署一套全新的推荐系统,甚至仅在已有系统上添加数据维度和模型优化依然是非常耗时耗力的事情。这是由于不同数据源的分布不尽相同,要达到满意的建模效果,每个建模的环节,包括数据处理、特征工程、模型的选择和超参数选择等都需要随之变动和优化。
以往这些工作都是建模工程师通过 A/B Test 和 Grid Search 等方式来手动调试有限的几种建模组合方式,并挑出最好的配置作为上线用的系统配置。然而要想从少量的尝试中找到优质的模型方案,不仅要求工程师有丰富的建模经验,可能还需要一点点运气,成本和风险都比较高。
近几年在机器学习领域兴起的自动机器学习(AutoML)技术,便是为了解决机器学习模型训练难,落地难这个痛点所做的努力。我们同样可以把 AutoML 技术应用到推荐系统的建模中,这次分享主要介绍用哪些方法来打造一个 AutoML 系统,并用于提升推荐系统的搭建效率。
如果我们看今天的机器学习应用(以监督学习为主),它大致可以分为传统机器学习和深度学习两大类。传统机器学习用的比较多的模型有 LR、Gradient Boosting Machine、Random Forest、KNN 等,模型本身比较简单和成熟,但是由于这些模型无法拟合非常复杂的非线性函数,我们需要通过特征工程把原问题空间转化到一个机器学习模型容易学的表述空间,才能得到好的效果。
相对传统机器学习,近几年兴起的深度学习,由于其强大的模型表达能力,相对弱化了特征工程的重要性,具有端到端学习的能力。尤其在处理图像,文字和语音等非结构化数据时,我们发现深度学习模型具有学习表述空间的能力(representation learning),从一定程度上实现了特征工程的自动化。
由于传统机器学习模型和深度学习模型在建模过程中侧重点不同,AutoML 也大致分为自动传统机器学习和自动深度学习(如图 1)。其中自动传统机器学习关注自动数据预处理,自动特征处理和自动算法选择和配置,而自动深度学习则需要解决神经网络的自动训练和网络结构搜索的问题。我们下面就根据图 1 来逐一探讨 AutoML 的各个技术要点。
图 1:自动机器学习组成部分
当我们有了用户行为数据后,我们通常需要经过数据清洗、数据预处理、特征工程、选择模型、配置模型、融合模型等步骤来构建一整个机器学习管道。自动机器学习需要尽可能的自动化其中每个环节。除了数据清洗环节和数据本身耦合度很高,需要更多的人为操作以外,数据预处理和之后的步骤都已经在自动机器学习领域存在可行的方案。
1.1 数据预处理由于模型对数据都存在一定假设,我们需要使用一些数据预处理的方法将进入模型的数据处理成适合模型学习的分布。比如神经网络模型需要输入的数据符合正态分布,那么要对原始数据做归一化处理;比如 Gradient Boosting Machine 不适合对类别数量非常高的离散特征建模,所以在前期要考虑删除类别太多的离散特征。
在自动机器学习中,选择哪种数据预处理方式和模型息息相关,根据上面所述的经验构造一个固定模版,比如已知神经网络需要归一化处理,GBM 需要剔除高维离散特征,LR 模型需要线性分形等,把这些知识 hard code 进 AutoML 系统中,可以用一种模型来学习最优组合。
这里介绍两个可行的方向:一是使用贝叶斯优化的方法,通过尝试,反馈,优化这一循环的过程来找到各个模型对应的最佳数据预处理方法,我们会在后面对贝叶斯优化做更详细介绍;另一个方向是元学习,我们在很多数据集上通过实验不同的预处理-模型组合,记录下每个数据集上最优的组合,当在新数据集上开始探索时,会首先计算数据集的元特征,并在元特征空间中找到几个最相似的曾经试验过的数据集,并借用它们的最优预处理方案。这两个方向也可以结合起来,用元学习帮助热启动,再使用贝叶斯优化探索适合新任务的方案。
1.2 自动特征处理有人说,世界上的数据科学家,平均花 80% 的时间做特征,20% 的时间建模型,我们在工作中也意识到特征工程无比的重要性。因此在自动机器学习系统中,特征也同样是极其重要的环节。在这里讨论一下特征组合,如何处理时序特征,使用变分自编码器构造特征等方法。
1.2.1 多粒度离散化推荐系统常用的 LR 模型,在处理高维离散特征上非常强大,然而其简单的线性模型本质使它对非线性的连续特征解释效果较差,并且在连续值特征尺度变化较大时效果不稳定。分桶是一种常见的连续特征离散化方法,然而分桶数目对建模结果影响较大。因此我们使用第四范式自研的线性分形分类器(LFC)来解决这个问题。使用 LFC 我们可以让模型从数据中自动选取最合适的分桶方式,同时 LFC 可以实现在特征粒度的离群点检测,使得模型更为鲁棒。通过这种技术,我们在业务数据上都能相比 LR 提升一个百分点。
1.2.2 自动特征组合原始数据中有的隐藏的关系,机器学习模型并不容易学到,所以需要通过构造特征把这些隐性关系表达出来。针对离散特征和连续特征分别介绍基于启发式算法的自动特征组合方法。
对于离散特征,由于简单的线性模型无法学到多个特征的交互,需要通过笛卡尔积来生成组合特征。举个例子,如果要给决定是否给用户推荐一款很受年轻女性欢迎的化妆品,原始数据里只有年龄段和性别两个字段,可以把年龄段_性别作为一个新的特征,模型便能很容易从历史数据中学出这款化妆品推荐给年轻女性接受度很高。如果把所有组合特征都生成出来,那么组合特征的个数是随着阶数呈指数性增长的(搜索空间大于 AlphaGo),也就是我们很快就会产生出系统无法承受的数据量来。针对这种情况,我们提出了一个自动特征组合算法 FeatureGo,结合集束搜索(Beam Search)和回溯(Backtracking)策略,去逐步搜索特征空间。另外,基于 Boosting 的思想,提出了一系列替换损失函数来高效的评估特征重要性。我们在第四范式的大规模分布式机器学习平台 GDBT 实现了该算法,并依据实际应用场景定制化开发,能够在短时间内快速搜索到有效组合特征。我们发现在实际应用中都可以得到可观的效果提升,在所有实际应用中得到了超过 5 个千分点的提升。
1.2.3 自动时序特征在业界的实际场景中,数据一般包含时序信息,因此需要考虑如何自动构建时序特征,然而时序特征对系统性能要求较高。为了去的更好的建模效果,也要求时序特征算子尽可能多以覆盖各种情况。基于 GDBT,我们实现了非常高效的自动时序特征生成和选择算子:TemporalGo,它包括时序统计信息、隐式向量等方法,也涵盖如循环神经网络 RNN 等方法,显著提升了建模效果。
1.2.4 变分自编码器 (VAE)变分自编码器(VAE)是一种基于神经网络的生成模型,其目标是给定原始数据,VAE 经过编码和解码后要尽可能地还原出原始数据。可以把 VAE 用作一个基于模型的特征生成手段,而且经过 VAE 编码后的数值分布会尽可能的接近正态分布,这样的新特征可以直接给很多机器学习模型使用。当然训练 VAE 本身很耗时间,而且需要较大的数据量才可能有效果,在实际应用当中,优先考虑其他特征工程方法。
1.3 模型选择在拿到一个问题开始建模之前,都会面临一个问题,用什么样的模型?你可以很容易地根据自己的经验,面对分类问题还是回归问题,图像还是表类数据,列出几个候选模型,然后你可能会把候选模型用这个数据都训练一遍,并挑出那个验证效果最好的模型用在生产中。在自动机器学习中,我们也会把模型选择分成两步。
首先,拿到一个新问题时,我们获得这个问题的 meta 信息,比如数据是什么格式,数据量大小,训练指标是什么等,通过查询预先准备的问题映射到模型的查找表,找到适合这个问题的几款候选模型及相关超参数设置(或者超参数的搜索空间)。
接下来便是挑选效果好的模型。最朴素的做法是把所有可能的模型和超参数配置都训练一遍,挑出最好的模型即可,然而现实情况通常都有时间和计算资源的限制,导致我们无法训练所有可能的模型参数组合。我们需要一个更加节省资源的方法,对于一个问题,很多模型不一定需要到训练结束才能做出判断哪个模型效果好或者差,可能在训练过程中我们通过观测验证指标,就能提前剔除一些效果太差的模型。
1.4 模型超参数优化一个模型在开始训练前,可能需要人设置一些参数,比如 LR 有 L1、L2 正则系数用来控制模型过拟合,GBM 有树棵树,学习率等,这些参数配置的好坏会直接影响最终的模型效果,而且参数配置的好坏又和数据本身有很强的相关性,也就是说,不存在一组黄金配置能在所有数据集上都表现良好。因此建模工作中一个不可或缺的工作便是模型超参数的优化。
如果是我们手动优化参数,一般是选取几组我们认为值得尝试的参数配置,然后训练模型并做交叉验证,最后挑出验证指标最好的模型用作生产。这种做法对一两个超参数做优化还能应付,然而传统机器模型 GBM 就有小十个需要调试的超参数,更不用说深度学习模型会有更多的参数选择,这使得自动优化超参数技术越来越多的应用到实际建模中。最常见的做法是 Grid Search 和 Random Search。Grid Search 是让用户在每个超参数的选择范围里取几个点,然后机器会将所有可能的参数组合都尝试一遍,最后选出最好的模型,这种方法有两个问题,一是需要用户对每个超参数都要取点,二是由于需要尝试所有参数组合,对计算资源的消耗非常高。Random Search 是给定超参数选择的空间范围,然后在这个空间里随机采样N组超参数配置,交给模型做交叉验证,并选出最好的模型。在实际应用中,Random Search 在超参数较多的情况下比 Grid Search 更快而且效果更好。目前提到的两种做法实现起来都很简单,但缺点是它们都是在参数空间里盲目的搜寻,效率较低。
接下来我们介绍几种在提升效率上努力的思路:
1.4.1 贝叶斯优化贝叶斯优化是一种用于全局优化的搜索策略,早期多用于工业工程方向,来优化工业流程设计的配置。近几年贝叶斯优化开始广泛出现在机器学习领域的研究中,尤其在超参数优化领域。贝叶斯优化的思路是将超参数空间映射到验证指标空间的函数作为优化的目标函数,然而这个函数的形式是未知的,而且要计算一个点的函数值需要消耗很多资源(等同于用一组超参数配置来训练模型并做交叉验证),所以贝叶斯优化会把已经尝试过的超参数配置和对应的交叉验证指标作为历史数据,并用它训练一个机器学习模型。这个模型和通常的机器学习模型略有不同,它不仅需要提供预测值(prediction),还要提供对于这个预测的不确定度(uncertainty)。
这是因为接下来的优化策略会同时根据预测值和不确定度来决定尝试哪组新的超参数。贝叶斯优化中的优化策略往往需要考虑发掘(exploitation)和探索(exploration)两个因素。发掘是指根据目前的模型预测,找到预测效果最好的超参数;探索是指目前的模型也许还没有触及到搜索空间中真正的全局最优,所以需要去探索那些区域,而这些区域一般可以通过不确定度来知晓。为了兼顾这两个因素,优化策略会把预测值和不确定度两个指标融合在一起搜索下一个要尝试的超参数。因为贝叶斯优化很好的平衡了发掘和探索,这类方法在解决全局优化问题中都表现出极高的效率,收敛速度很快,所以在超参数优化问题中也取得了很好的效果。
1.4.2 进化算法进化算法是一种启发式优化算法,正如其字面意思,这个算法模仿了进化理论,通过优胜劣汰的机制选出好的配置。
1.4.3 强化学习强化学习中有一类最简单的问题叫做多臂老虎机,这类问题源于赌博,大概是这样的:赌场里有N多台老虎机,每台机器的赢率是固定且未知的,赌徒想要通过实验找到赢率最高的那台机器,这样他的期望回报才是最优的。最傻的办法就是在每台机器上试验 M 次,统计一下每台机器的赢的次数,并选出那台赢率最高的机器。然而这个方法很显然有很多可提高之处,比如有的机器在玩了 K