在YouTube团队推荐系统Rank阶段,DNN输出层使用了weighted—LR,这既是这篇论文的一大创新点,也是一大难点。在这里,重新梳理下该算法的思路与推导,并进行推广。

理解

先说下常见的逻辑回归(LR)模型。LR模型假设数据服从伯努利分布,当某件事情发生,认为其概率为p,则当其不发生,概率为1-p。
那么,其几率比(odds)为:
\[
odds = \frac{p}{1-p}
\]

几率比(odds):指一个事件发生的概率与不发生概率的比值。

对其求对数,并将对数几率记为输入特征值的线性表达式,可得
\[
logit(\frac{p}{1-p}) = w^Tx
\]
那么有:
\[
Odds = e^{w^Tx}
\]
则概率\(p\)可推出为\(logit\)函数的反函数,也就是\(sigmoid\)函数了:
\[
\phi(x) = \frac{1}{1+e^{-w^Tx}}
\]

在短视频的CTR预估,一般的,点击发生的概率就是发生点击的视频个数/总共曝光的视频个数,假设发生点击的视频个数为M,总共曝光的视频个数为N,则\(p\)为:
\[
p = \frac{M}{N}
\]
可得Odds为:
\[
Odds = \frac{\frac{M}{N}}{\frac{N-M}{N}} = \frac{M/N}{1-M/N}
\]

那么,如果我将正样本加上权重\(w_i\),会发生什么?
正样本权重\(w\)的加入会让正样本发生的几率变成原来的\(w\)倍,也就是说样本\(i\)的Odds变成了下面的式子:
\[
Odds(i) = \frac{w_i * M/N}{1-w_i * M/N} = \frac{w_i p}{1-w_i p}
\]

注意:这里\(N\)的物理含有与之前的\(N\)已经不同了,之前代表的是总共曝光的视频个数,这里代表的是总共曝光的视频的权重和,但这并不影响后面的推导。

YouTube推荐中,关键在于正样本权重的选择,它使用了观看时长\(T_i\)作为权重,则由于在视频推荐场景中,用户打开一个视频的概率\(p\)往往是一个很小的值,因此上式可以继续简化::
\[
Odds(i) = w_i p = t_i p = E(T_i)
\]
由于\(p\)就是用户打开视频的概率,\(T_i\)是观看时长,因此\(T_i*p\)就是用户观看某视频的期望时长。这个的好处就是,当进行Serving时,由于我们只关注相对位置,不关注绝对值,我们只需要计算Odds即可,也就是只需要计算$ e^{w^Tx}$,这样就转化成了根据观看某视频的期望时长进行排序。

那为什么不直接预测观看视频的期望时长呢?一个明显的好处就是,分类的问题一般都比回归问题易于求解,且预测准确率更高。另外,这里使用Weighted LR给我们的启示就是:具体算法一定要根据具体业务场景选择,深刻理解业务的通用性和特殊性,往往比技术更重要。

接下来的问题就是训练了,训练Weighted LR一般来说有两种办法:

  • 将正样本按照weight做重复sampling,然后输入模型进行训练;
  • 在训练的梯度下降过程中,通过改变梯度的weight来得到Weighted LR。

一般采用第二种方法,原因是减少了处理的样本数,减少了读样本时间和更新梯度的次数。

推广

在上面推导的过程中,一个很特殊的业务场景在于在视频推荐场景中,用户打开一个视频的概率\(p\)往往是一个很小的值,所以进行了简化。那么,当我们的业务中,概率\(p\)并不可以忽略,那么我们将如何优化呢?
在之前的场景中,负样本的权重为1,正样本的权重为\(w_i\),实际上Odds为:
\[
Odds(i) = \frac{\sum_i w_i * M_i/N}{\sum_i Neg_i/N} = \frac{\sum_{i=1}^{N_{pos}} w_i}{\sum_{i=1}^{N_{neg}} 1} = \frac{\sum_{i=1}^{N_{pos}} w_i}{N_{neg}}
\]
上面是因为\(p\)概率足够小,也就是\(N_{pos}\)相对\(N_{neg}\)很小,所以上面可以近似为:
\[
\frac{\sum_{i=1}^{N_{pos}} w_i}{N_{neg}} = \frac{\sum_{i=1}^{N_{pos}} w_i}{N_{neg}+N_{pos}} = \frac{\sum_{i=1}^{N_{pos}} w_i}{N}
\]
当我们的场景中,概率\(p\)并不可以忽略,那么我们就要在分母项补上\(N_{pos}\)的值。显然,我们可以在负样本中随机采样\(N_{pos}\)的样本进行填充,即可达到我们的目的。

不得不说,YouTube的这篇推荐系统论文足够经典。每一个小点扩展开来都值得说道和推敲。另外,也说明了在实际落地中,业务理解的重要性。

参考:
揭开YouTube深度推荐系统模型Serving之谜

