AutoML 详解及其在推荐系统中的应用、优缺点

640?wx_fmt=gif

大家好,我是为人造的智能操碎了心的智能禅师。

昨天人工智能头条的股东粉群里,有人问到推荐系统的话题。

可能有人还记得一个非常古典的、关于推荐系统的例子:超市把尿布和啤酒摆一起,显著的增加了二者的销量。原因是很多买酒的父亲们看到旁边刚好有尿布,就回想起临行前,孩儿 ta 妈嘱咐买尿布回家的话来,顺手就买了。

Amazon 可能是最典型的受益于推荐系统的零售商;社交网络更是极大的依赖推荐系统。为了把新用户留住,SNS 们又是推荐“值得你关注的人”,又是推荐你“可能感兴趣的话题”,又是推荐你“发什么样的内容更容易被?”等等等等。

最早的推荐算法,只是零售商根据自己的经验,对用户行为的一种简单的预判。而机器学习,可以说为推荐算法这只?,插上了隐形的翅膀,从此变成了一只天马,得道升天。

今天带来的文章,由我们的特约合作伙伴第四范式,来跟大家讲一讲 AutoML 推荐系统中的应用,希望对正在研究这方面的读者,有所帮助和启发。

还是老规矩,欢迎大家吐槽、投稿。如果你还没有在股东粉群里,可以从下图指示找到合作、投稿、进群入口。

640?wx_fmt=png


以及咱们的公众号接入了机器人,大家闲来无事的时候,可以和机器人聊聊天,谈谈心。而且禅师也可能会冒充机器人回复你,如果你能发现混在机器人回复中禅师的真人回复,会有小礼品送出。

640?wx_fmt=jpeg


接下来按照惯例流程,要给我们的作者鼓吹介绍一番:

第四范式是一家人工智能技术与服务提供商,致力于降低人工智能应用的门槛,基于机器学习技术研发惠及不同领域的人工智能产品及解决方案,助力企业实现智能变革,提升运营绩效,创造商业价值。目前,已在金融、政府、制造、零售、医疗、文化、教育、互联网等领域有近 2000 个成功落地案例,SaaS 公有云服务客户超过 1000 家,服务金融机构资产总规模超过 50 万亿。

全文大约8500字。特别提醒大家,本文内容特别长,知识点特别多,读完需要特别长时间,记得收藏和分享;读完可能需要十好几首下面这首歌的时间

?

640?wx_fmt=png

前情摘要

今天,推荐系统的模型和应用已经相当成熟,然而部署一套全新的推荐系统,甚至仅在已有系统上添加数据维度和模型优化依然是非常耗时耗力的事情。

这是由于不同数据源的分布不尽相同,要达到满意的建模效果,每个建模的环节,包括数据处理、特征工程、模型的选择和超参数选择等都需要随之变动和优化。

以往这些工作都是建模工程师通过 A/B Test 和 Grid Search 等方式来手动调试有限的几种建模组合方式,并挑出最好的配置作为上线用的系统配置。然而要想从少量的尝试中找到优质的模型方案,不仅要求工程师有丰富的建模经验,可能还需要一点点运气,成本和风险都比较高。 

640?wx_fmt=jpeg


近几年在机器学习领域兴起的自动机器学习(AutoML)技术,便是为了解决机器学习模型训练难,落地难这个痛点所做的努力。我们同样可以把 AutoML 技术应用到推荐系统的建模中,这次分享主要介绍用哪些方法来打造一个 AutoML 系统,并用于提升推荐系统的搭建效率。

如果我们看今天的机器学习应用(以监督学习为主),它大致可以分为两大类:

传统机器学习

用的比较多的模型有 LR、Gradient Boosting Machine、Random Forest、KNN 等,模型本身比较简单和成熟,但是由于这些模型无法拟合非常复杂的非线性函数,我们需要通过特征工程把原问题空间转化到一个机器学习模型容易学的表述空间,才能得到好的效果。 

640?wx_fmt=gif


深度学习

相对传统机器学习,近几年兴起的深度学习,由于其强大的模型表达能力,相对弱化了特征工程的重要性,具有端到端学习的能力。

