标题: FINAL: Factorized Interaction Layer for CTR Prediction
地址:https://dl.acm.org/doi/10.1145/3539618.3591988
公司:华为
会议:SIGIR 2023
代码:https://github.com/reczoo/FuxiCTR
1. 导读
本文所提方法为ctr预估方向,针对如何进行高效,有效的特征交互提出FINAL模型,整体模型比较简单,所以这里的导读就省略了,直接看方法部分即可。
2.方法
alt text
2.1 FINAL块
如何以最小的模型深度实现足够高的交互阶数对性能和效率都很重要。基于快速幂算法思想,作者设计了一种分层特征交互机制来实现指数级增长。在每个层次结构中,使用因子交互层通过多次乘法运算来提高特征交互度。
x_{l-1}为第
l层的输入,则从图2中也可以很清晰的得出计算逻辑,后一个块会和前一个计算得到的结果进行element-wise乘法进行特征交互,最后做sum pooling得到最终的输出。
\begin{aligned}
&\mathbf{h}_{l,1}=\mathbf{W}_{l,1}\mathbf{x}_{l-1}+\mathbf{b}_{l,1}, \\
&\mathbf{h}_{l,2}=\mathbf{h}_{l,1}\odot\sigma(\mathbf{W}_{l,2}\mathbf{x}_{l-1}+\mathbf{b}_{l,2}), \\
&... \\
&\mathbf{h}_{l,N}=\mathbf{h}_{l,N-1}\odot\sigma(\mathbf{W}_{l,N}\mathbf{x}_{l-1}+\mathbf{b}_{l,N}), \\
&\mathbf{x}_l=\sum_{i=1}^N(\mathbf{h}_{l,i}),
\end{aligned}
2.2 知识迁移
通常可以使用多个FINAL块(比如2个)来学习来自不同视角的特征交互。使用不同的linear层将block的输出转换为logits(图2中的
\hat{y}_a,\hat{y}_b)。求均值再经过sigmoid后得到
\hat{y},然后对应是否转化标签可以构建交叉熵损失函数
\mathcal{L}_c=-\frac1S\sum_{i=1}^S\left[y_i\log\left(\hat{y}_i\right)+\left(1-y_i\right)\log\left(1-\hat{y}_i\right)\right],
同时,为了促进不同FINAL块之间的知识共享,采用自知识蒸馏(self-knowledged distillation),看着名字很神奇,执行起来很简单。使用前面得到的聚合分数
\hat{y}来知道两个block,得到对应的交叉熵损失函数,
\begin{gathered}
\mathcal{L}_d =-\frac1S\sum_{i=1}^S\left[\hat{y}_i\log\left(\hat{y}_{a,i}\right)+(1-\hat{y}_i)\log\left(1-\hat{y}_{a,i}\right)\right], \\
\mathcal{L}_d^\prime =-\frac1S\sum_{i=1}^S\left[\hat{y}_i\log\left(\hat{y}_{b,i}\right)+(1-\hat{y}_i)\log\left(1-\hat{y}_{b,i}\right)\right],
\end{gathered}
3. 结果