写点什么

双 DNN 排序模型:在线知识蒸馏在爱奇艺推荐的实践

2020 年 2 月 26 日

双DNN排序模型:在线知识蒸馏在爱奇艺推荐的实践

关键词


写在前面

近些年来,学术界和工业界陆续开展了多项让排序模型变的 wider and deeper 的相关工作,其中,wider(更宽)意味着一个模型包含更多不同的子模型,如 xDeepFM[1]包括了 LR, DNN 和 CIN 三种组件,分别建模一阶显示特征交叉(LR),高阶隐式特征交叉(DNN)和高阶显示特征交叉(CIN);deeper(更深)意味着通过增加模型复杂性来提升模型性能,一些在 NLP 和 CV 领域使用的复杂组件开始被引入排序模型,如 xDeepFM 的 CIN 其实是利用卷积神经网络来建模特征交叉, BST[2]利用 Transformer 建模用户行为序列的表征。然而,更深更宽的模型在提升模型效果的同时,往往伴随着模型推理效率的下降。


爱奇艺提出的在线知识蒸馏方法来平衡模型效果和推理效率,并在短视频信息流和图文信息流两个重要场景上线后都获得了明显的正向效果。其中,在爱奇艺短视频场景时长指标+6.5%,点击率指标+2.3%;图文推荐场景时长指标+4.5%,点击率指标+14% 。


深度学习时代排序模型的演进

从建模特征组合这个角度去介绍深度学习时代排序模型的演进,按照时间的发展经历了三个时期(萌芽期、中兴期和突破期),具体如下:


a. 萌芽期:DNN 开始被引入推荐排序模型,其优点在于神经网络能隐式建模不同特征间的高阶特征组合。国内最早应用案例是百度等公司在 2013 年左右开始将 DNN 用作 CTR 模型;


b. 中兴期:深度排序模型开始被广泛接受,代表模型为 WDL[3]和 DeepFM[4]等,这些模型的优势在于在 DNN 基础上,增加了显示的一阶或二阶特征组合。其中 WDL 几乎成了推荐广告 CTR 模型从传统机器学习时代过渡到深度学习的敲门砖,应用这一模型既能尝到深度学习的甜头,又能复用已有的排序模型成果进一步提升模型性能;


c. 突破:从 DCN[5],xDeepFM 开始,深度排序模型开始变的更深更宽,尤其重视使用 DL 组件来显示建模高阶特征交叉,其显示的高阶特征组合更符合算法工程师对排序模型的期许。通过模型本身来进行特征组合可以避免人工特征组合的一些弊端,如工程代价和人力成本。


上面介绍的深度排序模型可以归类为如下表格,显示的高阶 vector-wise 交叉相对更 make sense, 也是最近一些排序模型工作的核心优化点:



排序模型优化动机

爱奇艺排序模型从 GBDT+FM 等机器学习模型跨入到深度学习时代也是从 WDL 开始的,但是爱奇艺在此基础上做了一些改进,最终排序模型结构如下图 1, Wide 侧是 FM, GBDT 输出是 FM 输入,Deep Model 是 DNN 和 FM 的 stacking。



该模型结构[7]在爱奇艺推荐的各个场景都作为 baseline model 使用,线上表现一直不错。从 2019 年开始,团队开始尝试推动模型的实时性和端到端建模,同时引入一些最新的研究成果来提升模型性能。但在实践过程中,发现 baseline model 存在如下弊端:


  1. GBDT 是 CTR 模型外的预处理组件,不适合实时训练和更新。若 GBDT 更新,整个排序模型也需要更新,无法进行端到端训练;

  2. 若去掉 GBDT, 端到端建模要解决两类原始特征(稀疏特征和稠密特征)之间的高阶特征组合。现有模型对稀疏特征和稠密特征是隔离处理,稀疏特征只进入了 Wide Model,现有模型不支持稀疏特征的显示高阶建模;

  3. 现在的模型结构无法自适应引入一些新的排序模型组件,因为其结构过于的大而全,而缺少了灵活性。


爱奇艺首先尝试了最近提出的一些复杂模型来取代 baseline model,如 DCN, xDeepFM 等,但发现需要平衡 large model 的模型效果和推理性能是有待解决的比较关键的问题。


