知识蒸馏在推荐精排中的应用与实践
作者 | Chilia
哥伦比亚大学 nlp搜索推荐
整理 | NewBeeNLP
知识蒸馏主要分为两类:logits蒸馏和中间特征蒸馏。其中,logits蒸馏指的是在softmax时使用较高的温度系数,提升负标签的信息,然后使用Student和Teacher在高温softmax下logits的KL散度作为loss。中间特征蒸馏就是强迫Student去学习Teacher某些中间层的特征。
为什么要在精排阶段使用知识蒸馏呢?
其中一个就是节约机器资源和成本。虽然在精排阶段我们可以使用复杂模型,但是复杂模型的在线服务相应必然变慢(例如xDeepFM在CPU上推理耗时为WDL的2.5~3.5倍,在使用GPU时只有在大batch下,推理性能才符合要求)。所以,我们可以使用复杂的Teacher模型去指导训练简单的Student模型,在线上部署Student模型。
另外一个原因是为了充分利用优势特征。所谓优势特征就是那种信号强、但是只能离线获得的特征(例如预测CVR时候的"用户停留时长"特征)。为了充分利用这些优势特征,我们可以使用优势特征训一个Teacher,然后让不使用优势特征的Student学习Teacher的logits,再把Student部署到线上。关于优势特征蒸馏的介绍可以看:
下面介绍一些有代表性的论文。
1. Rocket Launching: A Universal and Efficient Framework for Training Well-performing Light Net
这是阿里在AAAI 2018上发表的一篇论文,属于logits蒸馏。模型结构如下:
其中,简单的网络称为轻量网络(Light Net), 复杂的网络称为助推器网络(Booster Net)。和传统的logits蒸馏一样,在训练阶段,Light Net学习Booster Net的soft-target来模仿Booster Net的学习过程;在测试阶段,只使用Light Net来上线预测。
那么,这个模型比传统logits蒸馏的改进是什么呢?
(1)共享参数
上图黄色部分的参数 是共享的,这样Booster Net可以直接更新共享参数,于是Light Net可以直接得到Booster Net的“助推”("get direct thrust from the booster")。共享的是低层的参数,这是因为低层参数主要学习的是信息表示、反应的是对输入信息基本的刻画(如embedding层),低层参数共享可以帮助Light Net学习 更好的特征表示 。
(2)同时训练
一般的知识蒸馏都是先训练出一个好的Teacher,然后再从Teacher中"蒸馏"出Student模型。但是这篇文章是同时训练Light Net和Booster Net的。在训练阶段,Booster Net和Light Net一起前行;在测试阶段,Booster Net剥离,Light Net独自前行 -- 这就是题目中"Rocket Launching"的由来。
那么,为什么要这么做呢?一方面,Booster Net 全程 提供soft target信息给轻量网络,从而 指导Light Net的整个求解过程 。
The light model can learn from not only the difference between the target and its temporary outputs, but also the possible path towards the final target provided by a complex model with more learning capability.
训练时,网络的loss为:
loss包含三部分:
Light Net对true label的交叉熵损失;
Booster Net对true label的交叉熵损失;
两个网络在softmax之前的logits的MSE(hint loss)
另一方面,同时训练可以 缩短训练时间 。
(3)梯度屏蔽 (gradient block)
在训练过程中,hint loss只能用于Light Net的梯度更新、不能用于Booster Net的梯度更新。Booster Net只能从true label中学习知识。也就是说,学生可以向老师学,但是老师不能跟学生学,否则就会被学生拖累。
梯度传播图如下:
后记:2020年爱奇艺公布的排序阶段知识蒸馏模型和这个模型十分相似。爱奇艺公布的模型如下:
其中,红色框是复杂模型Teacher,黄色框是简单模型Student。他们共享了底层embedding,但是Teacher使用了较为复杂的特征交叉层。两者同时训练,Student学习Teacher的logits输出和中间层。
2. Ensembled CTR Prediction via Knowledge Distillation
这篇华为在CIKM2020上发表的论文,使用了logits蒸馏+中间层特征蒸馏的方法。
读过上面的知识蒸馏基础便可以知道,想要把Teacher学到的知识迁移到Student上,有两种方法。一种是logits蒸馏,即在softmax的时候加一个 较高的温度系数 ,来提高负label的概率,获得更多的知识;一种是特征蒸馏,即最小化Teacher和Student 中间层 的差异。有了Teacher带来的更丰富的知识,学生就能够学的比只用true label好得多。"even a simple DNN model can learn well given useful guidance from a good teacher" 。如下图:
上面所说的是只有一个Teacher的情况。我们知道,模型ensemble在机器学习中经常能取得更好的效果。但是如果在线上使用多个精排模型同时预测并不太现实,因为这样的话训练和推理所耗费的资源就要翻倍了。那么能不能从多个Teacher中一起蒸馏呢?
一种直接的想法是,直接把多个Teacher的logits层/中间层做个平均,然后让Student学习这个已经融合好的单一模型。但是,并不是所有Teacher模型都应该具有同等的权重。毕竟,如果一个Teacher学的很差,就会对整体产生干扰。所以,文中采用了 自适应分配注意力权重 的方法,是用Gate Net实现的:
计算Student和Teacher的差异公式为:
其中,注意力权重的分配公式为:
402 Payment Required
其中 是第 个Teacher的logits或者中间层向量。这样,我们就得到了要分配给每个Teacher的权重。
在训练时,可以使用Teacher和Student一起训练的方法,这样训练的速度更快,但是需要把所有Teachers和Student都load进GPU,对GPU资源要求高。也可以选择"先训练好Teacher、再从Teacher中蒸馏Student"的方法。
一起交流
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)
- END -
工作没满一年,我跳槽了!【附面经】
2022-01-24
Green Deep Learning:NLP在大模型之外的另一种思路!
2022-01-22
深度学习中 Batch Size 对训练过程的影响
2022-01-05
美团 大规模商品知识图谱的构建与应用
2021-12-31
知识蒸馏在推荐精排中的应用与实践相关推荐
- LIVE 预告 | 快手宋洋:千亿特征,万亿参数,快手推荐精排模型的发展史
随着GPT-3给人们带来的震撼,大模型在各个应用领域得到迅速的发展和应用. 近期,媒体平台「机器之心」上发布了一篇文章「1.9万亿参数量,快手落地业界首个万亿参数推荐精排模型」,其中提到快手开发的精排 ...
- 强化学习在推荐混排中的应用
上篇文章主要和大家聊的是广告智能定向技术之lookalike,今天想和大家谈谈强化学习在推荐混排中的应用. 0.什么是强化学习 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预 ...
- 1.9万亿参数量,快手落地业界首个万亿参数推荐精排模型
2021-02-03 15:24:02 机器之心发布 机器之心编辑部 来,走近快手业界首个万亿参数推荐精排模型的内部构造. 个性化推荐系统旨在根据用户的行为数据提供「定制化」的产品体验,精准的推荐系统 ...
- 超越Google,快手落地业界首个万亿参数推荐精排模型
整理 | 兆雨 责编 | 阿司匹林 出品 | AI科技大本营 精准的推荐系统模型是很多互联网产品的核心竞争力,个性化推荐系统旨在根据用户的行为数据提供"定制化"的产品体验.国民级短 ...
- 快手推荐精排模型的发展史
1.参数个性化 CTR 模型 - PPNet 2019 年之前,快手 App 主要以双列的瀑布流玩法为主,用户同视频的交互与点击,观看双阶段来区分.在这种形式下, CTR 预估模型变得尤为关键,因为它 ...
- 知识蒸馏怎么用?召回-粗排篇
作者 | Chilia 哥伦比亚大学 nlp搜索推荐 整理 | NewBeeNLP 之前我们讲过了知识蒸馏在精排中的应用:知识蒸馏在推荐精排中的应用与实践 其实,知识蒸馏在召回-粗排-精排这三个模块都 ...
- 万字总结,知识蒸馏如何在推荐系统中大显身手?
来源:AI科技评论 作者 | 张俊杰 编辑 | 丛 末 本文首发于知乎 https://zhuanlan.zhihu.com/p/143155437 随着深度学习的快速发展,优秀的模型层出不穷,比如图 ...
- 知识蒸馏在推荐系统中的应用
导读:随着深度学习的快速发展,优秀的模型层出不穷,比如图像领域的 ResNet.自然语言处理领域的 Bert,这些革命性的新技术使得应用效果快速提升.但是,好的模型性能并非无代价的,你会发现,深度学习 ...
- 深度学习中的知识蒸馏技术(下)
本文概览: 写在前面: 这是一篇介绍知识蒸馏在推荐系统中应用的文章,关于知识蒸馏理论基础的详细介绍,请看我的这篇文章: 深度学习中的知识蒸馏技术(上) 1. 背景介绍 1.1 简述推荐系统架构 如果从 ...
最新文章
- 面向对象(面向对象设计,面向对象编程,实例变量)
- asio中的socket相关service的关系图
- Styled Label
- 第七章 脚本参数的传递
- 文档浏览网站 Docs4dev,内含Spring、SpringBoot、Spring Data等中英文文档
- oracle 10g RAC app VIP ,ONS,GSD,ASM,OCR,VOTE名称及代表的涵义。
- python解析html的库_python自带的用于解析HTML的库HtmlParser
- Jmeter中的几个重要测试指标释义
- 五分钟了解机器学习的基本概念
- 语音识别工具Sphinx4
- 背景图片渲染时有色块怎么办
- 《阴阳师·2栀子女》原作:梦枕貘
- (附源码)计算机毕业设计ssm大学生体检管理系统
- C++算法和数据结构之《二叉树》
- fx3u4ad一adp说明书_FX3U-4AD-ADP使用手册三菱FX3U-4AD-ADP用户手册 - 三菱
- 拼多多的商业模式和营销套路
- 肯定得想办法牵线搭桥
- Pytorch模型训练中 使用的 MetricLogger类总结
- OpenCV鼠标滑轮事件
- 清除node_modules 缓存
热门文章
- SAP License:SAP 各个模块含义
- 赛锐信息:SAP系统用户账号类型介绍
- 暑假周进度总结报告5
- k8s1.11.0安装、一个master、一个node、查看node名称是ip、node是扩容进来的、带cadvisor监控服务...
- openvswitch dpdk
- oracle级联更新与级联删除
- .5-浅析webpack源码之入口函数
- mvc4.0 @Styles.Render(转)
- BZOJ 4034 [HAOI2015]T2 树链剖分
- Apriori算法-java