尤其在处理图像,文字和语音等非结构化数据时,我们发现深度学习模型具有学习表述空间的能力(representation learning),从一定程度上实现了特征工程的自动化。

由于传统机器学习模型和深度学习模型在建模过程中侧重点不同,AutoML 也大致分为自动传统机器学习和自动深度学习(如图 1)。

其中自动传统机器学习关注自动数据预处理,自动特征处理和自动算法选择和配置,而自动深度学习则需要解决神经网络的自动训练和网络结构搜索的问题。我们下面就根据图 1 来逐一探讨 AutoML 的各个技术要点。 

640?wx_fmt=jpeg图 1:自动机器学习组成部分

传统 AutoML

当我们有了用户行为数据后,我们通常需要经过数据清洗、数据预处理、特征工程、选择模型、配置模型、融合模型等步骤来构建一整个机器学习管道。

自动机器学习需要尽可能的自动化其中每个环节。除了数据清洗环节和数据本身耦合度很高,需要更多的人为操作以外,数据预处理和之后的步骤都已经在自动机器学习领域存在可行的方案。

一般有5个环节。首先是数据预处理,其次是自动特征处理,然后是模型选择,接着是模型超参数优化,最后是采样优化。

数据预处理

由于模型对数据都存在一定假设,我们需要使用一些数据预处理的方法将进入模型的数据处理成适合模型学习的分布。

640?wx_fmt=png


比如神经网络模型需要输入的数据符合正态分布,那么要对原始数据做归一化处理;比如 Gradient Boosting Machine 不适合对类别数量非常高的离散特征建模,所以在前期要考虑删除类别太多的离散特征。

在自动机器学习中,选择哪种数据预处理方式和模型息息相关,根据上面所述的经验构造一个固定模版,比如已知神经网络需要归一化处理,GBM 需要剔除高维离散特征,LR 模型需要线性分形等,把这些知识 hard code 进 AutoML 系统中,可以用一种模型来学习最优组合。

这里介绍两个可行的方向:

  1. 贝叶斯优化。通过尝试,反馈,优化这一循环的过程来找到各个模型对应的最佳数据预处理方法,我们会在后面对贝叶斯优化做更详细介绍

  2. 元学习。我们在很多数据集上通过实验不同的预处理-模型组合,记录下每个数据集上最优的组合,当在新数据集上开始探索时,会首先计算数据集的元特征,并在元特征空间中找到几个最相似的曾经试验过的数据集,并借用它们的最优预处理方案

这两个方向也可以结合起来,用元学习帮助热启动,再使用贝叶斯优化探索适合新任务的方案。

自动特征处理

