Press "Enter" to skip to content

大规模机器学习与AutoML技术

 

1. 首先以实例形式介绍一下广告场景上的机器学习问题。

 

如下图所示,在百度搜索引擎中搜索“北京美食”,界面右侧会出现相应的广告模块,从广告库中选择匹配的广告显示,我们希望这些广告能被用户点击,假如用Prob(click=yes | ad, page, user, time, region,…)来描述,page指的是页面,user是用户,time时间段,region指广告投放区域。我们要研究用户点击这些广告的可能性,即点击率预估问题。

 

 

我们可以通过4个过程描述:(1)特征生成,首先需要记录影响广告的每个因素,把广告场景展现变成一个向量,即机器学习中特征生成;(2)概率模型,假设一个概率模型,在给定一个向量时,通过函数映射等方式把向量变成0-1之间实数(点击率);(3)模型训练,是将前面两个过程中函数关系学习出来,即AI建模,通常从历史数据学习模型参数,挖掘规律,将前面提到的函数映射关系学习出来;(4)线上预测,在已知映射关系以后,把模型用到新的广告展现上,就能得到点击率。

 

 

如下图所示,在大量训练数据展现日志信息中,“检索集合”表示用户query的结果,其中0表示未点击的广告,1表示点击的广告。经过模型训练拟合数据,得到预估模型f(q,ad,w)。最后我们利用预估模型对测试数据进行点击率预估,按照点击率进行排序。有时也需要考虑用户相关度等进行综合考虑。

 

 

以“鲜花”搜索为例,进一步说明。当用户搜索“鲜花”时,根据用户cookie或历史搜索记录,广告商把鲜花网展现给用户,根据用户行为研究广告被用户点击的概率。如下图所示。

 

 

这个过程涉及到几个关键技术:

 

(1) 特征选取,首先我们需要把场景进行向量化。原则是什幺在影响点击的发生?需要结合具体业务进行分析。在广告场景中,标记是哪个广告并描述该广告有什幺特性,比如文字还是图片;流量,广告位置在哪,页面主题等;用户,标记是哪个用户并描述该用户有什幺特性;环境包括时间、地域、天气等描述。在这个场景中很多量都会影响广告点击率,通过机器学习算法挖掘具体哪个量会影响广告点击率。

 

有时候我们发现广告里面,存在很多非线性关系,可以采用组合特征来描述。将查询和用户进行交叉组合,如下图所示,q*u查询和用户特征组合10000×1000。

 

 

这样,我们发现广告机器学习建模具有超大维度特征,百亿到千亿量级,因为广告库本身记录就比较多,进行组合以后量级更大;具有稀疏特征,每个样本里面非零元的个数有限。

 

为了便于利用机器学习进行处理,早期在计算机资源有限的情况下,通常对样本进行抽样,对特征进行降维。如下图所示多种降维方法,第一种是离散到离散:Hashing,第2种是离散到统计:statistics,第3种事离散到连续值:特征嵌入(Embedding)学习。

 

 

当我们把一个场景中出现的广告用向量描述以后,下一步我们需要知道向量因子的点击率,如下图所示,通常会采用sigmoid概率假设,其中x为输入向量,f(x)指一个场景里面如何把向量映射到实数R,通常根据f(x)形式分为浅层和深层网络,在做广告预估的时候,可以选择浅层也可以选择深层,各有优缺点,数据量大时深层效果会好一点。

 

 

(3) 模型训练,我们把整个假设做好以后,接下来就是训练模型。模型训练数据如(x1,y1),…,(xn,yn),其中x为特征向量,y{-1,+1},-1为未检点,+1为检点。广告场景为千亿样本、千亿特征,针对这样场景,我们希望y的预估值和实际值接近,采用最大似然方法,求解如下优化问题,最终求解w。

 

但是实际场景并没有这幺简单,通常我们会添加正则化项,如下图所示,主要目的是当数据量不够时,减少模型大小,防止拟合现象。

 

 

下面简单说明数据优化求解算法,举例说明,由于机器学习目标函数一般来说不是必知解,很多问题要依赖于迭代优化,通常做法就是有一个初值解,依次迭代,所以要求迭代方向正确、步长跨度合适。在实际场景中,我们有时应用牛顿法,二阶收敛且收敛速度快,但在广告场景中特征维度上亿,运算量特别大,所以较多地使用1st阶梯度近似Hessian矩阵,典型的算法是LBFGS算法,用好多个1阶梯度逼近。其他的方法如每次只使用单维特征梯度的坐标梯度下降法,使用单个样本梯度的随机梯度下降(SGD)法。

 

在实际场景中,除了算法设计外,还有分布式计算框架设计,设计思路是模型很大时,需要服务器管理参数,然后参数服务器会与下面每台机器通讯,收集每台机器学习参数情况,据此返回模型信息并汇总,然后下发,即分发和收集过程。如下图所示,在实际场景中根据数据种类可以分为数据并行(图像)、模型并行(基因)、数据&模型并行(广告)。

 

 

点击预估系统实际上是整个搜索广告系统的组成部分,整个架构如下图所示,用户通过前端ui进来以后,通过as记录用户行为信息,收集来自UFS、PFS以及AFS的信息,然后请求Ctr-server,关键点是构建预估模型,每次产生的数据经过特征抽取、模型训练等产生模型,然后模型又返回前端影响数据的产生,如此不断迭代。

 

 

2.机器学习发展

 

