推荐系统里,可以用蒸馏吗?
无论是商品推荐,还是广告推荐,都大致可以分为召回,预排序(粗排),精排等阶段,如上篇<淘宝搜索中基于embedding的召回>的图所示:
![](/assets/blank.gif)
召回最重要的就是要快,高召回率,对准确率可以不必要求太高,所以召回模型往往就是双塔模型,最经典的就是youtube双塔:
![](/assets/blank.gif)
后面各种论文大多都说基于样本构造,模型结构,增加特征等方面去优化召回模型,但是不得不提到的是,蒸馏也是个提高召回侧模型效果的一个好方法。
由于受限于线上性能,在广告/商品召回阶段,我们通常采用深度学习双塔模型结构,离线先计算保存好ad/item embedding,线上实时预测出user embedding再通过近邻检索召回相似广告。user塔和ad塔是两个独立的神经网络,而user侧特征和ad侧特征没有交互,损失了很多有用信息,且因为user embedding线上实时inference,这就限制了user塔的特征规模及模型结构复杂度。对于这两个问题,蒸馏模型提供了一种解决方法。以下是蒸馏模型的特点:
- 由于training阶段不要求实时操作,允许训练一个复杂的模型,蒸馏模型可以在training阶段用复杂度高的网络(teacher network)-学到的知识指导较为简单的网络(student network)学习,在serving阶段以较小的计算代价来使用简单网络,同时保持一定的网络预测能力。
- 对于一些线上serving阶段无法获取的但又对目标有实际意义的特征,如用户与广告或商品的交互特征等,可以在training阶段将这类特征都加入teacher network学习,而线上serving阶段只需获取用于训练student network的基本特征,serving过程只使用student network结构。
- 可以将集成的知识压缩在简单的模型中。对于一个已经训练好的复杂的模型,如果要集成的话要带来很大的计算开销,而使用蒸馏模型可以用复杂模型指导一系列简单模型学习,根据复杂的大网络和一系列简单模型的输出作为目标,训练一个最终的模型,可不用对复杂模型进行集成。
当然,蒸馏用在召回,更重要的意义是保证召回,预排序(粗排),精排一致性,而不是蒸馏一堆看似高大上的特点。为啥要保证一致性呢?召回侧最终服务于排序,选出排序认可的才是最重要的,如果召回的都不是排序认可的,那排序模型也只能矮子里挑高的选,这样会影响整体的收益。如果召回模型在训练阶段增加对精排的拟合,是不是可以近似达到精排模型在全库搜索的效果呢?
那么推荐系统中蒸馏应该怎么做呢?其实最简单的就是改loss,除了交叉熵损失,可以增加和teacher预估不一致而带来的损失,辅助学习。
![](/assets/blank.gif)
其中,L_hard是分类问题中经典的交叉熵损失,是真实标签与模型预测概率之间的交叉熵损失,记为hard loss;λ是超参数,控制teacher模型对student的指导程度;L_soft是teacher模型输出概率与student模型输出概率的交叉熵,记为soft loss,形式如下所示:
![](/assets/blank.gif)
也可以用带温度的softmax函数控制teacher信号的传输:
![](/assets/blank.gif)
Lsoft也可以用logit直接的mse loss进行学习。大致框架如下图所示:
![](/assets/blank.gif)
训练大家可以尝试teacher和student同时训练,也可以先训练好teacher,再蒸馏到student上。在实际使用上,AUC和GAUC都是可以涨一些的。
说到这肯定有人要问了,召回可以学精排,预排序(粗排)可以学精排吗?,当然可以,而且肯定也会有收益。那召回为啥不学预排序(粗排)?毕竟召回直接相连的就是预排序模型。当然也是可以的尝试的。
总结一下,无论是做哪个阶段的模型,只单独优化某个阶段的模型很容易到达瓶颈,尽管每年关于推荐的论文层出不穷,但是真正用上了有效果的却很少。有时要从系统的角度出发去思考模型比单纯去堆砌模型结构效果要大得多。
![](/assets/blank.gif)
推荐系统里,可以用蒸馏吗?相关推荐
- 推荐系统里的那些坑儿
公众号 「炼丹笔记」 写在前面的话 大家好鸭,我是时晴,跟着师傅学习推荐算法炼丹有一段时间了,过程中遇到了很多奇奇怪怪的问题.我想很多和我一样初入推荐领域的同学,都多多少少有跟我同样的经历和体会.不管 ...
- 特征工程——推荐系统里的特征工程
原文:推荐系统里的特征工程 个性化推荐系统 Personalized recommender system 比其他的机器学习方法更依赖特征工程,所以我拿它来当作问题的背景,结合我之前做过的一个推荐系统 ...
- 【推荐系统】推荐系统里,你是怎么Embedding的?
作者:十方 平时大家是如何做推荐系统的Embedding的呢?是不是这样: layers.Embedding(vocab_size, dim_size, dtype='float32') 如果是很高维 ...
- 推荐系统里,你是怎么Embedding的?
平时大家是如何做推荐系统的Embedding的呢?是不是这样: layers.Embedding(vocab_size, dim_size, dtype='float32') 如果是很高维度的类别特征 ...
- 盘一盘推荐系统里值得一读的那些论文
工业中常用的推荐算法其实并不像论文中那么复杂,大多数的时候是稳定的模型.充分的特征工程和各种精妙的业务策略等.当然,如果你想,也可以做的很复杂....大部分时间读论文是在拓展思路并结合自身面临的问题去 ...
- Mahout的taste推荐系统里的几种Recommender分析
Taste简介 看自:http://blog.csdn.net/zhoubl668/article/details/13297583 Mahout 是apache下的一个java语言的开源大数据机器学 ...
- 受限玻尔兹曼机——用在推荐系统里
from:http://blog.csdn.net/xbinworld/article/details/44901865 需要的背景知识 要学习RBM需要的一些基本的统计学习基础,包括贝叶斯定理,随机 ...
- 推荐系统里的那些算法——CF
基于协同过滤的推荐算法 协同过滤(Collaborative Filtering,CF) 基于近邻的协同过滤 基于用户(User-CF) 基于物品(ltem-CF) 基于模型的协同过滤 奇异值分解(S ...
- 知识蒸馏在推荐系统的应用
点击上方,选择星标或置顶,每天给你送干货! 作者 | 张俊林 本文转载自知乎 https://zhuanlan.zhihu.com/p/143155437 随着深度学习的快速发展,优秀的模型层出不穷, ...
最新文章
- docker几个基础命令及nodejs容器
- MAC 升级到10.10(OS X Yosemite)下apache+php的配置问题
- !!!. 数据库的编程(ADO) --- 三种sql语句执行的不同
- 【网址收藏】Spark History Server配置及使用
- c25---条件编译
- 直播预告:与九位专家聊聊Codec和AOM Summit
- phpStorm注册码
- 基于dnn的车牌识别_自然场景中文文字识别,身份证火车票都能识别
- PyTorch Mobile已支持Android!
- RobotCup2D代码学习记录(二)
- 一维码与二维码对比介绍
- html新浪短域名api,新浪短链接API接口示例
- 包含负数的二进制补码的加减运算
- html 复选框事件,HTML复选框选中与未选中触发事件的方法
- C#读取RFID卡号源码
- API Design for ios 译文
- 《爱情,最幸福的信仰》吴若权
- 线性代数之——对称矩阵及正定性
- 驾考科目一:道路交通安全法律、法规和规章
- 站点类型、tdk布局和采集规则