增量导出_[华为]一种实用的增量式深度CTR模型训练方法

f584cbe463d8335fced64f39e1fd3056.png

今天给大家介绍一篇有关深度CTR模型增量训练的文章,来自华为诺亚方舟实验室。

1、背景

深度CTR模型需要大量的数据进行训练,同时需要不断的更新以适应最新的数据分布。如果模型没有及时更新,则有可能带来线上效果的衰减,如下图,当模型5天没有更新时,线上AUC会有0.66%的下降,这会带来巨大的收入损失,同时对用户体验也会造成一定影响。

fb919079b365068fb55cb3e2ede7a1d1.png

为了保证线上模型的有效性,通常需要对模型进行天级别/小时级别甚至是分钟级别的更新。而本文将重点放在天级别更新上。

模型的天级别更新比较常用的方式是使用规定时间窗口的数据对模型进行重新训练,如下图,模型0使用第1天到第10天的数据进行训练,模型1使用第2天到第11天的数据进行训练,依次类推:

d20c3d5250eb86e888096965b21f954a.png

上述重新训练模型的做法,其缺点是耗时比较高,更新可能不及时,因此可以考虑增量训练的方式,如下图,模型0同样使用第1天到第10天的数据,模型1在模型0的基础上,加入第11天的数据进行更新,依次类推:

aec75dd6ba747c3832ff9585184efe97.png

本文重点介绍华为如何对深度CTR模型进行增量训练,我们在下一节中一起学习一下。

2、增量训练框架介绍

华为增量训练框架如下图所示:

1d217d9c150eb51831e7357a51836e25.png

如上图,该框架主要包含三个模块:数据模块、特征模块、模型模块,接下来对这三个模块依次进行介绍。

2.1 数据模块

数据模块主要对数据进行存储和混合。如上图,在第t天更新模型时,从t-1天的数据池中选择部分数据,同时混合第t天新的数据,作为第t天模型更新所使用的数据。论文中提到,应该选择t-1天的数据池中哪部分的数据,这块仍然处于研究中,期待后续的研究进展。

2.2 特征模块

特征模块主要对特征进行处理,这块重点讲解对于离散型特征的增量更新。

对于离散变量来说,许多取值出现的次数非常少,通常会设定一个出现次数的阈值,当该取值出现的次数高于阈值时,会计作一个单独的类别,而出现次数低于阈值的所有取值,会被统一当作others类别处理。当得到所有的类别之后,会将每一个类别映射到一个特定的id,最后转换成对应的embedding。

类别映射到id的方法有许多种,文中提到了自增映射(auto-increment)和哈希映射( hash-coding)。论文使用的是自增映射,这里也简单介绍下哈希映射(论文没有提及,个人经验,欢迎各位纠错)。对哈希映射来说,首先要确定一个总的哈希空间大小,如2^10,然后通过某种哈希方式(如murmur哈希),将对应的类别转换为对应的hash值,作为该类别的id值。对哈希映射来说,通常设定的hash空间的会比实际的类别数量大很多,以尽可能避免冲突的出现。使用Hash这种方式的好处个人认为主要是新出现的特征类别,不需要改变embedding向量的个数,embedding向量的个数和hash空间的大小相同;但hash空间的大小往往比实际的类别数量,会导致导出的模型比较大,同时需要采用合适的hash算法,否则会导致冲突的出现,降低模型的准确度。

而本文使用的自增映射方式,当新类别出现或者Others类别中某种取值出现的次数超过阈值时,则需要进行特殊处理。如上图所示,t-1天的模型,只有Feat A和Feat B出现次数超过了阈值,因此只需要将Feat A和Feat B转换为对应的id,分别为1和2(上图有点不太严谨了,应该还有Others类别,不过不影响理解)。此时训练的模型,embedding的大小为2* K(k为每个embedding向量的长度)。当收集了第t天的数据后,Feat C出现次数也超过了阈值,因此采用自增的方式,将Feat C转换为对应的自增id,即3。此时第t天的模型不能继续使用第t-1天的模型进行继续训练,而必须重新进行embedding的初始化,大小为3 * K,其中前两行使用t-1天模型训练后的embedding值进行初始化,第三行则进行随机初始化。

下面是对特征模块处理过程的总结,其中Eexist表示t-1天模型中存在的id对应的embedding,Enew表示第t天模型新增的embedding:

17dcacffd10d1c922c8f085b3bb441ee.png

2.3 模型模块

对于模型的更新,这里介绍两种方式,Fine-tune和Knowledge distillation。

2.3.1 Fine-tune

对于Fine-tune方式,除Embedding从t-1天模型进行warm-start外,其余的网络参数也从t-1天模型进行拷贝。然后使用数据模块混合后的训练数据进行参数更新。这里还使用了一些小的trick来实现更好的效果,比如对于Eexist部分的embedding,使用较小的学习率,而对于Enew部分的embedding,则使用一个相对更大的学习率。模型使用交叉熵损失进行更新。