上面介绍了真实场景下广告点击预估的做法,下面介绍一下目前机器学习方面的进展。广告点击预估实际是建模问题,它回答的根本问题就是实际变量与目标变量之间关系,比如什幺年龄段、什幺性格人喜欢看哪类广告?这类问题可以追溯到有人类文明以来,我们通过人脑进行思考,这就是第一代机器学习—人工规则,但受限于人脑和体力,因为人容易犯错并且大脑搜索维度有限。随着计算机的出现,将数据输入计算机进行建模,与传统统计最大的区别是机器学习建模的推广能力问题,刚开始是小规模非线性模型(第二代),随着并行算法出现,产生大规模线性模型(第三代)。机器学习还需要依赖人力协调,需要参数调整专家,为了降低门槛,采用AutoML建模(第四代),如下图所示。

 

机器学习的建模流程如下图所示,建模流程包括数据—特征—算法—调参—评估,经过这个流程得到模型,然后评估模型还差,如果不好,通过反馈重新进行这个过程。在这个过程中有很多数据、特征和算法环节(数据抽样、数据去噪、特征选择、特征变换等),每个环节都可能影响模型效果,整个建模过程就是这些环节反复调整,直到得到模型。AutoML借助计算机搜索的优点,将整个过程在计算机上自动实现,难点就是将这个问题数学化,然后就有了目标函数和方向。

 

 

AutoML问题定义。AutoML属于目前最热门的方向之一,无论是ICML、ECMLPKDD、NIPS都会有Learning workshop讨论AutoML问题,2017年5月谷歌也公布了自己的AutoML算法。如下图所示,AutoML问题定义,通俗地来说,假设有这幺一个过程:我们有一个训练集、一组参数,然后训练出一个模型,利用测试集评测模型,根据评测结果来看参数效果好坏。我们希望整个过程能够自动化,这就是AutoML。从下图的简化目标函数来看,h指训练样本的目标函数,x是模型,λ是超参数,在训练时,我们指定一个λ将得到一个最优x,代入方程得到f(λ),希望找到最小的λ使得f(λ)在测试集效果下比较好。这是个嵌套定义问题,在训练集上得到模型,然后估测模型好差。

 

 

AutoML技术挑战包括超参结构复杂、目标函数不可导、评估代价巨大。AutoML过程中数据、特征、模型全部需要调,参数之间可能存在复杂的层次关系;目标函数不可导,在机器学习中如果可导,采用简单的随机梯度下降方法就能解决;AutoML利用AI评估AI,每评估一次就需要把模型训练一次,代价非常大。针对以上挑战,目前解决思路有两个方向。一是基于搜索的方法,二是利用AI训练AI方法。

 

(1) 搜索算法。下图分别说明,针对二维变量(9个参数,2个维度)可以采用格搜索方法,采用for循环分格搜索等,但有时候搜索效果不明显。如果采用随机搜索方法,随机选择一些点,通常来说这种方法会好一些。有人进行了拓展,例如利用遗传算法、基因算法等。

 

 

有时候在调参过程中,并不需要找到完全最优解时,就能知道算法A与算法B的好差,如下图所示,三种颜色代表三种算法,1—5代表迭代,每迭代一次观察一次,经过一轮迭代以后根据学习曲线,可能还不能区分,但迭代到3次时会出现差异,继续观察算法1和算法2,迭代到5次时,又出现不同,最后选择算法2。这种方法可以应用到整个搜索过程的调参等每个环节。

 

 

还有一种是基于数学方法,既然是优化问题,我们尝试把梯度做出来,当目标函数超参满足一定条件时可行。问题定义前面已经提过,根据最优解条件经过一系列函数变量求导,最终寻找超参数的梯度。

 

 

(2) 以AI训练AI。我们把AI的训练过程看成一个机器学习过程,如下图所示,虚线表示真实曲线,对两个点进行机器学习,每一个点表示模拟一组超参数,使用已有数据拟合超参数与效果的模型,基于模型,平衡Exploitation vs exploration选择下一步试探的点,在选定参数下训练模型,迭代1-3直到满意的点选出。

 

 

也有人这幺认为,根据以前经验调参获得什幺效果,将数据记录下来,据此建立模型,如果数据相同时,直接就配置出最优模型,然后按照那组超参数进行训练,即元学习型方法。

 

 

下面简单介绍一下智轴科技AutoML工作,包括噪音检测创新-sa算法、数据处理、参数学习、模型算法、特征学习等方面。

 

 

以机器学习过程中,广告日志特征调研为例,从日志中抽取广告特征,但我们不知道哪个广告特征对点击效果有影响,通常的做法是尝试单特征和组合特征,然后再进行模拟训练,这种人工挖掘方法,耗时耗力,依赖先验知识,无推广性,假设有N个单特征类,N=10,那幺需要训练2^2^10次模型来寻找最优解,需要很长的时间才能找到最优解。那幺应该如何做呢?我们可能不需要把这个过程训练到结束,可能训练几步后进行比较,也可以用一些正则化的技巧,用简单的目标函数替代原来目标函数,使得替代的目标函数与原目标函数效果基本差不多。此外,还有其他一些自动调参算法。

 

 

下面简单介绍一个应用案例—大数据信用评级应用场景,预测用户进行贷款时是否会信用违约?数据来源就是地图、消费数据、旅行数据、支付数据等,技术采用AutoML。如下图所示,三个团队的模型对比分析结果。第一个团队使用AutoML工具,2人天(初级工程师);第2个团队采用paddlepaddle上的NN,16人天(高级工程师);第3个团队利用SAS的LR+GBDT算法,用时6人天(高级工程师)。由于第3个团队采用第二代机器学习SAS的LR算法,会把数据特征信息变少,效果比较差。团队1和团队2效果差不多,团队1效率上明显高。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注