符号定义

  • $n$:特征维度,具体是所有特征 one-hot 编码之后再 concat 起来的维度,一般可达到十万百万级;
  • $f$:特征 field 的个数,表明特征类别有多少个,一般为几十到几百;
  • $k$:embedding 维度,在 FM 中是隐向量维度,一般为 20~100;
  • $H_i$:神经网络中第 $i$ 层的 cell 数。

FM 家族

Factorization-machine (FM)

FM 模型可以看成是 one-hot 特征的线性回归($w_ix_i$)与非线性特征交叉($\langle v_i, v_j \rangle x_i x_j$)组合而成。

$$ \operatorname{FM} = \operatorname{Sigmoid}( 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$ 是第 $i$ 维特征的隐向量(学出来的 embedding),其长度 $k << n$。总共要学的参数包括:

  • LR 部分:$n + 1$;
  • Embedding 部分:$n \cdot k$。

FM 模型是基于深度学习的 CTR 预测的基石,后续的改进基本围绕着「如何将 DNN 的高维离散输入,通过 embedding 层变成低维稠密的输入」来展开。

Deep Neural Network (DNN)

用普通的 3 层 fc 网络来做预测,每层维度分别为 $H_2$、$H_3$,那么待学习参数一共 $n \cdot H_1 + H_1 \cdot H_2 + H_2 \cdot H_3 + H_3 \cdot 1$。

Factorization-machine supported Neural Networks (FNN)

在上述的 DNN 中,网络的原始输入是全部原始特征,维度为 $n$,通常都是百万级以上。特征维度 $n$ 的空间巨大,但其实每个特征所属的 field 的维度 $f$ 会小很多(例如特征「本科」对应的 field 为「学历」)。如果有办法将每个特征用其所属的 field 来表示,原始输入将大大减少。

因此 FNN 假设原始输入的特征 $x$ 是大规模离散稀疏的,它可以被分成 $f$ 个 field,每个 field 有且只有一个值为 $1$,其他均为 $0$(跟 one-hot 类似)。因此对于第 $i$ 个 field 来说,其输入的 shape 依然为 $k$ 维向量。随后该向量被传入一个 fc 网络,最终预测分类结果。

这里我们计算一下 FNN 需要训练的参数:

  • LR 部分:$n + 1$;
  • Embedding 部分:$n \cdot k$;
  • Fc 网络:$f \cdot k \cdot H_1 + H_1 \cdot H_2 + H_2 \cdot 1$。

与 DNN 相比,FNN 将网络输入从 $n$(可达十万百万级)降到了 $f \cdot k$($f$ 一般为几十到几百,$k$ 一般为 20~100),很给力。

最后总结下 FNN 的优缺点:

  • (+) 大大减少了模型的输入。
  • (-) 需要用 FM 预训练每个特征的 embedding(某些工作不预训练的话就容易崩)。
  • (-) 假设了每个 field 只有一个非零值,如果不满足的话会通过 average、sum、max 等操作处理。

Product-based Neural Network (PNN)

PNN 相当于将 FM 中特征交叉的思想用到了 FNN 上。在 FNN 中,fc 网络的输入为 $f$ 个 field 的 embedding,而在 PNN 中,fc 网络的输入不仅包括 $f$ 个 field 的 embedding,还包括这 $f$ 个 field 的交叉特征。这些特征是通过两种方式进行交叉的:

  1. 使用向量内积(inner product)的 PNN 被称为 IPNN
  2. 使用向量外积(outer product)的 PNN 被称为 OPNN

我们同样计算下需要训练的参数:

  • LR 部分:$n + 1$;
  • Embedding 部分:$n \cdot k$;
  • Product 部分(其实可以理解为 fc 网络的第一层):
    • 对于 IPNN 来说:($f \times k + f \cdot \frac{f - 1}{2}) \cdot H_1$;
    • 对于 OPNN 来说:($f \times k + f \cdot \frac{f - 1}{2} \cdot k \cdot k) \cdot H_1$;
  • Fc 网络:$H_1 \cdot H_2 + H_2 \cdot 1$。

Wide & Deep Learning (Wide & Deep)

Google 出品的 Wide & Deep 认为 LR 模型只用了 wide 的低维特征、而 DNN 模型只用了 deep 的高维特征,认为有必要把他们搞在一起,因此提出了一个模型将 LR 跟 DNN 作为两个分支共同训练,在模型的最后将他们的输出结合在一起。

需要训练的参数包括:

  • LR 部分:$n + 1$;
  • Embedding 部分:$n \cdot k$;
  • Fc 网络:$f \cdot k \cdot H_1 + H_1 \cdot H_2 + H_2 \cdot 1$。

Factorization-Machine based Neural Network (DeepFM)

Huawei 的 DeepFM 再次将 Wide & Deep 的 LR 部分替换成 FM 部分,即分为 FM、DNN 两个分支,同样在模型的最后结合他们的输出。

因为 FM 分支也就比 LR 多了 embedding 部分,而这部分的参数是与 DNN 共享的,因此总的参数量跟 Wide & Deep 模型一样。

Neural Factorization Machines (NFM)

前面的 DeepFM 在 DNN 分支中,各个 field 的 embedding 是直接 concat 起来作为模型输入的,因此维度为 $f \cdot k$,而 NFM 提出了更粗暴的 BI-Interaction 操作,压缩 $f$ 个 $k$ 维向量为 $1$ 个。具体来说,bi-interaction 操作先让 $f$ 个 field 的 embedding 两两 elementwise 得到 $\frac{f \cdot (f - 1)}{2}$ 个向量,然后 sum 起来得到 $k$ 维向量,因此这一步不需要学习任何参数。

总的参数如下:

  • LR 部分:$n + 1$;
  • Embedding 部分:$n \cdot k$;
  • Fc 网络(一共 $L$ 层):$f \cdot k \cdot H_1 + H_1 \cdot H_2 + \cdots + H_L \cdot 1$。

Attention Neural Factorization Machines (AFM)

TODO

Deep&Cross Network (DCN)

TODO

Deep Interest Network (DIN)

TODO

参考