Hexo

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

RS——WCE-YouTube推荐论文

本文主要介绍WCE

原始论文:[Youtube] Deep Neural Networks for YouTube Recommendations (Youtube 2016)


WCE

  • Weighted Cross Entropy,加权交叉熵,也叫做Weighted LR,Weighted Logistic Regression
  • 用于解决回归问题
    • 主要是存在大量负样本(值为0)的回归问题
    • 比如视频浏览时长问题(点击率就比较低)
  • 训练时使用损失函数:
    $$
    loss = \sum_i w_i y_ilog(p_i) + (1-y_i)log(1-p_i)
    $$
    • 其中 \(p_i = \frac{1}{1+e^{-\theta^{T}\boldsymbol{x}}}\)
    • \(w_i\) = 回归值(如观看时长)
    • \(y_i\) = 是否为正值(即是否点击,未点击表示观看时长为0,视为负样本)
    • 对任意样本,我们真实想要的预估目标是一个视频被点击且观看的概率 \(pred = wp\)
  • serving时使用下面的定义来表示回归值:
    $$
    pred = e^{\theta^{T}\boldsymbol{x}}
    $$
    • 对于原始的CE损失函数,有 \(Odds = \frac{p}{1-p} = e^{\theta^{T}\boldsymbol{x}}\) (补充:Odds表示样本为正的概率除以样本为负的概率, \(log(Odds) = \theta^{T}\boldsymbol{x}\) )就是logit
    • 当前损失函数下,正负样本的比例(或权重)发生了变化,实际上 \(Odds = \frac{p}{1-p} = e^{\theta^{T}\boldsymbol{x}}\) 表示的值不再是原始样本中正负样本的比例,而是带权重的比例,详情看后续的证明
  • 可以证明上面的方法会造成预估值有偏