有人说,世界上的数据科学家,平均花 80% 的时间做特征,20% 的时间建模型,我们在工作中也意识到特征工程无比的重要性。因此在自动机器学习系统中,特征也同样是极其重要的环节。在这里讨论一下特征组合,如何处理时序特征,使用变分自编码器构造特征等方法。

  1. 多粒度离散化 

    推荐系统常用的 LR 模型,在处理高维离散特征上非常强大,然而其简单的线性模型本质使它对非线性的连续特征解释效果较差,并且在连续值特征尺度变化较大时效果不稳定。

    分桶是一种常见的连续特征离散化方法,然而分桶数目对建模结果影响较大。因此我们使用第四范式自研的线性分形分类器(LFC)来解决这个问题。

    使用 LFC 我们可以让模型从数据中自动选取最合适的分桶方式,同时 LFC 可以实现在特征粒度的离群点检测,使得模型更为鲁棒。通过这种技术,我们在业务数据上都能相比 LR 提升一个百分点。

    640?wx_fmt=gif

    ▲ 来源:Springer Link


  2. 自动特征组合

    原始数据中有的隐藏的关系,机器学习模型并不容易学到,所以需要通过构造特征把这些隐性关系表达出来。针对离散特征和连续特征分别介绍基于启发式算法的自动特征组合方法。

    对于离散特征,由于简单的线性模型无法学到多个特征的交互,需要通过笛卡尔积来生成组合特征。

    举个例子,如果要给决定是否给用户推荐一款很受年轻女性欢迎的化妆品,原始数据里只有年龄段和性别两个字段,可以把年龄段_性别作为一个新的特征,模型便能很容易从历史数据中学出这款化妆品推荐给年轻女性接受度很高。

    如果把所有组合特征都生成出来,那么组合特征的个数是随着阶数呈指数性增长的(搜索空间大于 AlphaGo),也就是我们很快就会产生出系统无法承受的数据量来。

    针对这种情况,我们提出了一个自动特征组合算法 FeatureGo,结合集束搜索(Beam Search)和回溯(Backtracking)策略,去逐步搜索特征空间。

    另外,基于 Boosting 的思想,提出了一系列替换损失函数来高效的评估特征重要性。我们在第四范式的大规模分布式机器学习平台 GDBT 实现了该算法,并依据实际应用场景定制化开发,能够在短时间内快速搜索到有效组合特征。

    我们发现在实际应用中都可以得到可观的效果提升,在所有实际应用中得到了超过 5 个千分点的提升。

    640?wx_fmt=png

    ▲ 来源:Semantic Scholar


  3. 自动时序特征

    在业界的实际场景中,数据一般包含时序信息,因此需要考虑如何自动构建时序特征,然而时序特征对系统性能要求较高。

    为了去的更好的建模效果,也要求时序特征算子尽可能多以覆盖各种情况。基于 GDBT,我们实现了非常高效的自动时序特征生成和选择算子:TemporalGo,它包括时序统计信息、隐式向量等方法,也涵盖如循环神经网络 RNN 等方法,显著提升了建模效果。

  4. 变分自编码器 (VAE)

    变分自编码器(VAE)是一种基于神经网络的生成模型,其目标是给定原始数据,VAE 经过编码和解码后要尽可能地还原出原始数据。

    可以把 VAE 用作一个基于模型的特征生成手段,而且经过 VAE 编码后的数值分布会尽可能的接近正态分布,这样的新特征可以直接给很多机器学习模型使用。

    当然训练 VAE 本身很耗时间,而且需要较大的数据量才可能有效果,在实际应用当中,优先考虑其他特征工程方法。

模型选择

在拿到一个问题开始建模之前,都会面临一个问题,用什么样的模型?

640?wx_fmt=jpeg

▲ 选个 Model 吧!来源:Business



你可以很容易地根据自己的经验,面对分类问题还是回归问题,图像还是表类数据,列出几个候选模型,然后你可能会把候选模型用这个数据都训练一遍,并挑出那个验证效果最好的模型用在生产中。在自动机器学习中,我们也会把模型选择分成两步。

首先,拿到一个新问题时,我们获得这个问题的 meta 信息,比如数据是什么格式,数据量大小,训练指标是什么等,通过查询预先准备的问题映射到模型的查找表,找到适合这个问题的几款候选模型及相关超参数设置(或者超参数的搜索空间)。

接下来便是挑选效果好的模型。最朴素的做法是把所有可能的模型和超参数配置都训练一遍,挑出最好的模型即可,然而现实情况通常都有时间和计算资源的限制,导致我们无法训练所有可能的模型参数组合。我们需要一个更加节省资源的方法,

对于一个问题,很多模型不一定需要到训练结束才能做出判断哪个模型效果好或者差,可能在训练过程中我们通过观测验证指标,就能提前剔除一些效果太差的模型。

模型超参数优化

一个模型在开始训练前,可能需要人设置一些参数,比如 LR 有 L1、L2 正则系数用来控制模型过拟合,GBM 有树棵树,学习率等,这些参数配置的好坏会直接影响最终的模型效果。

而且参数配置的好坏又和数据本身有很强的相关性,也就是说,不存在一组黄金配置能在所有数据集上都表现良好。因此建模工作中一个不可或缺的工作便是模型超参数的优化。

如果是我们手动优化参数,一般是选取几组我们认为值得尝试的参数配置,然后训练模型并做交叉验证,最后挑出验证指标最好的模型用作生产。

