大家好,我是为人造的智能操碎了心的智能禅师。
昨天人工智能头条的股东粉群里,有人问到推荐系统的话题。
可能有人还记得一个非常古典的、关于推荐系统的例子:超市把尿布和啤酒摆一起,显著的增加了二者的销量。原因是很多买酒的父亲们看到旁边刚好有尿布,就回想起临行前,孩儿 ta 妈嘱咐买尿布回家的话来,顺手就买了。
Amazon 可能是最典型的受益于推荐系统的零售商;社交网络更是极大的依赖推荐系统。为了把新用户留住,SNS 们又是推荐“值得你关注的人”,又是推荐你“可能感兴趣的话题”,又是推荐你“发什么样的内容更容易被?”等等等等。
最早的推荐算法,只是零售商根据自己的经验,对用户行为的一种简单的预判。而机器学习,可以说为推荐算法这只?,插上了隐形的翅膀,从此变成了一只天马,得道升天。
今天带来的文章,由我们的特约合作伙伴第四范式,来跟大家讲一讲 AutoML 推荐系统中的应用,希望对正在研究这方面的读者,有所帮助和启发。
还是老规矩,欢迎大家吐槽、投稿。如果你还没有在股东粉群里,可以从下图指示找到合作、投稿、进群入口。
以及咱们的公众号接入了机器人,大家闲来无事的时候,可以和机器人聊聊天,谈谈心。而且禅师也可能会冒充机器人回复你,如果你能发现混在机器人回复中禅师的真人回复,会有小礼品送出。
接下来按照惯例流程,要给我们的作者鼓吹介绍一番:
第四范式是一家人工智能技术与服务提供商,致力于降低人工智能应用的门槛,基于机器学习技术研发惠及不同领域的人工智能产品及解决方案,助力企业实现智能变革,提升运营绩效,创造商业价值。目前,已在金融、政府、制造、零售、医疗、文化、教育、互联网等领域有近 2000 个成功落地案例,SaaS 公有云服务客户超过 1000 家,服务金融机构资产总规模超过 50 万亿。
全文大约8500字。特别提醒大家,本文内容特别长,知识点特别多,读完需要特别长时间,记得收藏和分享;读完可能需要十好几首下面这首歌的时间
?
今天,推荐系统的模型和应用已经相当成熟,然而部署一套全新的推荐系统,甚至仅在已有系统上添加数据维度和模型优化依然是非常耗时耗力的事情。
这是由于不同数据源的分布不尽相同,要达到满意的建模效果,每个建模的环节,包括数据处理、特征工程、模型的选择和超参数选择等都需要随之变动和优化。
以往这些工作都是建模工程师通过 A/B Test 和 Grid Search 等方式来手动调试有限的几种建模组合方式,并挑出最好的配置作为上线用的系统配置。然而要想从少量的尝试中找到优质的模型方案,不仅要求工程师有丰富的建模经验,可能还需要一点点运气,成本和风险都比较高。
近几年在机器学习领域兴起的自动机器学习(AutoML)技术,便是为了解决机器学习模型训练难,落地难这个痛点所做的努力。我们同样可以把 AutoML 技术应用到推荐系统的建模中,这次分享主要介绍用哪些方法来打造一个 AutoML 系统,并用于提升推荐系统的搭建效率。
如果我们看今天的机器学习应用(以监督学习为主),它大致可以分为两大类:
传统机器学习
用的比较多的模型有 LR、Gradient Boosting Machine、Random Forest、KNN 等,模型本身比较简单和成熟,但是由于这些模型无法拟合非常复杂的非线性函数,我们需要通过特征工程把原问题空间转化到一个机器学习模型容易学的表述空间,才能得到好的效果。
深度学习
相对传统机器学习,近几年兴起的深度学习,由于其强大的模型表达能力,相对弱化了特征工程的重要性,具有端到端学习的能力。
尤其在处理图像,文字和语音等非结构化数据时,我们发现深度学习模型具有学习表述空间的能力(representation learning),从一定程度上实现了特征工程的自动化。
由于传统机器学习模型和深度学习模型在建模过程中侧重点不同,AutoML 也大致分为自动传统机器学习和自动深度学习(如图 1)。
其中自动传统机器学习关注自动数据预处理,自动特征处理和自动算法选择和配置,而自动深度学习则需要解决神经网络的自动训练和网络结构搜索的问题。我们下面就根据图 1 来逐一探讨 AutoML 的各个技术要点。
图 1:自动机器学习组成部分
当我们有了用户行为数据后,我们通常需要经过数据清洗、数据预处理、特征工程、选择模型、配置模型、融合模型等步骤来构建一整个机器学习管道。
自动机器学习需要尽可能的自动化其中每个环节。除了数据清洗环节和数据本身耦合度很高,需要更多的人为操作以外,数据预处理和之后的步骤都已经在自动机器学习领域存在可行的方案。
一般有5个环节。首先是数据预处理,其次是自动特征处理,然后是模型选择,接着是模型超参数优化,最后是采样优化。
数据预处理
由于模型对数据都存在一定假设,我们需要使用一些数据预处理的方法将进入模型的数据处理成适合模型学习的分布。
比如神经网络模型需要输入的数据符合正态分布,那么要对原始数据做归一化处理;比如 Gradient Boosting Machine 不适合对类别数量非常高的离散特征建模,所以在前期要考虑删除类别太多的离散特征。
在自动机器学习中,选择哪种数据预处理方式和模型息息相关,根据上面所述的经验构造一个固定模版,比如已知神经网络需要归一化处理,GBM 需要剔除高维离散特征,LR 模型需要线性分形等,把这些知识 hard code 进 AutoML 系统中,可以用一种模型来学习最优组合。
这里介绍两个可行的方向:
这两个方向也可以结合起来,用元学习帮助热启动,再使用贝叶斯优化探索适合新任务的方案。
自动特征处理
有人说,世界上的数据科学家,平均花 80% 的时间做特征,20% 的时间建模型,我们在工作中也意识到特征工程无比的重要性。因此在自动机器学习系统中,特征也同样是极其重要的环节。在这里讨论一下特征组合,如何处理时序特征,使用变分自编码器构造特征等方法。
▲ 来源:Springer Link
▲ 来源:Semantic Scholar
模型选择
在拿到一个问题开始建模之前,都会面临一个问题,用什么样的模型?
▲ 选个 Model 吧!来源:Business
你可以很容易地根据自己的经验,面对分类问题还是回归问题,图像还是表类数据,列出几个候选模型,然后你可能会把候选模型用这个数据都训练一遍,并挑出那个验证效果最好的模型用在生产中。在自动机器学习中,我们也会把模型选择分成两步。
首先,拿到一个新问题时,我们获得这个问题的 meta 信息,比如数据是什么格式,数据量大小,训练指标是什么等,通过查询预先准备的问题映射到模型的查找表,找到适合这个问题的几款候选模型及相关超参数设置(或者超参数的搜索空间)。
接下来便是挑选效果好的模型。最朴素的做法是把所有可能的模型和超参数配置都训练一遍,挑出最好的模型即可,然而现实情况通常都有时间和计算资源的限制,导致我们无法训练所有可能的模型参数组合。我们需要一个更加节省资源的方法,
对于一个问题,很多模型不一定需要到训练结束才能做出判断哪个模型效果好或者差,可能在训练过程中我们通过观测验证指标,就能提前剔除一些效果太差的模型。
模型超参数优化
一个模型在开始训练前,可能需要人设置一些参数,比如 LR 有 L1、L2 正则系数用来控制模型过拟合,GBM 有树棵树,学习率等,这些参数配置的好坏会直接影响最终的模型效果。
而且参数配置的好坏又和数据本身有很强的相关性,也就是说,不存在一组黄金配置能在所有数据集上都表现良好。因此建模工作中一个不可或缺的工作便是模型超参数的优化。
如果是我们手动优化参数,一般是选取几组我们认为值得尝试的参数配置,然后训练模型并做交叉验证,最后挑出验证指标最好的模型用作生产。
这种做法对一两个超参数做优化还能应付,然而传统机器模型 GBM 就有小十个需要调试的超参数,更不用说深度学习模型会有更多的参数选择,这使得自动优化超参数技术越来越多的应用到实际建模中。
最常见的做法是 Grid Search 和 Random Search。Grid Search 是让用户在每个超参数的选择范围里取几个点,然后机器会将所有可能的参数组合都尝试一遍,最后选出最好的模型。
▲ 来源:StackExchange
这种方法有两个问题,一是需要用户对每个超参数都要取点,二是由于需要尝试所有参数组合,对计算资源的消耗非常高。R
andom Search 是给定超参数选择的空间范围,然后在这个空间里随机采样N组超参数配置,交给模型做交叉验证,并选出最好的模型。在实际应用中,Random Search 在超参数较多的情况下比 Grid Search 更快而且效果更好。
目前提到的两种做法实现起来都很简单,但缺点是它们都是在参数空间里盲目的搜寻,效率较低。
接下来我们介绍几种在提升效率上努力的思路:
▲ 来源:ScienceProg
这里仅粗略介绍了三个优化超参数的方向,其实最近几年涌现了很多优秀的工作,包括使用元学习,对学习曲线建模,或者将上述的几个思路融合等方式,使超参数优化变得愈加高效。
采样优化
▲ 来源:Wiki
当数据量很大时,用全量数据训练一个模型会花费很长时间,而探索的过程需要训练多次模型,那么总开销就太大了。
也许我们在探索时只使用少量的部分数据训练模型,并且得到的关于模型和参数的选择又能帮助到全量数据训练情况下的选择,那我们就有机会节省大量资源。
这个设想在几年前就有工作进行了证实,通过观察不同采样率下训练模型的效果和超参数的关系分布,发现低采样率时超参数和效果的分布与全量数据训练下的分布具有很强的相关性。
于是我们在实际应用中,可以使用预定的降采样率选择少部分数据,并在这部分数据上进行模型和超参数的优化,然后将找到的最优选择直接放到全量数据上训练生产用模型。
我们发现这种方法尽管朴素,实际应用中却能达到很好的效果。学术界也有提出更成熟的做法,比如对采样率建模[2],
以期望通过一个配置使用低采样率训练的模型效果来预测全量数据下的模型效果,并用预测值来指导超参数的搜索。
深度学习由于具有模型表达能力强,自动学习特征的端到端特性等优点,是今天机器学习领域最受欢迎的模型框架。
然而训练深度学习模型并非易事,不仅有大量的模型超参数需要人工调试,而且模型效果对超参数的选择极其敏感,因此需要大量的尝试和行业经验才能得到优质的效果。
自动深度学习面临同样的挑战。那么,关于自动机器学习的自动训练、网络结构搜索又是怎样的状态?关于拟合 Learning curve、Meta learning、元学习等等知识点,又是该如何理解?
由于本文内容较多,请扫描下方二维码,收看余下部分:关于新的自动机器学习方式,以及如何做模型评估。