第 133 题:NFM的Bi-Interaction Pooling,特征交互的显式建模?
题目
NFM的Bi-Interaction Pooling,特征交互的显式建模?
完整讲解
一、NFM 与 Bi-Interaction Layer
NFM(Neural Factorization Machine) 在 FM 基础上加隐层,将二阶交互的向量表示再经 MLP 得到高阶非线性。核心是 Bi-Interaction Pooling:对嵌入矩阵 $\boldsymbol{E}$(每行一特征嵌入),先做逐元素二阶交互再池化,得到固定维向量,再送 MLP。
二、Bi-Interaction Pooling 的形式
设特征嵌入为 ${\boldsymbol{v}_i x_i}$(非零特征对应的嵌入),Bi-Interaction 定义为
\(f_{\text{BI}}(\mathcal{V}) = \sum_{i<j} (\boldsymbol{v}_i \odot \boldsymbol{v}_j) x_i x_j = \frac{1}{2}\left[ \left(\sum_i \boldsymbol{v}_i x_i\right)^2 - \sum_i (\boldsymbol{v}_i x_i)^2 \right],\)
其中 $\odot$ 为逐元素乘,$(\cdot)^2$ 为逐元素平方。即先对「嵌入的和」平方、再减去「嵌入平方的和」,得到与 FM 二阶等价的向量(而非 FM 的标量),该向量维度与单嵌入相同,显式编码了所有二阶交互的向量表示。
三、显式建模与 FM 的区别
- FM:二阶输出为标量 $\sum_{i<j} \langle \boldsymbol{v}_i, \boldsymbol{v}_j \rangle x_i x_j$,无逐维的交互向量。
- NFM Bi-Interaction:输出为向量 $\sum_{i<j} \boldsymbol{v}_i \odot \boldsymbol{v}_j \, x_i x_j$,再经 MLP 得到高阶与非线性,即显式把二阶交互做成向量表示、再由 DNN 学习高阶组合。这样二阶信息不被压成单标量,表达力更强。
四、复杂度与实现
- 计算可用「和平方减平方和」公式,一次前向 $O(n \cdot d)$($n$ 为非零特征数、$d$ 为嵌入维),与 FM 同量级;实现时注意数值稳定。
- 与 DeepFM 对比:DeepFM 的 FM 部分只出标量;NFM 用 Bi-Interaction 出向量再 MLP,二阶与高阶衔接更显式。
面试要点
- 能写出 Bi-Interaction Pooling 的公式(和平方减平方和)及输出为向量的含义。
- 能说明与 FM 的区别:FM 二阶为标量、NFM 二阶为向量再进 MLP,显式建模二阶再高阶。
- 能说清复杂度 $O(n \cdot d)$ 及与 DeepFM 的对比。
记忆要点
- Bi-Interaction:$(\sum \boldsymbol{v}_i x_i)^2 - \sum (\boldsymbol{v}_i x_i)^2$ 得到二阶交互的向量表示。
- FM 二阶=标量;NFM 二阶=向量→MLP,显式二阶再高阶;复杂度 $O(n \cdot d)$。