基于PaddlePaddle的点击率的深度学习方法尝试

  • 时间:
  • 浏览:0
  • 来源:大发时时彩_时时彩官网ios版_大发时时彩官网ios版

2018-05-11 11:19   CSDN     

我就要评论(

)

字号:T|T

摘要:前面在团队实物分享点击率相关的许多文章时,输出了一篇常见计算广告点击率预估算法总结,就看许多广告点击率的文章,从最经典的Logistic Regression到Factorization Machined,FFM,FNN,PNN到今年的DeepFM,还有文章里面非要讲的gbdt+lr类似,突然 想找时间实践下,正好这次在学习paddle的以前在它的models目录下就看...

前言

亲戚亲戚另一个人儿在分享点击率相关的许多文章时,输出过一篇常见计算广告点击率预估算法总结,参考了许多广告点击率的文章,从最经典的Logistic Regression到Factorization Machined,FFM,FNN,PNN到今年的DeepFM,还有文章里面非要讲的gbdt+lr类似,突然 想找时间实践下,正好这次在学习paddle的以前在它的models目录下就看了DeepFM的实现,将会以前对DeepFM有过比较完整版的描述,这里稍微复习一下:

DeepFM更有意思的地方是WDL和FM结合了,觉得全都 把PNN和WDL结合了,PNN即将FM用神经网络的最好的土办法构造了一遍,作为wide的补充,原始的Wide and Deep,Wide的部分全都 LR,构造线性关系,Deep部分建模更高阶的关系,全都在Wide and Deep中还时要做许多形态学 的东西,如Cross Column的工作,而亲戚亲戚另一个人儿知道FM是都可不可不可以建模二阶关系达到Cross column的效果,DeepFM全都 把FM和NN结合,不想再对形态学 做诸如Cross Column的工作了,你许多是我感觉最吸引人的地方,觉得FM的部分感觉全都 PNN的一次描述,这里只描述下形态学 图,PNN的部分前面都描述, FM部分:

Deep部分:

DeepFM相对于FNN、PNN,都都都可不可不可以利用其Deep部分建模更高阶信息(二阶以上),而相对于Wide and Deep都都都可不可不可以减少形态学 工程的部分工作,wide部分类似FM建模一、二阶形态学 间关系, 是是不是NN和FM的一一3个 更完美的结合方向,另外不同的是如下图,DeepFM的wide和deep部分共享embedding向量空间,wide和deep均都可不可不可以更新embedding部分,虽说wide部分纯是PNN的工作,但感觉还是蛮有意思的。

本文相关代码部分都在来自于paddlepaddle/model, 我这里走一遍流程,学习下,另外我应该 了解算法原理的都可不可不可以仔细再看看里面的文章,今天亲戚亲戚另一个人儿来paddlepaddle上做下实验,来从代码程度学习下DeepFM为什么实现的:

