DeepFM: A Factorization-Machine based Neural Network for CTR Prediction
概
作者认为特征的low-order交叉和high-order交叉对于预测都是同等重要的, 但是之前的工作要么偏向low-order, 要么偏向high-order, 要么依赖特征工程. 本文就提出一种能够自动学习的DeepFM.
主要内容
数据
假设数据形为 \((x, y)\), 其中 \(x\) 包含 \(m\)-fields:
\[x = [x_{field_1}, x_{field_2}, \cdots, x_{field_m}].
\]
每一个field就是某一种特征属性, 对于类别型的field, \(x_{field}\)是 one-hot 向量 (如性别等属性), 而对于连续型的 field \(x_{field}\)就是值本身 (比如年龄等属性). 通常 \(x\) 是一个非常稀疏的向量.
标签 \(y \in \{0, 1\}\) 则表示该 item 是否被点击了.
FM 部分
FM 部分实际上就是:
- Addition 模块:
\[\langle w, x \rangle = \sum_{i} w_i x_i.
\]
- 交叉模块 (内积):
\[\sum_{i=1}\sum_{j = i + 1} \langle V_i, V_j \rangle x_i \cdot x_j,
\]
其中 \(V_i \in \mathbb{R}^k\) 为 \(x_i\) 所对应的 embedding.
- 最后
\[y_{FM} =
\langle w, x \rangle = \sum_{i} w_i x_i +
\sum_{i=1}\sum_{j = i + 1} \langle V_i, V_j \rangle x_i \cdot x_j.
\]
问: 为什么不 field-aware ?
Deep 部分
- 通过 embedding layer 为每个 field 提取 embedding \(e\), 最后得到:
\[a^{(0)} = [e_1, e_2, \cdots, e_m].
\]
- 通过 MLP 获得 high-order 的信息:
\[a^{(l+1)} = \sigma (W^{(l)}a^{(l)} + b^{(l)}), \\
y_{DNN} = a^{(H + 1)}.
\]
这里 \(\sigma(\cdot)\) 仅仅代表激活函数.
Joint
最后通过
\[\hat{y} = sigmoid(y_{FM} + y_{DNN})
\]
进行预测.
其它细节
- FM, Deep 部分共享 \(V\);
- dropout: 0.5;
- MLP: 400-400-400;
- optimizer: Adam;
- Actication: ReLU
代码
[official]
[PyTorch]
[TensorFlow]