这种做法对一两个超参数做优化还能应付,然而传统机器模型 GBM 就有小十个需要调试的超参数,更不用说深度学习模型会有更多的参数选择,这使得自动优化超参数技术越来越多的应用到实际建模中。

最常见的做法是 Grid Search 和 Random Search。Grid Search 是让用户在每个超参数的选择范围里取几个点,然后机器会将所有可能的参数组合都尝试一遍,最后选出最好的模型。

640?wx_fmt=png

▲ 来源:StackExchange



这种方法有两个问题,一是需要用户对每个超参数都要取点,二是由于需要尝试所有参数组合,对计算资源的消耗非常高。R

andom Search 是给定超参数选择的空间范围,然后在这个空间里随机采样N组超参数配置,交给模型做交叉验证,并选出最好的模型。在实际应用中,Random Search 在超参数较多的情况下比 Grid Search 更快而且效果更好。

目前提到的两种做法实现起来都很简单,但缺点是它们都是在参数空间里盲目的搜寻,效率较低。

接下来我们介绍几种在提升效率上努力的思路:

  1. 贝叶斯优化

    贝叶斯优化是一种用于全局优化的搜索策略,早期多用于工业工程方向,来优化工业流程设计的配置。近几年贝叶斯优化开始广泛出现在机器学习领域的研究中,尤其在超参数优化领域。

    贝叶斯优化的思路是将超参数空间映射到验证指标空间的函数作为优化的目标函数,然而这个函数的形式是未知的,而且要计算一个点的函数值需要消耗很多资源(等同于用一组超参数配置来训练模型并做交叉验证),所以贝叶斯优化会把已经尝试过的超参数配置和对应的交叉验证指标作为历史数据,并用它训练一个机器学习模型。

    这个模型和通常的机器学习模型略有不同,它不仅需要提供预测值(prediction),还要提供对于这个预测的不确定度(uncertainty)。

    这是因为接下来的优化策略会同时根据预测值和不确定度来决定尝试哪组新的超参数。贝叶斯优化中的优化策略往往需要考虑发掘(exploitation)和探索(exploration)两个因素。

    发掘是指根据目前的模型预测,找到预测效果最好的超参数;探索是指目前的模型也许还没有触及到搜索空间中真正的全局最优,所以需要去探索那些区域,而这些区域一般可以通过不确定度来知晓。

    为了兼顾这两个因素,优化策略会把预测值和不确定度两个指标融合在一起搜索下一个要尝试的超参数。

    因为贝叶斯优化很好的平衡了发掘和探索,这类方法在解决全局优化问题中都表现出极高的效率,收敛速度很快,所以在超参数优化问题中也取得了很好的效果。

    640?wx_fmt=png

    ▲ 来源:ScienceProg


  2. 进化算法

    进化算法是一种启发式优化算法,正如其字面意思,这个算法模仿了进化理论,通过优胜劣汰的机制选出好的配置。

  3. 强化学习

    强化学习中有一类最简单的问题叫做多臂老虎机,这类问题源于赌博。大概是这样的:赌场里有N多台老虎机,每台机器的赢率是固定且未知的,赌徒想要通过实验找到赢率最高的那台机器,这样他的期望回报才是最优的。

    最傻的办法就是在每台机器上试验 M 次,统计一下每台机器的赢的次数,并选出那台赢率最高的机器。

    然而这个方法很显然有很多可提高之处,比如有的机器在玩了 K<M 次就发现赢率很低,那就没必要浪费钱试验满 M 次了,于是大家便想了很多策略来提升找到赢率最高的机器的效率,于是这个问题变成了一个研究领域。

    可是这和超参数优化有什么关系呢?事实上,我们可以想象每组可能的超参数配置是一台老虎机,它内部藏着一个未知的数字,在我们这里可以认为是用这组配置训练模型能达到的验证指标。

    为了了解这个未知数字,我们只能通过训练模型,训练时间越久,我们投入的资源就越多。

    于是多臂老虎机的策略也可以应用到我们的问题上,也就是为了找到最优的超参数,决定每组超参数配置要投入多少资源训练模型的问题。