如以下图表格所示,xDeepFM 比较难落地:


  1. 推理性能:同等情况下,在 CPU 上推理,xDeepFM 与 baselinemodel 相比,耗时是其 2.5~3.5 倍;

  2. 使用 GPU 时,只有在大 batch 下,xDeepFM 推理性能才符合要求。



当使用和现有 baseline model 一样的 CPU 推理资源时,像 xDeepFM 这样的复杂深度模型无法上线。若使用 GPU 进行推理, ROI 并不高。与这两种情况相比,知识蒸馏[6]这一类模型压缩方法是解决这类问题的良药,可以将复杂模型的知识迁移到简单模型。


到这里总结出了下一代排序模型的优化方向:


1. 升级现有基准排序模型


  • 去掉 GBDT;

  • 探索最新的一些排序模型进展,提升排序模型性能;


2. 大规模稀疏特征的交叉


  • 用模型显示建模不同高维稀疏特征的交叉;

  • vector-wise 交叉;

  • 一个模型可以容纳各种特征交叉组件;


3. 高性能的复杂深度模型如何落地


  • 低投入高产出:不高于现有资源投入,获得更好的线上效果;

  • 模型压缩:复杂模型知识迁移到简单模型。


双 DNN 排序模型

通过实践,爱奇艺提出了一种新的排序模型框架: 双 DNN 排序模型,其核心在于提出了新的联合训练方法,从而解决了高性能复杂模型的上线问题,该框架的特点和优势总结如下


:1. 双 DNN


  • 左侧 DNN:模型性能更好的复杂模型,推理性能差;

  • 右侧 DNN:模型性能一般的简单模型,推理性能佳;


2. Fine-Tune


  • 右侧 DNN 复用左侧 DNN 的 inputrepresentation layer;


3. 联合训练


  • 复杂 DNN 监督指导简单 DNN 的学习;

  • KD on the fly, one stage;

  • 训练稳定性,大网络性能天花板不受小网络影响。


排序模型结构如下:



双 DNN 排序模型由两个 DNN CTR Model 组成,左侧是 Teacher,右侧是 Student,Student 模型是最终用于上线推理的 CTR 模型。两者共享特征输入和表示,但是左侧相比右侧多了 Feature Interaction Layer。左侧和右侧有各自独立的 MLP , 其包含多层 Hidden Layer。主要 Layer 的介绍如下:


Embedding Layer:输入表示层,不同特征按 Field 组织,稀疏 Field ID embedding 化后通过 average pooling 得到 field 的 embedding 表示;


Feature Interaction Layer:这是左侧模型核心,其可以容纳各种形式的特征组合组件,二阶或高阶特征组合都可以放置在其中;


Classifier Layer:两个 DNNCTR 模型的 Classifier,一般是多层 DNN。


双 DNN 排序模型的优势

双 DNN 的优势在于联合训练,通过联合训练迁移左侧复杂 DNN 知识到右侧简单 DNN,关键部分是以下 3 点:


1. Feature Transfer:正如模型结构图中的标注 1 所示,两个 DNN 共享特征表示层,相当于右侧 DNN 使用了 copy and freeze 的特征迁移范式;


2. KD One the Fly: 知识蒸馏(KnowledgeDistillation, KD)是两阶段训练,我们将其改为使用联合训练时进行知识迁移,训练时使用 teacher 的预测结果指导 student;


3. Classifier 迁移:仅有第二点还无法让右侧模型性能逼近左侧,因为右侧网络结构偏弱,无法直接学到左侧模型的输出, 于是让 teacher 的 hiddenlayer 作为监督信号指导 student 的 hiddenlayer。


双 DNN 排序模型训练架构

在端到端模型结构确定后,通过引入在线学习实现了模型的实时性。下图是双 DNN 排序模型的训练架构。



Finetune:每天例行使用 30 天窗口训练得到离线双 DNN 排序模型,训练完后再使用最新的样本 fine tune,使得模型能学到最新的用户行为 pattern。


在线学习热启动:正如之前在线学习实践[8]文章中所分享的,这里也是使用离线模型作为在线学习训练的热启动模型,这既能 oov 问题,也能防止在线学习长期运行带来的 bias。而这里的在线学习只使用实时数据更新双 DNN 的 Student 模型,因为真正用于推理的是 Student。


