作者 | 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

知识蒸馏在推荐精排中的应用与实践相关推荐

  1. LIVE 预告 | 快手宋洋:千亿特征,万亿参数,快手推荐精排模型的发展史

    随着GPT-3给人们带来的震撼,大模型在各个应用领域得到迅速的发展和应用. 近期,媒体平台「机器之心」上发布了一篇文章「1.9万亿参数量,快手落地业界首个万亿参数推荐精排模型」,其中提到快手开发的精排 ...

  2. 强化学习在推荐混排中的应用

    上篇文章主要和大家聊的是广告智能定向技术之lookalike,今天想和大家谈谈强化学习在推荐混排中的应用. 0.什么是强化学习 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预 ...

  3. 1.9万亿参数量,快手落地业界首个万亿参数推荐精排模型

    2021-02-03 15:24:02 机器之心发布 机器之心编辑部 来,走近快手业界首个万亿参数推荐精排模型的内部构造. 个性化推荐系统旨在根据用户的行为数据提供「定制化」的产品体验,精准的推荐系统 ...

  4. 超越Google,快手落地业界首个万亿参数推荐精排模型

    整理 | 兆雨 责编 | 阿司匹林 出品 | AI科技大本营 精准的推荐系统模型是很多互联网产品的核心竞争力,个性化推荐系统旨在根据用户的行为数据提供"定制化"的产品体验.国民级短 ...

  5. 快手推荐精排模型的发展史

    1.参数个性化 CTR 模型 - PPNet 2019 年之前,快手 App 主要以双列的瀑布流玩法为主,用户同视频的交互与点击,观看双阶段来区分.在这种形式下, CTR 预估模型变得尤为关键,因为它 ...

  6. 知识蒸馏怎么用?召回-粗排篇

    作者 | Chilia 哥伦比亚大学 nlp搜索推荐 整理 | NewBeeNLP 之前我们讲过了知识蒸馏在精排中的应用:知识蒸馏在推荐精排中的应用与实践 其实,知识蒸馏在召回-粗排-精排这三个模块都 ...

  7. 万字总结,知识蒸馏如何在推荐系统中大显身手?

    来源:AI科技评论 作者 | 张俊杰 编辑 | 丛 末 本文首发于知乎 https://zhuanlan.zhihu.com/p/143155437 随着深度学习的快速发展,优秀的模型层出不穷,比如图 ...

  8. 知识蒸馏在推荐系统中的应用

    导读:随着深度学习的快速发展,优秀的模型层出不穷,比如图像领域的 ResNet.自然语言处理领域的 Bert,这些革命性的新技术使得应用效果快速提升.但是,好的模型性能并非无代价的,你会发现,深度学习 ...

  9. 深度学习中的知识蒸馏技术(下)

    本文概览: 写在前面: 这是一篇介绍知识蒸馏在推荐系统中应用的文章,关于知识蒸馏理论基础的详细介绍,请看我的这篇文章: 深度学习中的知识蒸馏技术(上) 1. 背景介绍 1.1 简述推荐系统架构 如果从 ...

最新文章

  1. 面向对象(面向对象设计,面向对象编程,实例变量)
  2. asio中的socket相关service的关系图
  3. Styled Label
  4. 第七章 脚本参数的传递
  5. 文档浏览网站 Docs4dev,内含Spring、SpringBoot、Spring Data等中英文文档
  6. oracle 10g RAC app VIP ,ONS,GSD,ASM,OCR,VOTE名称及代表的涵义。
  7. python解析html的库_python自带的用于解析HTML的库HtmlParser
  8. Jmeter中的几个重要测试指标释义
  9. 五分钟了解机器学习的基本概念
  10. 语音识别工具Sphinx4
  11. 背景图片渲染时有色块怎么办
  12. 《阴阳师·2栀子女》原作:梦枕貘
  13. (附源码)计算机毕业设计ssm大学生体检管理系统
  14. C++算法和数据结构之《二叉树》
  15. fx3u4ad一adp说明书_FX3U-4AD-ADP使用手册三菱FX3U-4AD-ADP用户手册 - 三菱
  16. 拼多多的商业模式和营销套路
  17. 肯定得想办法牵线搭桥
  18. Pytorch模型训练中 使用的 MetricLogger类总结
  19. OpenCV鼠标滑轮事件
  20. 清除node_modules 缓存

热门文章

  1. SAP License:SAP 各个模块含义
  2. 赛锐信息:SAP系统用户账号类型介绍
  3. 暑假周进度总结报告5
  4. k8s1.11.0安装、一个master、一个node、查看node名称是ip、node是扩容进来的、带cadvisor监控服务...
  5. openvswitch dpdk
  6. oracle级联更新与级联删除
  7. .5-浅析webpack源码之入口函数
  8. mvc4.0 @Styles.Render(转)
  9. BZOJ 4034 [HAOI2015]T2 树链剖分
  10. Apriori算法-java