浅层模型的FM, FFM, HOFM, FwFM到深层模型的DNN, PNN, NFM, AFM, DeepFM, DCN, xDeepFM, FiBiNet等,
关于特征交叉方向的模型paper, FiBinet模型通过SENET动态选择有用的交互特征, 然后再用一个双线性交互进行增强提高。在模型上并没有引入很复杂的结构,却能起到比较不错的效果。
本文中的AutoInt(Automatic Feature Interaction)模型是2019年发表在CIKM上的文章,重点也是在特征交互上,用到transformer结构,通过多头的自注意力机制显示地构造高阶特征,有效的提升了模型的效果。
和xdeepFM类似,针对目前很多浅层模型无法学习高阶的交互, 而DNN模型能学习高阶交互,但确是隐性学习,缺乏可解释性。而transformer把离散特征通过多个这样的交叉块堆积,学习到任意高阶的交互。
在Fibinet中整理到的在模型的特征重要性选择和特征交互时的两大思路:
- 特征重要性选择 — 想到SENet和Attention机制
- 特征交互 — 想到內积,哈达玛和双线性
- 重要的一些网络模块:
- DNN – 高阶隐性交互
- FM – 低阶显性交互
- CrossNet, CIN,transformer — 高阶显性交互
AutoInt把上面两个东西融合到了一起,在多头自注意力机制选择的时候, 自动完成了特征交互。并且还能学习到任意高阶交互。本文结构如下:
- AutoInt模型的理论及论文细节
- AutoInt模型的简单复现及结构解释
- 总结
AutoInt模型的理论及论文细节
动机
- 浅层的模型会受到交叉阶数的限制,没法完成高阶交叉
- 深层模型的DNN在学习高阶隐性交叉的效果并不是很好, 且不具有可解释性
AutoInt模型的结构

Input Layer
输入层用到的特征主要是离散型特征和连续性特征,经过embedding层转成低维稠密的向量,连续性特征,这里并没有经过分桶离散化,而是直接走embedding。类似于预训练时候的思路,先通过item_id把连续型特征与类别特征关联起来,最简单的做法,就是把item_id拿过来,经过embedding层取出对应的embedding之后,再乘上连续值即可, 所以这个连续值需要预处理归一化的。
所以模型整体的输入如下:
x = [ x 1 ; x 2 ; … ; x M ] \mathbf{x}=\left[\mathbf{x}_{1} ; \mathbf{x}_{2} ; \ldots ; \mathbf{x}_{\mathbf{M}}\right] x=[x1;x2;…;xM]
这里的 M M M 表示特征的个数, X 1 , X 2 X_{1}, X_{2} X1,X2 这是离散型特征, one-hot的形式,而 X M X_{M} XM 在这里是连续性特征。经过embedding层就是上面的做法。
Embedding Layer
embedding层的作用是把高维稀疏的特征转成低维稠密, 离散型的特征一般是取出对应的embedding向量即可,具体计算如下:
e i = V i x i \mathbf{e}_{\mathbf{i}}=\mathbf{V}_{\mathrm{i}} \mathbf{x}_{\mathbf{i}} ei=Vixi
对于第 i i i 个离散特征,直接第 i i i 个嵌入矩阵 V i V_{i} Vi 乘以one-hot向量,取出对应位置的embedding。
当然,如果输入的时候不是个one-hot,而 是个multi-hot的形式,那么对应的embedding输出是各个embedding求平均得到的。
e i = 1 q V i x i \mathbf{e}_{\mathbf{i}}=\frac{1}{q} \mathbf{V}_{\mathbf{i}} \mathbf{x}_{\mathbf{i}} ei=q1Vixi
而对于连续特征,也是过一个embedding矩阵取相应的embedding,不过,最后要乘一个连续值
e m = v m x m \mathbf{e}_{\mathbf{m}}=\mathbf{v}_{\mathbf{m}} x_{m} em=vmxm
这样,不管是连续特征,离散特征还是变长的离散特征,经过embedding之后,都能得到等长的embedding向量。把这个向量拼接到一块,就得到了交互层的输入。

Interacting Layer
这个是本篇论文的核心,描述了transformer块的前向传播过程。
通过embedding层,得到 M \mathrm{M} M 个向量 e 1 , … e M e_{1}, \ldots e_{M} e1,…eM ,假设向量的维度是 d d d 维,那么这个就是一个 d × M d \times M d×M 的矩阵,我们定一个符号 X X X 。 接下来我们基于这个矩阵 X X X ,做三次变换,也就是分别乘以三个矩阵 W k ( h ) , W q ( h ) , W v ( h ) W_{k}^{(h)}, W_{q}^{(h)}, W_{v}^{(h)} Wk(h),Wq(h),Wv(h) ,这三个矩阵的维度是 d ′ × d d^{\prime} \times d d′×d 的话,那么我们 就会得到三个结果:
Q ( h ) = W q ( h ) × X K ( h ) = W k ( h ) × X V ( h ) = W v ( h ) × X \begin{aligned} &Q^{(h)}=W_{q}^{(h)} \times X \\ &K^{(h)}=W_{k}^{(h)} \times X \\ &V^{(h)}=W_{v}^{(h)} \times X \end{aligned} Q(h)

最低0.47元/天 解锁文章
5330

被折叠的 条评论
为什么被折叠?



