sgr-interview-300

第 32 题:FFM(Field-aware FM)的field划分策略,内存爆炸的缓解方案?

题目

FFM(Field-aware FM)的field划分策略,内存爆炸的缓解方案?


完整讲解

一、FFM 的 field 划分策略

在 FFM(Field-aware Factorization Machines)里,每个特征不仅有一个 id,还属于一个 field(域)。例如「年龄」「性别」「城市」分别是三个 field;同一 field 内可能有多维 one-hot 或一个标量。划分原则通常有两条:

  1. 业务语义:同一语义单元划为一个 field(如「用户画像」「物品属性」「上下文」各成 field),这样同一 field 内特征共享「域内」的隐向量空间,不同 field 之间用「域对」专属的隐向量建模交互,更细粒度。
  2. 离散/连续与基数:有时会把高基数 categorical 单独成 field、低基数或连续特征合并或单独成 field,在参数量与表达能力之间做折中。

形式上,FFM 的二阶项写成:特征 $i$ 属于 field $f_i$,特征 $j$ 属于 field $f_j$ 时,用与 field 对 $(f_i, f_j)$ 相关的隐向量 $\boldsymbol{v}{i,f_j}$ 和 $\boldsymbol{v}{j,f_i}$ 做内积: \(\phi^{(2)} = \sum_{i=1}^{n}\sum_{j=i+1}^{n} \langle \boldsymbol{v}_{i,f_j}, \boldsymbol{v}_{j,f_i} \rangle x_i x_j.\) 也就是说,每个特征在「与不同 field 交互」时使用不同的隐向量,所以参数量从 FM 的 $n \cdot k$ 变成 $n \cdot F \cdot k$($F$ 为 field 个数)。

二、为什么容易「内存爆炸」

三、缓解方案

  1. 控制 field 数量:不要过细拆分,把语义相近的 feature 合并到同一 field,使 $F$ 从几十降到十几或更少。
  2. 降低隐向量维度 $k$:FFM 里 $k$ 往往比 FM 设得小(如 4~8),用较小 $k$ 换更多 field 感知能力。
  3. 共享部分 field 隐向量:对部分 field 对不单独学 $\boldsymbol{v}_{i,f_j}$,而是复用 FM 式的单向量 $\boldsymbol{v}_i$,做成 FFM 与 FM 的混合,减少 $n F k$。
  4. 用 FFM 做离线/蒸馏、线上用 FM 或更小模型:训练用 FFM 学细粒度交互,线上用 FM、DeepFM 等少参数模型做推理,缓解部署侧内存与延迟。
  5. 正则与早停:FFM 易过拟合,强 L2 或 early stopping 可控制有效参数量,间接缓解「大模型」带来的内存与过拟合问题。

面试要点


记忆要点

返回模块 返回总览