WCE改进

  • 改进后的损失函数
    $$
    loss = \sum_i w_i y_ilog(p_i) +\log(1-p_i)
    $$
  • 改进前方案是有偏的,修改为上面的损失函数后, \(pred = Odds = e^{\theta^{T}\boldsymbol{x}}\) 是无偏的
  • 证明:
    • 假设在原始的CE损失函数下,正负样本的比例为A:B,此时有 \(p = \frac{A}{A+B}\) 【这里只是假设训练时遇到特征值完全相同的多个样本(有正有负),模型在遇到serving时遇到同一个特征值样本时,应该预估样本为正的概率为多少?】
      • 原始CE下,样本为正的概率就是正样本数/总样本数
    • 那么在上述加权的损失函数下,相当于正负样本的比例为 \(wA:B+A\),此时有 \(p’ = \frac{wA}{wA+B+A}\)
      • 因为权重被修改了,可以证明样本不变,增加权重等价于权重不变,增加样本(重复采样)
      • \(wA:B+A\) 的原因是因为正样本被加了 \(w\) 倍的权重,而负样本则被增加了A个(原始的CE函数中正样本不会累加 \(log(1-p)\) 作为损失,但改进后的WCE会
    • 我们真实想要的预估值是: \(pred = wp = w * \frac{A}{A+B}\)
      • 可以表述为样本为正的概率乘以样本为正时的值(用户点击视频的概率*用户点击视频后观看的概率)
    • 经推导有:
      $$
      pred = e^{\theta^{T}\boldsymbol{x}} = \frac{p’}{1-p’} = \frac{\frac{wA}{wA+B+A}}{1-\frac{wA}{wA+B+A}} = w * \frac{A}{A+B} = wp
      $$
      • 注意,我们需要的是 \(pred = wp\) 而不是 \(pred = wp’\)
        • 因为 \(p’\) 是被我们修改权重后得到的模型输出(均值)
      • 真实serving时,模型的输出值 \(p’\) 是不用的,只使用 \(pred = e^{\theta^{T}\boldsymbol{x}}\) 就可以了
      • 其他:
        • 对于原始CE,有:
          $$
          pred = e^{\theta^{T}\boldsymbol{x}} = \frac{p}{1-p} = \frac{\frac{A}{A+B}}{1-\frac{A}{A+B}} = \frac{A}{B} = \frac{p}{1-p}
          $$
        • 对于YouTube的WCE,有:
          $$
          pred = e^{\theta^{T}\boldsymbol{x}} = \frac{p’’}{1-p’’} = \frac{\frac{wA}{wA+B}}{1-\frac{wA}{wA+B}} = w * \frac{A}{B} \approx w * \frac{A}{A+B} = wp
          $$
          • 约等于符号成立的前提是正样本占比特别少 ,此时 \(\frac{A}{B} \approx \frac{A}{A+B}\)
          • 也就是说,在正样本占比特别少时,使用YouTube的WCE也是没问题的,但是为了保证无偏,建议使用改进后的WCE

扩展问题

  • 在面对回归问题是,WCE相对MSE真的有提升吗?

其他

  • WCE也可以用于分类问题中,目的是让模型更关注某些特殊样本

其他参考链接

  • 揭开YouTube深度推荐系统模型Serving之谜

RS——FMM模型

本文主要介绍FFM(FFM, Field-aware Factorization Machine)


FFM模型

  • FFM最初概念来自Yu-Chin Juan(阮毓钦,毕业于中国台湾大学,现在美国Criteo工作)与其比赛队员,他们借鉴了Michael Jahrer的论文中的field概念提出了FM的升级版模型

Field的概念

  • FFM把相同性质的特征归于同一个Field,
    • 比如“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”这三个特征都是代表日期的,可以放到同一个field中
  • 简单来说,就是同一个categorical特征经过One-Hot编码生成的数值特征都可以放到同一个field,包括用户性别、职业、品类偏好等

模型推导

  • FM 对每个特征 \(x_i\) 学习一个 \(k\) 维隐向量 \(v_i\),二次项参数数量为 \(nk\)
  • FFM 对每个特征 \(x_i\) 和每个域(field) \(f_j\) 学习一个 \(k\) 维隐向量 \(v_{i,f_{j}}\),二次项参数数量为 \(nfk\)
    • 假设样本的特征有 \(n\) 个
    • 假设filed有 \(f\) 个
  • 建模方程
    $$y(x) = w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \langle \mathbf{v}_{i, f_j}, \mathbf{v}_{j, f_i} \rangle x_i x_j \label{eq:ffm}\tag{4}$$
    • 值得注意的是,上面的公式中, \(\mathbf{v}_{i, f_j}\) 的第二个下标是 \(f_j\),不是 \(f_i\),表示的是, 同一个特征 \(x_{i}\) 在对不同的域(Field) \(f_j\) 中的特征 \(x_j\) 组合时,FFM考虑到 \(x_j\) 的域不同,应该用不同的组合方式,所以使用不同的隐向量
    • FM中 \(x_i\) 的隐向量为 \(v_i\)
    • FFM中 \(x_i\) 的隐向量有多个,确切的说是隐矩阵, 对每个不同的域Field(包括 \(x_i\) 自身所在的域), 都有一个隐向量 \(v_{i,f_{j}}\), 和不同类型的特征组合时,我们选择他们对应域的隐变量与之相乘
  • 当前模型的二次项一共有 \(\frac{n(n-1)}{2}\) 项, 计算复杂度为 \(O(n^2)\) 与FM化简前相同, FFM这里不能化简, 所以训练和预测复杂度计算复杂度为 \(O(n^2)\)

FFM需要关注的细节

  • 样本归一化, FFM默认进行样本归一化, 有个参数pa.norm设置为真即可;若此参数设置为假,很容易造成数据inf溢出,进而引起梯度计算的nan错误
    * 因此,样本层面的数据是推荐进行归一化的
    • [待更新],样本归一化的具体操作,样本归一化的作用是什么?
  • 特征归一化,这里由于样本归一化后categorical的特征会变得非常小
  • 省略零值特征, 从建模方程可以看出, 零值特征对FFM模型完全没有贡献,包含零值特征的一切组合均为零
1…306307308…352
San Ye

San Ye

Stay Hungry. Stay Foolish.

704 posts
53 tags
© 2026 San Ye
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4