写点什么

前百度资深科学家技术分享:大规模机器学习与 AutoML

2019 年 3 月 11 日

前百度资深科学家技术分享:大规模机器学习与AutoML

今天分享的内容包括:简要介绍搜索广告中的机器学习,包括搜索广告的应用场景、点击率(CTR)预估问题、搜索广告机器学习流程及其关键技术(特征选取、特征生成、模型训练等);以及机器学习的发展。


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


(2) 离散特征生成,为了便于描述我们假设一个场景,我们训练样集包括 10000 查询、1000 用户、100 广告,采用 ID 进行标号,查询(q):1、2、…、10000,用户(u):1、2、…、1000,广告(a):1、2、…、100。例如可以通过原始特征向量:q=1、u=2、ad=3,这样就描述了一个影响广告的点击因素出来。因为这些值是离散型的,为了无损化表示信息,采用 onehot 信息编码方式进行,如下图所示,第 1 部分表示 10000 查询,第 2 部分表示 1000 用户,第 3 部分表示 100 广告。



有时候我们发现广告里面,存在很多非线性关系,可以采用组合特征来描述。将查询和用户进行交叉组合,如下图所示,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 效率上明显高。



作者介绍

夏粉博士,毕业于中科院自动化所,师从机器学习泰斗王珏老师。前百度资深科学家,协助百度研究院大数据实验室主任张潼(现腾讯 AI Lab 主任),组建 50 多人团队,管理超过 20 人的大规模机器学习团队,数次荣获百度技术最高创新奖。曾在机器学习顶级会议杂志 JMLR、ICML、NIPS 等发表多篇论文。在百度期间夏粉带领团队推出了全球领先的超大规模离散稀疏架构自动化机器学习平台(Pulsar),覆盖公司 9 0 %以上业务线,包括百度最核心的商业变现系统凤巢、金融、糯米等。在公司内部机器学习平台中用户数排名第一,覆盖了日均流量 4.5 亿,日均收入过亿,累积 CTR 提升超过 50%。此外,夏粉曾作为百度网盟 CTR 团队技术负责人,独立设计了一套容纳万亿特征数据的、模型分钟级别更新的、自动高效深度学习的点击率预估系统,其中超过 5 项创新超越谷歌公开发表的技术和算法。


本文来自夏粉博士在 DataFun 社区的演讲,由 DataFun 编辑整理。


2019 年 3 月 11 日 08:003470

评论

发布
暂无评论
发现更多内容

做事情的三条边

石云升

28天写作 基线 极限

编程语言学习心得 (完全版) -- 不要害怕遗忘和混淆

蔡超

程序员 个人成长 编程语言 go语言

「架构师训练营 4 期」 第三周 - 001

凯迪

爱了爱了!阿里爆款Spring进阶宝典,涵盖其所有技术栈(源码+实战彻底玩转Spring框架)

Java架构之路

Java 程序员 架构 面试 编程语言

python自学 第二章 python语言基础之语法特点(注释、代码缩进、编码规范)

WEB前端修行日志

Python 编码格式

不愧是Github上疯传的腾讯Java全栈进阶笔记!总结的太全啥都有!

Java架构之路

Java 程序员 架构 面试 编程语言

是什么可以在Github上标星85.4K,揭秘阿里Springboot项目笔记!

996小迁

Java 架构 面试 springboot

现成矿机挖矿软件系统APP开发案例

开發I852946OIIO

系统开发

RocketMQ源码分析之消息拉取流程

互联网架构师小马

JVM内存模型总结和上手实践,亲测学完没脱发

互联网架构师小马

如何实现CentOS服务器的扩容??

冰河

Linux centos 扩容 服务器

Spring Boot 中的全局异常处理

武哥聊编程

Java springboot SpringBoot 2 异常处理 28天写作

突破瓶颈,“iOS开发”,跳槽面试必备题(针对年后面试者)

Geek_24a3d9

面试题 简历 ios开发 大厂面试经历 跳槽面试

使用 JSX 建立 Markup 组件风格

三钻

组件化 前端进阶

非科班生的逆袭:四面斩获字节跳动offer,聊聊我的个人历程

互联网架构师小马

Java 面试 算法 操作系统 计算机组成原理

线上问题排查学习总结

原来不悔

Java Linux

week8-conclusion

J

Android面试总结(一)

我就感觉到快

一款dubbo服务可视化调试工具

程序员架构进阶

dubbo 工具 RPC 服务化 28天写作

Lambda 和 Stream API

学个球

Lambda Java 8 Stream<T>

阿里首推的“SpringBoot+Vue全栈项目”有多牛X?

Java架构之路

Java 程序员 架构 面试 编程语言

python自学 第四章 python语言基础之变量

WEB前端修行日志

Python 编码格式

写在开课前

5x

C2C交易系统APP开发|C2C交易软件开发

开發I852946OIIO

系统开发

RocketMQ解析

石刻掌纹

python自学 第三章 python语言基础之保留字、标识符与内置函数

WEB前端修行日志

Python 编码格式

区块链交易所系统开发|区块链交易所软件APP开发

开發I852946OIIO

系统开发

产品经理训练营笔记-认识产品经理(上)

.nil?

基因编辑食品,能否端上我们的餐桌?

脑极体

Java架构师必会的知识清单,如何让你技术上的提升面试时的丰收

Crud的程序员

Java 架构 java程序员

创业失败启示录|校园微生活之校园女神

青城

28天写作 创业失败启示录

混合云之争的开端与终途

混合云之争的开端与终途

前百度资深科学家技术分享:大规模机器学习与AutoML-InfoQ