本文首发于知乎专栏 https://zhuanlan.zhihu.com/p/53462648
简介
这篇论文提出使用multi-head self attention(类似Transformer里的那个) 机制来进行自动特征交叉学习以提升CTR预测任务的精度。
废话不多说,先看下主要结构。典型的四段式深度学习CTR模型结构:输入,嵌入,特征提取,输出。这里我们重点看下嵌入和特征提取部分
核心结构
输入和嵌入
针对类别特征,通过embedding方式转换为低维稠密向量
e i = V i x i e_i=V_ix_i ei=Vixi
其中, V i V_i Vi是特征组 i i i对应的嵌入字典(嵌入矩阵), x i x_i xi是特征组特征的独热编码表示向量(通常处于节省空间的考虑,只存储非零特征对应的索引)
对于连续特征有,
e m = v m x m e_m=v_mx_m em=vmxm
其中 v m v_m vm是嵌入向量, x m x_m xm是一个标量值
通常在CTR任务中我们对连续值特征对处理方式有三种:
- 进行归一化处理拼接到embedding向量侧
- 进行离散化处理作为类别特征
- 赋予其一个embedding向量,每次用特征值与embedding向量的乘积作为其最终表示
本文采取的是第三种方式,具体这三种方式孰优孰劣,要在具体场景具体任务下大家自己去验证了~
从实现的角度看第三种是比较便捷的。
InteractingLayer(交互层)
交互层使用多头注意力机制将特征投射到多个子空间中,在不同的子空间中可以捕获不同的特征交互模式。通过交互层的堆叠,可以捕获更高阶的交互模式。
下面展示在特定子空间 h h h下,对于特征组 m m m下的特征 e m e_m em,交互层是如何计算与其相关的交互特征 e ~ m ( h ) \tilde{e}^{(h)}_m e~m(h)的
-
首先输入特征通过矩阵乘法线性变换为在注意力空间下的向量表示,对于每个特征 e m e_m em在特定的注意力空间 h h h中,都有三个表示向量 E m h : Q u e r y = W Q u e r y ( h ) e m E^{h:Query}_m=W^{(h)}_{Query}e_m Em