这里仅粗略介绍了三个优化超参数的方向,其实最近几年涌现了很多优秀的工作,包括使用元学习,对学习曲线建模,或者将上述的几个思路融合等方式,使超参数优化变得愈加高效。

采样优化

640?wx_fmt=png

▲ 来源:Wiki



当数据量很大时,用全量数据训练一个模型会花费很长时间,而探索的过程需要训练多次模型,那么总开销就太大了。

也许我们在探索时只使用少量的部分数据训练模型,并且得到的关于模型和参数的选择又能帮助到全量数据训练情况下的选择,那我们就有机会节省大量资源。

这个设想在几年前就有工作进行了证实,通过观察不同采样率下训练模型的效果和超参数的关系分布,发现低采样率时超参数和效果的分布与全量数据训练下的分布具有很强的相关性。

于是我们在实际应用中,可以使用预定的降采样率选择少部分数据,并在这部分数据上进行模型和超参数的优化,然后将找到的最优选择直接放到全量数据上训练生产用模型。

我们发现这种方法尽管朴素,实际应用中却能达到很好的效果。学术界也有提出更成熟的做法,比如对采样率建模[2],

以期望通过一个配置使用低采样率训练的模型效果来预测全量数据下的模型效果,并用预测值来指导超参数的搜索。

升级版本

深度学习由于具有模型表达能力强,自动学习特征的端到端特性等优点,是今天机器学习领域最受欢迎的模型框架。

然而训练深度学习模型并非易事,不仅有大量的模型超参数需要人工调试,而且模型效果对超参数的选择极其敏感,因此需要大量的尝试和行业经验才能得到优质的效果。

自动深度学习面临同样的挑战。那么,关于自动机器学习的自动训练、网络结构搜索又是怎样的状态?关于拟合 Learning curve、Meta learning、元学习等等知识点,又是该如何理解?

由于本文内容较多,请扫描下方二维码,收看余下部分:关于新的自动机器学习方式,以及如何做模型评估。

640?wx_fmt=jpeg

参考文献

640?wx_fmt=png

640?wx_fmt=png


文末福利

1024感恩大促

最后一天

错过,等一年

640?wx_fmt=png

请注意,知识点来了,为什么叫“猿族崛起”而不是“XXXX”呢?


程序员是人工智能时代的基石,是最有智慧的群体,是未来世界的缔造者,1024 是创造这一切的开始,我们一起见证了时代的变革,我们为创造了这个伟大的互联网时代而狂欢。

640?wx_fmt=gif

讲实话,1024 这种节日,会有很多福利活动,但很多都是听听就过了,没办法让你产生一丝兴奋。但,对于我们这种连做个课都得磨上半年的(变态)公司来说,老板说给程序员的福利只有一个要求:整点有用的,没用的不要。(此处应该有掌声)

640?wx_fmt=png

所以,我们这个活动到底要怎样参加呢?再穷不能穷奖品——


  • 活动期间全场课程、电子书 5 折起

  • 活动期间累计消费金额满 32 元(含购买会员),送价值 10 元通用优惠券,仅限前 1024 位;

  • 活动期间累计消费金额满 128 元(含购买会员),送价值 99 元月度超级会员,仅限前 256 位;

  • 活动期间累计消费金额满 512 元(含购买会员),送精美 CSDN 定制背包,不限量;每天随机抽取 3 位赠送价值 399 元机械键盘。


1024 优惠活动已经开始,按照以往大家抢购的速度来看,不到 5 个小时就把几百张优惠券全抢走了,去买极客书、买课程、看 Chat ......所以赶紧去扫描上方海报的二维码或者点击阅读原文参加活动吧,越晚不仅越贵,还有可能得不到礼品!2_02.png


活动说明:

  • 活动期间消费统计以实际支付金额为准;

  • 活动礼品兑换以活动期间消费累计金额最高档为准;

  • 活动礼品领取将在活动结束后统一发送通知,请大家注意关注服务号(GitChat)查看通知;

  • 本次活动最终解释权归 GitChat 所有。


640?wx_fmt=png
幸福
无非就是
我  AI  你





640?wx_fmt=gif

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值