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

1、背景

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

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

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

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

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

2、增量训练框架介绍

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

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

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:

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网络,来辅助模型的训练。

此时模型的损失变为:

首先提一下,这个地方我感觉符号上还是有些值得商榷的地方,即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天的模型

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

3、实验结果

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

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

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

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

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

推荐阅读

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

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

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

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

  1. 华为手机记事本导出_华为手机备忘录如此好用!你只用来当记事本,真是大材小用了...

    用华为手机也有好几年了,现在的华为已经有了很大的突破,不再是简简单单的通讯工具了,它有很多功能,在工作中也可以用到,能有效的帮助我们解决很多问题,下来就一起来看看吧. 今天先给大家说一下华为手机的备忘 ...

  2. 华为双前置摄像头_华为再出新招:升降式前置双摄+麒麟980+8800W

    全面屏手机为了尽可能地提升占屏比,各大手机产商在手机屏幕的设计上想尽了办法,但其中遇到的最为麻烦的就是前置摄像头的处理问题,为此,现在很多手机公司都在研究一种隐藏式的前置摄像头,想把前置摄像头安排在看 ...

  3. kettle spoon判断增量更新_使用Kettle实现数据实时增量同步--时间戳增量回滚同步...

    使用Kettle实现数据实时增量同步 0. 前言 本文介绍了使用Kettle对一张业务表数据(500万条数据以上)进行实时(10秒)同步,采用了时间戳增量回滚同步的方法.关于ETL和Kettle的入门 ...

  4. windows mysql增量备份_关于window下mysql数据库增量备份

    mysql增量备份(mysql5.1 之后),linux下mysql增量备份 网上资料很多.这里只说明window下mysql增量备份. 定义: mysql数据库会以二进制的形式,自动把用户对mysq ...

  5. 使用华为云跑自己的深度学习模型教程

    使用华为云跑自己的深度学习模型教程 文章目录 使用华为云跑自己的深度学习模型教程 前言 一.创建访问密钥? 二.创建数据集OBS桶 (一)什么是OBS桶 (二)创建OBS桶 三.上传数据到OBS桶 ( ...

  6. 实用设置_华为手机4个冷门实用的设置,都知道的绝对是资深花粉

    众所周知,华为手机里面的设置特别多,单单一个相机功能设置,就足够你折腾几个小时,接下来就列举4个华为手机冷门实用的设置,全部知道的绝对是资深花粉了. 1.拍照目标跟踪 拍过照的都知道,移动的对象最不好 ...

  7. java抠图人物背景图片_人物抠图换背景两种实用方法!

    人物抠图在平面设计中是非常常见的,那么到底要如何将图片素材中的人物抠出来,换到新的背景中呢?其中都有哪些要点?下面小编分享给大家两种实用的人物抠图方法,会使用到两种不同的图片编辑软件. 一.PS抠图 ...

  8. 网站推广策略-网站推广120种实用方法_打杂的_新浪博客

    介绍实用有效的企业网站推广方法,网站推广计划,网站推广方案和网站推广案例等.<网站推广策略>用网络营销的系统性思想研究网站推广,将网站推广作为企业网络营销策略的组成部分. 网站推广120种 ...

  9. 手机通讯录分组名称_华为手机的几大办公实用技巧,让你效率提升不止一点点...

    现在手机越来越方便了,功能也月来越多,下面就给大家分享一下华为手机的几大实用办公技能. 1.备忘录实用技巧 备忘录的灵感速记,可以让你通过语音文字.图片的方式随时随地记录灵感,方便快捷. 打开[备忘录 ...

最新文章

  1. e.printStackTrace()不是打印吗,还能锁死?
  2. oracle 数字不用,oracle – Plsql将数字(货币)拼写为意大利货币而不用硬编码的翻译编号...
  3. android OKHttp的基本使用详解
  4. android log system
  5. 三合一剪弦器怎么用_三合一冲锋衣推荐选购攻略:
  6. SpringBoot实战(五):配置健康检查与监控
  7. 《数字逻辑设计与计算机组成》一 第2章 2.1 简介
  8. python3.9新特性_Python 3.9正式版,新特性提前一睹为快
  9. Oracle物化视图的一般使用【转】
  10. 算法(第四版)IDEA终极环境配置
  11. 艺龙深耕酒店VS携程 布局旅游全产业
  12. 集合例题3.:现在有一个map集合如下:Map<Integer,String> map = new HashMap<Integer, String>();map.put(1, “张三丰“);map.
  13. linux下编写脚本从ftp服务器定时下载文件
  14. vsftpd.conf 配置详解
  15. VideoPlayer视频播放
  16. 我与谷歌共成长--谷歌常用的技巧#我和 Google 谷歌共成长
  17. 一行代码深度定制你的专属二维码:(amzqr、MyQR制作动态二维码)
  18. 使用python对单幅图像进行数据增并保存增强后的结果
  19. echarts图表折线图柱状图多个X轴Y轴以及一个Y轴反向
  20. 重押农业,拼多多正在扛起乡村振兴大旗

热门文章

  1. 项目经理沟通的四个好习惯
  2. 6个变态的C语言写的Hello World
  3. 图像、帧、片、NALU(firstime)
  4. 想要转人工智能,程序员该如何学习?(学习路线、知识体系)
  5. 手机号码归属地及运营商查询
  6. idea搭建web项目及tomcat部署总结
  7. 单例模式之恶汉模式(详解)
  8. centos下cmake安装
  9. C++构造函数/析构函数 设置成private的原因
  10. C库函数qsort七种使用方法示例