• weighted—-LR的理解与推广


    在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)(在推荐中即ctr)达到20%甚至更高,直接忽略近似会boost click,那么我们就要在分母项补上(N_{pos})的值。显然,我们可以在负样本中随机采样(N_{pos})的样本进行填充,即可达到我们的目的。

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

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

  • 相关阅读:
    stmt.executeQuery不执行解决办法
    可变参数
    深度理解JVM
    JDBC 基础入门
    Flask中Mysql数据库的常见操作
    Flask与mysql数据库字段类型的区别以及基本用法
    Flask里面session的基本操作
    Flask里面的cookie的基本操作
    Flask表单(form)的应用
    Flask网页模板的入门
  • 原文地址:https://www.cnblogs.com/hellojamest/p/11871108.html
Copyright © 2020-2023  润新知