数据集说明(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

criteo Display Advertising Challenge,数据主要来criteolab一周的业务数据,用来预测用户在访问页面时,是是是不是会点击某广告。

wget --no-check-certificate https://s3-eu-west-1.amazonaws.com/criteo-labs/dac.tar.gz tar zxf dac.tar.gz rm -f dac.tar.gz  mkdir raw mv ./*.txt raw/

数据不得劲大, 大概4.26G,慢慢等吧,数据下载完成以前,解压出train.csv,test.csv,其中训练集45840617条样本数,测试集45840617条样本,数据量还是蛮大的。 数据主要有三部分组成:

label: 广告是是是不是被点击;

连续性形态学 : 1-13,为各维度下的统计信息,连续性形态学 ;

离散型形态学 :许多被脱敏出理 的类目形态学

Overview

整个项目主要由几条部分组成:

数据出理

这里数据出理 主要包括一一3个 部分:

连续值形态学 值出理 :

滤除统计次数95%以上的数据,另一一3个 都可不可不可以滤除大部分异值数据,这里的出理 最好的土办法和以前我在1号店做相关工作时一致,代码里面将会做了这部分工作,直接给出了这部分的形态学 阈值;

归一化出理 ,这里andnew ng的课程有张图很明显,表明不同的形态学 的值域范围,会使得模型寻优走『之』字形,另一一3个 会增加收敛的计算和时间;

2.离散形态学 值出理 :

one-hot: 对应形态学 值映射到指定维度的非要一一3个 值为1的稀疏变量;

embedding: 对应形态学 值映射到指定的形态学 维度上;

具体亲戚亲戚另一个人儿来研究下代码:(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

连续形态学 是在1-13的位置,读取文件,将会值大于对应维度的形态学 值的95%阈值,则该形态学 值置为该阈值,并计算形态学 维度的最大、最小值,在gen时归一化出理 。

类目形态学 的出理 相对比较麻烦,时要遍历,许多得到对应维度上所有突然 冒出值的所有情况表,对打上对应id,为后续类目形态学 赋予id。这部分耗时好大,另外强烈希望paddlepaddle的小伙伴能在输出出理 期间打印下提示信息,我以前有时间看看都可不可不可以提提pr。

经过里面的形态学 出理 以前,训练集的值变为:

reader

paddle里面reader的文件,自由度很高,买车人都可不可不可以写生成器,许多使用batch的api,完成向网络传入batchsize大小的数据:

主要逻辑在兑入文件,许多yield对应的网络数据的输入格式。

模型构造

模型构造,DeepFM在paddlepaddle里面比较简单,将会有专门的fm层,你许多据我所知在TensorFlow或MXNet里面非要专门的fm层,许多值得注意的是,在paddlepaddle里面的fm层,只建模二阶关系,时要上加入fc才是完整版的fm,实现代码如下:

许多全都 构造DeepFM,这里根据下面的代码画出前面的图,除去数据出理 的部分,全都 DeepFM的网络形态学 :(关注知乎专栏作者:想飞的石头 https://zhuanlan.zhihu.com/burness-DL 查看源代码)

其中,主要包括一一3个 部分,一一3个 是多个fc组成的deep部分,第3个是sparse fm部分,许多是dense fm部分,如图:

这里蛮简单的,具体的api去查下文档就都可不可不可以了,这里稍微说明一下的是,sparse feature这块有两部分一块是embedding的出理 ,这里是先生成对应的id,许多用id来做embedding,用作里面fc的输出,许多sparse_input是onehot表示用来作为fm的输出,fm来计算一阶和二阶隐变量关系。

模型训练

数据量太少,单机上跑是非要什么的什么的问题 ,都可不可不可以正常运行成功,在我实物机器上,都可不可不可以运行成功,许多有一一3个 什么的什么的问题 :

fm将会出理 的形态学 为稀疏表示,而paddlepaddle在这块的FM层的支持非要在cpu上,宽度这麼快,分析意味着觉得都在fm的宽度的什么的什么的问题 ,将会deepfm有设计多个fc,应该是这里的宽度影响, 在paddlepaddle github上有提一一3个 issue,得知暂时paddlepaddle非要把部分中放gpu里面跑,给了一一3个 出理 方案把所有的sparse改成dense,发现在这里gpu显存hold不住;

机器太渣,将会有开发任务非要长期占用;

全都综上,我打算研究下在百度云上为什么通过k8s来布置paddlepaddle的分布式集群。

文档https://cloud.baidu.com/doc/CCE/GettingStarted.html#.E9.85.8D.E7.BD.AEpaddlecloud

提了一一3个 issue: https://github.com/PaddlePaddle/cloud/issues/542,等里面出理 了再来更新分布式训练的部分。

单机的训练非要有哪些大的什么的什么的问题 ,由里面所说,将会fm的sparse不支持gpu,全都这麼快,拉的百度云上16核的机器,大概36s/100 batch,总共样本1000多w,一一3个 epoch预计一一3个 小时,MMP,等吧,分布式的必要性就在这里。

另外有在paddlepaddle里面提一一3个 issue:

https://github.com/PaddlePaddle/Paddle/issues/7010,说把sparse转成dense句子都可不可不可以直接在gpu上跑起来,你许多看起来不值得去尝试,sparse整个维度还是挺高的,期待对sparse op 有更好的出理 方案,更期待在都都都可不可不可以把单层单层的中放gpu,多设备一同跑,这方面,TensorFlow和MXNet要好太少。

这里我遇到一一3个 什么的什么的问题 ,我使用paddle的docker镜像的以前,都可不可不可以很稳定的占用16个cpu的大部分计算力,许多我在云主机上买车人装的以前,cpu占用率很低,将会是和我环境配置不得劲什么的什么的问题 ,你许多什么的什么的问题 不大,以前为了不污染环境主要用docker来做相关的开发工作,全都这里什么的什么的问题 不大。

cpu占有率有比较明显的跳动,这里从主观上比TensorFlow稳定性要差许多,不排除是sparse op的影响,印象中,TensorFlow cpu的占用率很稳定。

到发这篇文章位置,跑到17100个batch,基本能达到auc为0.8左右,loss为0.208左右。

预测

预测代码和前一篇将paddle里面的demo一样,只时要,重新定义一下网络,许多绑定好模型训练得到的参数,许多传入数据即可完成inference,paddle,有专门的Inference接口,只要传入output_layer,和训练学习到的parameters,就都可不可不可以很容易的新建一一3个 模型的前向inference网络。

总结

DeemFM是17年宽度学习在点击率预估、推荐这块的新的最好的土办法,不得劲类似于deep and wide的思想,将传统的fm来nn化,利用神经网络强大的建模能力来挖掘数据中的有效信息,paddlepaddle在这块有现成的deepfm模型,单机部署起来比较容易,分布式,这里我按照百度云上的教程还未成功,后续会持续关注。另外,将会最近在做大规模机器学习框架相关的工作,越发觉得别说早熟期是什么的句子 图片 的,仅仅都都都可不可不可以work的框架就很不错了,而比较好用的如现在的TensorFlow\MXNet,开发起来真的难上加难,以前光是做调包侠时非要体验,现在深入到这块的工作时,才知道其中的难度,也从另一一3个 宽度开始英文英文审视现在的各种大规模机器学习框架,比如TensorFlow、MXNet,在宽度学习的支持上,觉得很棒,许多都在瓶颈,对于大规模海量的feature,尤其是sparse op的支持上,大概现在还未就看不得劲好的支持,就比如这里的FM,将会亲戚亲戚另一个人儿一定会吐槽为什么非要慢,没做框架以前,我也会吐槽,许多开始英文英文接触了许多的以前,才知道FM,主要focus在sparse相关的数据对象,而这部分数据太难在gpu上完成比较高性能的计算,全都前面经过paddle的开发者解释sparse相关的计算不支持gpu的以前,才感同身受,一一3个 好的大规模机器学习框架时要要太少同目标来评价,将会需求是大规律数据,那稳定性、可扩展性是重点,将会是更多算法、模型的支持,将会现在的TensorFlow、MXNet才是标杆,多么希望现在大规模机器学习框架都都都可不可不可以多元化的发展,有宽度学习支持力度大的,都在传统算法上,把数据量、训练规模、并行化加速并做到极致的,另一一3个 的发展才或许称得上百花齐放,觉得亲戚亲戚另一个人儿不时要太少不同长相的TensorFlow、MXNet锤子,有以前亲戚亲戚另一个人儿就时要把镰刀而已,希望大规模机器学习框架的发展,不应该仅仅像TensorFlow、MXNet一样,希望有一一3个 专注把做大规模、大数据量、极致并行化加速作为roadmap的新标杆。