双 DNN 排序模型推理

如下图所示,依赖于公司提供的训练平台,双 DNN 模型的部署和推理实现了模型 Graph 和 Embedding 权重的解耦部署,其使得模型更新和部署超大模型变得更加方便,特别是在模型的大部分重要特征是大规模稀疏特征时。模型推理时,TF serving 通过定制化的 OP 访问存储 Embedding 矩阵的分布式 PS。



业界相关实践

百度


百度广告 CTR 模型的发展历程[9]如下:CTR-X 是一个用于粗排阶段的 DSSM, 其中 CTR 3.0 与我们的工作比较类似,也是用于精排阶段,但是训练两个结构差不多的 DNN 需要运用类似于特征迁移的方法,左侧 DNN 主要用来学习稀疏特征 embedding, 右侧 DNN 使用左侧训练得到的 embedding 和其他特征作为输入训练 CTR model。


阿里



阿里妈妈在 2018 年提出了 Rocket Launching 训练方法[10],将其用于广告算法模型压缩。该方法也是需要联合训练两个复杂度有明显差异的网络,其中简单的网络称为轻量网络(light net),复杂的网络称为助推器网络(booster net),两个网络共享表示层参数,方法和其核心区别在于如下两点:


  1. Rocket Launching 只使用预测结果来指导简单模型的训练,我们的方法是让简单模型同时拟合预测结果和决策层的网络结构表示,两个网络的性能差距会进一步缩小;

  2. Rocket Launching 联合训练时两个大小网络都会在反向传播时更新 EmbeddingLayer 参数, 我们的方法是让小网络直接 sharing, 不再更新,因为实验发现同时更新会拉低大网络性能。


实验部分

双 DNN 模型压测:在爱奇艺某个信息流推荐场景的测试数据来看,左侧模型是右侧模型推理时延的 5 倍左右, 模型大小压缩了超过 3 倍,右侧模型 QPS 也更高。因此同样资源情况下,使用右侧上线 ROI 更高。



Co-Train 和两阶段训练(类似于百度 CTR3.0)效果对比:Co-Train 模式下右侧模型和左侧模型的差距缩小明显, student 的能力更接近 teacher。



总结

爱奇艺提出了一种新的在线知识蒸馏方法,不同于以往的知识蒸馏进行两阶段训练,而是进行联合训练,让 teacher 网络在训练过程中指导 student 网络的训练,与此同时做到不受 student 网络的影响。目前,双 DNN 排序模型的方法在短视频信息流和图文信息流场景实现落地,这也佐证了这一方法的优越性。未来会继续推动落地一些前沿的排序模型研究成果,让 teacher 网络变的更宽更深,进一步提升排序模型的精度。


参考文献

  1. Lian, Jianxun &Zhou, Xiaohuan & Zhang, Fuzheng & Chen, Zhongxia & Xie, Xing &Sun, Guangzhong. (2018). xDeepFM: Combining Explicit and Implicit FeatureInteractions for Recommender Systems. 1754-1763. 10.1145/3219819.3220023.

  2. Chen, Qiwei &Zhao, Huan & Li, Wei & Huang, Pipei & Ou, Wenwu. (2019). Behaviorsequence transformer for e-commerce recommendation in Alibaba. 1-4.10.1145/3326937.3341261.

  3. Cheng, Heng-Tze &Koc, Levent & Harmsen, Jeremiah & Shaked, Tal & Chandra, Tushar& Aradhye, Hrishi & Anderson, Glen & Corrado, G.s & Chai, Wei& Ispir, Mustafa & Anil, Rohan & Haque, Zakaria & Hong, Lichan& Jain, Vihan & Liu, Xiaobing & Shah, Hemal. (2016). Wide &Deep Learning for Recommender Systems. 7-10. 10.1145/2988450.2988454.

  4. Guo, Huifeng &Tang, Ruiming & Ye, Yunming & Li, Zhenguo & He, Xiuqiang &Dong, Zhenhua. (2018). DeepFM: An End-to-End Wide & Deep Learning Frameworkfor CTR Prediction.

  5. Wang, Ruoxi & Fu,Bin & Fu, Gang & Wang, Mingliang. (2017). Deep & Cross Network forAd Click Predictions. 1-7.

  6. Hinton, Geoffrey &Vinyals, Oriol & Dean, Jeff. (2015). Distilling the Knowledge in a NeuralNetwork.

  7. 爱奇艺个性化推荐排序实践.

  8. https://mp.weixin.qq.com/s/lUP2BehOh7KczR3WRnOqFw

  9. 在线学习在爱奇艺信息流推荐业务中的探索与实践。

  10. https://mp.weixin.qq.com/s/aQOcnWV2L_VY3ChrSXXxWA

  11. AI 筑巢:机器学习在百度凤巢的深度应用。

  12. https://myslide.cn/slides/763

  13. Rocket Launching: AUniversal and Efficient Framework for Training Well-Performing Light Net GuoruiZhou, Ying Fan, Runpeng Cui, Weijie Bian, Xiaoqiang Zhu, Kun Gai


