FunRec学习日志-精准偏好预测

"FunRec_Learning_Log_1"

Posted by LanZinYtt on May 2, 2026

本学习日志主要面向细节知识的补全和梳理,对于常见的实现方式和概念会精简描述,推荐再读原文,真的深入浅出讲的很好

精准偏好预测

记忆与泛化

在构建推荐模型时,我们常常追求两个看似矛盾的目标:记忆(Memorization)与泛化(Generalization)。

  • 记忆能力,指的是模型能够学习并记住那些在历史数据中频繁共同出现的特征组合。
  • 泛化能力,就是模型能学到特征间的深层关系,处理训练时很少见到的特征组合。

    Wide & Deep模型

    模型的设计思路是把结构分成两块,各自负责不同的事情:

  • 记忆的捷径:Wide部分 Wide部分本质上是一个广义线性模型,比如逻辑回归。它的优势在于结构简单、可解释更强,并且能高效地“记忆”那些显而易见的关联规则。
  • 学习复杂关系:Deep部分 Deep部分是一个标准的前馈神经网络(DNN),它负责模型的“泛化能力”。与Wide部分依赖人工特征工程不同,Deep部分可以自动学习特征之间的高阶、非线性关系。

    特征交叉

    手工设计特征交叉实在太麻烦,所以关键是要找到一种巧妙的方法,既能自动学习特征交叉,又不会让参数太多。

    二阶特征交叉

    FM: 从召回到精排的华丽转身

    在线性模型中加入所有二阶交叉项可写为: \(\hat{y}=w_0+\sum_{i=1}^{n} w_i x_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n} w_{ij}x_i x_j\) 但该模型有两个问题:

    1. 交叉参数数量为 $O(n^2)$,特征很多时难以训练;
    2. 数据稀疏时,大量特征对从未共现,导致对应的 $w_{ij}$ 无法有效学习。 FM 通过将交互权重分解为两个隐向量的内积: \(w_{ij}=\langle v_i,v_j\rangle\) 将模型写成: \(\hat{y}=w_0+\sum_{i=1}^{n} w_i x_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n} \langle v_i,v_j\rangle x_i x_j\) 其中 $v_i \in \mathbb{R}^k$,且通常 $k \ll n$。 这样做的好处是:
  • 参数量从 $O(n^2)$ 降为 $O(nk)$;
  • 即使两个特征未直接共现,也能通过各自学到的隐向量估计交互强度;
  • 二阶项可通过数学变换优化到 $O(nk)$ 的计算复杂度。 因此,FM 兼顾了交互建模能力、参数效率和稀疏场景下的泛化能力