2.3.2 Knowledge distillation

为了增强模型从历史数据中学到的知识,避免出现不同天的模型预测差距过大的情况,在使用Fine-tune方式所有特性的基础上,还增加了teather网络,来辅助模型的训练。

此时模型的损失变为:

5e8a491e0c1d465e7de5ca9e42e09dee.png

首先提一下,这个地方我感觉符号上还是有些值得商榷的地方,即student net的预测值,在和真实值(hard label)计算交叉熵损失,以及和teacher net的预测值(soft label,Ysoft)计算交叉熵损失时,二者的计算是存在一定的差别的(区别在于是否把log logits即Z除以temperature τ),因此符号上应该也做区别处理更加合适。

上面损失的三项分别是student net的预测值和真实值计算的交叉熵损失,student net的soft预测值和teacher net的soft预测值计算的交叉熵损失,以及正则项。

简单解释下损失中temperature τ的含义,知识蒸馏这种方式,我们希望得到的结果是student net和teacher net的输出尽可能接近,假设不对logits除以temperature,那么teacher net输出的类别概率可能会比较悬殊,比如0.99和0.01,那么0.01这一类对于损失的贡献是非常小的,解决方式就是在计算损失函数时放大其他类的概率值所对应的损失值。假设teacher net的log logits = 3,那么softmax之后两类的概率分别为0.95和0.05,再假设temperature=10,那么softmax之后两类的概率分别为0.57和0.43,这样两种类别对于损失的贡献更为接近了。这样更加有助于student net向teacher net的方向优化。

关于teacher net的选择,文中给出了两种方式:

KD-batch:使用一定时间窗口内全量数据训练的模型KD-self:t-1天的模型

后续会给出这两种方式的实验对比结果,好了,接下来是对模型模块的总结:

4e0fffc48930679a0958acb42b973027.png

3、实验结果

好了,最后来看一下论文的实验结果:

首先,使用论文提到的增量训练的方式,表现能否超过本文一开始提到的使用固定长度的时间窗口重新训练模型的方式呢?结果如下表所示,其中Batch-0表示使用最新的时间窗口训练的模型,Batch-1表示使用延迟一天的时间窗口训练的模型,依次类推,可以看到增量训练方式得到了一定程度的AUC的提升,以及模型更新耗时的大幅缩短。

76d8329e357b25bb89b6cfc687309df7.png

同时,从上表可以看到,在模型模块使用或Fine-tune或者KD的方式,在Criteo数据集上表现接近,但在华为App上的数据来看,KD的方式表现更好。

最后,论文还验证了特征模块的作用,如果不对新加入的特征列别进行处理的话,会带来效果的衰减,随着天数的增加,这种衰减会越来越明显。

1051eec2234b5b5822724f7387e2994e.png

38469b54ccbbfbd74760135b0aa27829.png

好了,本文就介绍到这里,又是一篇可以学到很多工业经验的文章,值得仔细品读!

推荐阅读

  • 计算广告OCPC算法实践(一) 智能出价PID控制中的偏差与响应函数设计
  • 分享我收藏的100篇精选算法技术文章
  • Embedding 技术在民宿推荐中的应用
  • 分类模型与排序模型在推荐系统中的异同分析

想了解更多关于推荐系统的内容,欢迎扫码关注公众号浅梦的学习笔记。回复加群可以加入我们的交流群一起学习!c6fa37b1c50346c3e7aef36c8403ecb8.png

码字很辛苦,有收获的话就请分享点赞在看三连吧?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7如何添加终端服务器,Windows7系统超级终端的添加方法 win7如何添加超级终端...

有用户在刚升级到Windows7系统以后反映,在XP 操作系统里,超级终端是很好用的,但是却不知道为什么,升级为Windows7系统后却找不到超级终端在哪,出现这样的情况让用户非常的烦恼,其实找不到超级终端&#xff…

腾讯这家公司的核心竞争力是什么?为什么?

Andy Pan ,腾讯无线国际业务产品总监, 腾讯国际业务部... 我决定在国外出差的最后一晚晚点休息,在酒店静静的认真的回答这个问题。我尽量客观的负责的回答,不愤青,不炫耀,不攻击,用朴实的语言。只代表我个人的思考&…

h.323 服务器 作用,Cisco CallManager服务器冗余的H.323 网关拨号对端配置

语音、视频和集成数据 (AVVID) 设计的体系结构一般建议您具有主 Cisco CallManager 服务器和辅助 Cisco CallManager 服务器以实现冗余。如果主 Cisco CallManager 服务器发生故障,则辅助 Cisco CallManager 服务器将接管,并且 IP 电话将重定向到此服务器…

