xDeepFM:压缩交互网络实现向量级特征交叉
FreeGuideOnline
最新
2026-06-24
ŷ = σ( w_linear^T x + W_dnn^T h_dnn + p^T h_cin )
三个组件各司其职:
1. **线性部分(Linear Part)**:记忆原始特征的一阶信息。
2. **深度神经网络(DNN)**:隐式学习高阶特征交互。
3. **压缩交互网络(CIN)**:显式地在向量级别学习高阶特征交互,输出一个聚合向量 `h_cin`。
最终将三者的输出相加后通过 sigmoid 得到点击概率。
---
## CIN:压缩交互网络深度解析
CIN 是 xDeepFM 的灵魂。假设输入的嵌入层由 m 个特征域组成,每个域的特征向量维度为 D。我们将所有嵌入向量堆叠成一个矩阵 **X⁰ ∈ ℝ^{m × D}**,其中每一行是一个特征域向量。
CIN 的第 k 层输出也是一个矩阵 **Xᵏ ∈ ℝ^{Hₖ × D}**,其中 Hₖ 是该层的特征图数量(超参),D 保持与原始嵌入相同的维度。每一层产生的特征图都是上一层特征和原始输入特征通过一种类似外积和卷积的运算组合而成。
### 单层 CIN 的计算步骤
以从 X⁰ 和 Xᵏ 生成 Xᵏ⁺¹ 为例,计算过程分为以下几步:
**Step 1:外积交互**
对原始输入 X⁰ 的每一行(m 个域)和上一层输出 Xᵏ 的每一行(Hₖ 个特征图)进行元素级外积(Hadamard 积),形成一个三维张量 **Zᵏ⁺¹ ∈ ℝ^{Hₖ × m × D}**:
Z_{i,j,} = Xᵏ_{i,} ⊙ X⁰_{j,*} (逐元素相乘,维度仍为 D)
这里 `i = 1..Hₖ`,`j = 1..m`。这一步实现了向量级的交互:保留了 D 维向量结构。
**Step 2:压缩与卷积**
将 Zᵏ⁺¹ 看作一个宽度为 m、高度为 Hₖ、通道数为 D 的三维“图像”,使用一个卷积核集合,每个卷积核的形状为 (Hₖ, m),在 D 维度上共享权重。这一步将复杂的三维交互压缩成一维向量,同时控制参数数量。
具体来说,第 h 个特征图的计算为:
X^{k+1}{h,*} = sum{i=1}^{H_k} sum_{j=1}^{m} W^{k,h}{i,j} · Z{i,j,*} (逐元素,保持 D 维)
`W^{k,h}` 是一个大小为 Hₖ × m 的参数矩阵。对于欲生成的特征图数量 Hₖ₊₁,就需要 Hₖ₊₁ 个这样的参数矩阵。
**Step 3:逐层堆叠,保留所有阶交互**
CIN 的层数可以任意加深。第 k 层输出 Xᵏ 融合了 k 阶以上的交互信息(因为每一层都结合了原始输入)。最后将所有层的输出沿 D 维度进行 sum pooling,得到每个特征图的一个标量值,再将所有层的所有特征图的池化结果拼接起来,作为 CIN 的输出向量 `h_cin`。
p_i^k = sum_{d=1}^D X^{k}{i,d} h_cin = [p_1^1, p_2^1, ..., p{H_1}^1, ..., p_1^{K}, ..., p_{H_K}^{K}]