weighted—-LR的理解与推广的更多相关文章

  1. Unsupervised Feature Learning and Deep Learning(UFLDL) Exercise 总结

    7.27 暑假开始后,稍有时间,“搞完”金融项目,便开始跑跑 Deep Learning的程序 Hinton 在Nature上文章的代码 跑了3天 也没跑完 后来Debug 把batch 从200改到 ...

  2. [基础]斯坦福cs231n课程视频笔记(二) 神经网络的介绍

    目录 Introduction to Neural Networks BP Nerual Network Convolutional Neural Network Introduction to Ne ...

  3. bzoj3172

    这里学习AC自动机其实对KMP和trie掌握好了之后很容易扩展成AC自动机的这里运用了一个性质由失配指针反向可以建成一棵fail树x串在y串中的出现的次数即为在fail树上以x结尾节点为根的子树中有多 ...

  4. 用深度学习(DNN)构建推荐系统 - Deep Neural Networks for YouTube Recommendations论文精读

    虽然国内必须FQ才能登录YouTube,但想必大家都知道这个网站.基本上算是世界范围内视频领域的最大的网站了,坐拥10亿量级的用户,网站内的视频推荐自然是一个非常重要的功能.本文就focus在YouT ...

  5. 【简单易懂】JPA概念解析:CascadeType(各种级联操作)详解

    https://www.jianshu.com/p/e8caafce5445 [在一切开始之前,我要先告诉大家:慎用级联关系,不要随便给all权限操作.应该根据业务需求选择所需的级联关系.否则可能酿成 ...

  6. Paper Reading:Deep Neural Networks for YouTube Recommendations

    论文:Deep Neural Networks for YouTube Recommendations 发表时间:2016 发表作者:(Google)Paul Covington, Jay Adams ...

  7. ARM-常见考题和知识点

    1. ARMv7 7中状态,ARMv8对应的状态 2. TEE知识 3. ARM寄存器及作用 4. ARM内部总线AHB APB 5. 1. Thumb | Arm指令区别 编写Thumb指令时,先要 ...

  8. 推荐系统实践 0x0e LS-PLM

    在之前介绍的几个模型中,存在这些问题: LR不能捕捉非线性,只能进行一次的回归预测 GBDT+LR虽然能够产生非线性特征组合,但是树模型不适用于超高维稀疏数据 FM利用二阶信息来产生变量之间的相关性, ...

  9. weighted Kernel k-means 加权核k均值算法理解及其实现(一)

    那就从k-means开始吧 对于机器学习的新手小白来说,k-means算法应该都会接触到吧.传统的k-means算法是一个硬聚类(因为要指定k这个参数啦)算法.这里利用百度的解释 它是数据点到原型的某 ...

随机推荐

  1. PCL贪婪投影三角化算法

    贪婪投影三角化算法是一种对原始点云进行快速三角化的算法,该算法假设曲面光滑,点云密度变化均匀,不能在三角化的同时对曲面进行平滑和孔洞修复. 方法: (1)将三维点通过法线投影到某一平面 (2)对投影得 ...

  2. javascript遍历对象的属性

    不同类型的循环 JavaScript 支持不同类型的循环: for - 多次遍历代码块 for/in - 遍历对象属性 while - 当指定条件为 true 时循环一段代码块 do/while - ...

  3. Fastjson爆出重大漏洞,攻击者可使整个业务瘫痪

    360网络安全响应中心 https://cert.360.cn/warning/detail?id=82a509e4543433625d6fe4361b5802c9 报告编号:B6-2019-0905 ...

  4. Atcoder Grand Contest 036 D - Negative Cycle

    Atcoder Grand Contest 036 D - Negative Cycle 解题思路 在某些情况下,给一张图加或删一些边要使图合法的题目要考虑到最短路的差分约束系统.这一题看似和最短路没 ...

  5. 手写RPC框架(netty+zookeeper)

    RPC是什么?远程过程调用,过程就是业务处理.计算任务,像调用本地方法一样调用远程的过程. RMI和RPC的区别是什么?RMI是远程方法调用,是oop领域中RPC的一种实现,我们熟悉的restfull ...

  6. 2.8_Database Interface ADO由来

    OLE-DB,它无法广为流行,因为如下两点: 1.由于OLE-DB太底层化,使用上非常复杂,需要程序员拥有高潮的技巧. 2.OLEDB标准的API是C++API,只能供C++语言调用. 为了使得流行的 ...

  7. java之struts2的执行流程讲解(1)

    1.struts2的执行流程 请求--->Tomcat(判读项目是否存在)--->项目的web.xml--->struts2的核心过滤器 --->判读请求的资源(hello.a ...

  8. django-nginx与uwsgi项目部署

    uwsgi是提供动态服务的 nginx反向代理 在项目中创建一个settings.py的副本.我这里重命名为copy_settings.py,将配置文件中的DEBUG=False 修改项目下wsgi. ...

  9. SASS系列之:!global VS !deafult

    先脑补两组场景. 场景一: 同事们每天中午都会外出吃饭.通常情况下都会先问,去哪儿吃啊?不知道啊?下楼再说吧.到了楼下好不容易有个人站出来说,既然没人说我可就说了啊,咱们去吃香草香草吧.没人反对就去, ...

  10. TR-业务流程图

    今天看到一篇关于票据业务的培训文档,介绍比较全面,分享下: https://wenku.baidu.com/view/f3dd3ee988eb172ded630b1c59eef8c75ebf9577. ...