静态优先权和动态优先权

静态优先级:在创建进程时确定的,且在进程的整个运行期间保持不变动态优先级:在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。确定静态优先权的依据有如下三个方…

xmind可以画流程图吗_新娘妆可以自己画吗?临夏化妆学校告诉你答案!

对于很多女性来说,一生中最重要的时候无疑是新婚的那一天,古时候的闺阁女子,凤披霞冠,八台大轿,携手自己的如意郎君相伴一生,现代女子,洁白的婚纱,手握鲜花,一枚戒指&…

2.如何对待加班

感觉深圳尤其是IT行业,加班确实很普遍。我觉得主要看是为什么加班吧,是公司强制要求,还是员工开发效率低,还是加班有额外的收入,还是想在这个期间学习,自我提升。公司为什么会形成这个氛围,是自…

计算机一级发邮件发送多个抄送,计算机一级考试IE题和收发邮件模拟题.docx

文档介绍:某模拟网站的主页地址是:HTTP://LOCALHOST:65531/ExamWeb/INDEX.HTM,打开此主页,浏览"航空知识"页面,查找"运十运输机"的页面内容,并将它以文本文件的格式保存到考生目录下,命名为"y10ysj.txt"。IE题①通过"答题"…

git merge与rebase

参考这篇文章 Git 之 merge 与 rebase 的区别 文章2 另外,使 rebase出现冲突后,先修改冲突,然后git add 某文件(我使用add .经常有问题),然后git rebase --continue,持续到rebase结束&#xf…

wget 地址 连接超时_HttoPool连接池 和Hystrix 服务容错机制

学习主题:httpPool&Hystrix学习目标:对应视频: http://www.itbaizhan.cn/course/id/85.html对应文档:无对应作业1. 编写支持Gzip压缩案例(1) 修改Consumer的全局配置文件,添加Gzip相关配置。spring.application.nameeureka-consumer-http…

JQuery 加载 CSS、JS 文件

JS 方式加载 CSS、JS 文件: //加载 css 文件 function includeCss(filename) {var head document.getElementsByTagName(head)[0];var link document.createElement(link);link.href filename;link.rel stylesheet;link.type text/css;head.appendChild(link) …

关闭网页如何接收服务器消息,WebSocket服务端发消息给客户端,浏览器收到消息就关闭了...

引用 2 楼 fly_dragon_fly 的回复:收到的消息是什么0000 00 0b ab 7a 86 83 18 f4 6a 36 60 a2 08 00 45 00 ...z....j6...E.0010 00 b9 49 d3 40 00 40 06 6b aa c0 a8 01 79 c0 a8 ..I...k....y..0020 01 f8 08 03 71 88 a4 d5 52 dc ce c1 f6 89 50 18 ....q...R..…

街舞中的rolling机器人_REMEMBER街舞培训中心2020年元旦汇演

二零二零 元旦汇演REMEMBER2020年1月1日,Remember街舞培训中心在爱琴海购物公园进行了两个小时的汇报表演,Remember的学员们贡献了非常精彩的表演。在过去的2019年,我们一路探索、一路艰辛、一路欣喜、一路收获,在这里感谢所有老…

shell基础(上)

2019独角兽企业重金招聘Python工程师标准>>> 一 shell介绍 shell 是一个命令解释器。本质上是用户与计算机之间的交互。 用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。 每个用户都可以有自己特…

webRTC实战总结

前言 前段时间一直在忙一个基于WebRTC的PC和移动端双向视频的项目。第一次接触webRTC,难免遇到了许多问题,比如:webRTC移动端兼容性检测,如何配置MediaStreamConstraints, 信令(iceCandidate, sessionDescription)传输…

程序员眼中的2007:寻找软件开发利器

软件开发生命周期包括需求分析、设计、开发、测试、交付部署等各个阶段,以及贯穿在整个开发过程的软件开发项目管理环节,2006年,在每一个阶段都出现了令人眼花缭乱的技术与应用,同时这些技术还将进一步影响2007年的发展&#xff0…

谷歌虚拟服务器申请,【美国podserver.info】免费300M虚拟主机空间申请使用教程

【美国podserver.info】注册使用教程:1、打开申请地址,点击下图位置中的“Sign Up”开始注册。2、点击“Sign Up”开始注册后,进入到注册检查页面,我们按下图选择“I’m a human.”然后点击“Submit”进入到注册信息填写页面。3、…

物理层协议有哪四大特性

1.机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。2.电气特性 指明在接口电缆的各条线上出现的电压的范围。3.功能特性 指明某条线上出现的某一电平的电压表示何种意义。4.过程特性 指明对于不同功能的各种可能事件的出现顺序。