本文转载自公众号爱奇艺技术产品团队(ID:iQIYI-TP)。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247486290&idx=1&sn=15a7c2465103796ae08ca4a6f6aed04a&chksm=e9769771de011e672f6790818ad77902bfce3db679c23c2edf1c577fe7829c79b29aa49b3a49&scene=27#wechat_redirect


2020 年 2 月 26 日 10:232579

评论

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

推荐 16 款 IDEA 插件,让你的开发速度飞起来!

Bruce Duan

idea插件

报志愿|想学区块链,要上什么大学?报什么专业?

CECBC区块链专委会

高考 报考志愿 区块链专业 高校学院

LeetCode题解:1. 两数之和,JavaScript,双循环暴力解法,详细注释

Lee Chen

LeetCode 前端进阶训练营

如何识别刷屏文章中的伪科学

Lee Chen

随笔杂谈 前端进阶训练营

CDN百科第七期 | 关于CDN的原理、术语和应用场景那些事

阿里云Edge Plus

CDN

英特尔中国研究院宋继强:芯片、系统、软件成为异构计算的三层级

最新动态

胡继晔:发挥我国优势把依法治网落实到区块链管理中

CECBC区块链专委会

CECBC 胡继晔 依法治网 数字货币监管

高能预警!Apache Flink Meetup · 上海站返场啦

Apache Flink

flink

2. 妈呀,Jackson原来是这样写JSON的

YourBatman

Java json Jackson Fastjson

LeetCode001-两数之和-easy

书旅

算法 LeetCode 数据结构与算法

Vue 学习笔记-2

多选参数

vue.js Vue vuejs

节约60%成本!虎牙直播云端大数据是怎么做到的?

小小的一朵云

关于中台,可能都是正确的废话

fino星君

中台 业务中台

Demo 示例:如何原生的在 K8s 上运行 Flink?

Apache Flink

flink

第7周作业

文古

脑洞:基于Enterprise Continuum证明DDD用于构建汽车的可行性

Winfield

企业架构 领域驱动设计 DDD 架构演进

JVM系列之:对象的锁状态和同步

程序那些事

JVM GC 同步

IO系列——用户空间与内核空间

Java联盟

io 零拷贝 用户空间 内核空间 zero copy

主宰操作系统的经典算法

cxuan

后端 操作系统

干货分享丨玩转物联网IoTDA服务系列四-智能网关

华为云开发者社区

物联网 智能设备 应用场景 华为云 mqtt

Linux服务器存在某进程CPU过高如何追溯其问题根源?

Nick

Java Linux centos

Nginx 限流配置

Bruce Duan

Nginx限流

架构师训练营第八周学习总结

张明森

敏捷软件开发宣言及十二原则

BigYoung

敏捷开发

Flink Weekly | 每周社区动态更新

Apache Flink

flink

阿里巴巴大规模应用 Flink 的实战经验:常见问题诊断思路

Apache Flink

flink

OAM 深入解读:如何基于 OAM Runtime 编写一个扩展 Trait?

钱王骞

云原生 k8s OAM

Vue 学习笔记-3

多选参数

vue.js Vue vuejs

IO系列——UNIX五种IO模型

Java联盟

io 多路复用 异步IO

架构师训练营第八周笔记

Melo

腾讯面试题: 百度搜索为什么那么快?

小松漫步

面试

双DNN排序模型:在线知识蒸馏在爱奇艺推荐的实践-InfoQ