《FiBiNET: Combining Feature Importance and Bilinear Feature Interaction for Click-Through Rate Prediction》
近年来,许多基于深度学习的 CTR
模型被提出并取得了成功,如 Factorization-Machine Supported Neural Network: FNN
、Wide&Deep model: WDL
、Attentional Factorization Machine: AFM
、DeepFM
、XDeepFM
等等。
论文 《FiBiNET: Combining Feature Importance and Bilinear Feature Interaction for Click-Through Rate Prediction》
提出了一个叫做 FiBiNET
的新模型,它是 Feature Importance and Bilinear feature Interaction NETwork
的缩写,用于动态地学习特征重要性和细粒度的特征交互。
众所周知,不同的特征对目标任务有不同的重要性。例如,当我们预测一个人的收入时,职业这个特征比爱好这个特征更重要。考虑到这一点,论文引入了 Squeeze-and-Excitation network: SENET
来动态地学习特征的权重。
此外,特征交互是 CTR
预测领域的一个关键挑战,许多相关工作以简单的方式计算特征交互,如 Hadamard
积和内积。论文提出了一种新的细粒度的方法采用双线性函数来计算特征交互。
论文主要贡献:
受 SENET
在计算机视觉领域的成功启发,论文使用 SENET
机制来动态地学习特征的权重。
论文引入了三种类型的双线性交互层(Bilinear-Interaction layer
),以一种精细的方式学习特征交互。而之前的工作用 Hadamard
积或内积来计算特征交互。
结合 SENET
机制和双线性特征交互,论文的浅层模型在 Criteo
和 Avazu
数据集上的浅层模型之间(如 FFM
)实现了 SOTA
。
为了进一步提高性能,论文将经典的深度神经网络组件与浅层模型相结合,构成一个深度模型。深度 FiBiNET
在 Criteo
和Avazu
数据集上的表现一直优于其他 SOTA
的深度模型。
相关工作:
FM
及其变体:factorization machine: FM
和 field-aware factorization machine: FFM
是两个最成功的 CTR
模型。
FM
使用因子化的参数建模所有的特征交互。它的时间复杂度和空间复杂度都很低,在大型稀疏数据上表现很好。
FFM
引入了 field-aware
的潜在向量,并赢得了由 Criteo
和 Avazu
主办的两个比赛。然而,FFM
的空间复杂度太高,不容易在互联网公司中使用。
Deep Learning based CTR Models
:近年来,许多基于深度学习的 CTR
模型被提出。大多数基于神经网络的 CTR
模型的关键因素是:如何有效地建模特征交互。
Factorization-Machine Supported Neural Network: FNN
是一个前馈神经网络,使用 FM
来预训练 embedding layer
。然而,FNN
只能捕获高阶的特征交互。
Wide & Deep model: WDL
联合训练 wide linear model
和 deep neural network
,从而为推荐系统来结合 memorization
和 generalization
的好处。然而,对于 WDL
的 wide
部分的输入,仍然需要专业的特征工程,这意味着 cross-product transformation
也需要手工设计。
为了减轻特征工程中的人工努力,DeepFM
用 FM
取代了 WDL
的 wide
部分,并在 FM
和 deep
组件之间共享 feature embedding
。DeepFM
被认为是 CTR
预估领域中的 SOTA
模型之一。
Deep & Cross Network: DCN
以一种显式的方式有效地捕捉了有界阶次的特征交互。
eXtreme Deep Factorization Machine: xDeepFM
也通过提出一个新颖的 Compressed Interaction Network : CIN
组件来显式地建模低阶特征交互和高阶特征交互。
正如 《Attentional factorization machines: Learning the weight of feature interactions via attention networks》
所提到的,FM
的一个不足是它对所有特征交互采用相同的权重,然而并不是所有的特征交互都同样有用和具有预测性。因此,他们提出了 Attentional Factorization Machine: AFM
模型,该模型使用注意力网络来学习特征交互的权重。
Deep Interest Network: DIN
用兴趣分布(interest distribution
)表示用户的多样化兴趣,并设计了一个类似注意力的网络结构从而根据候选广告局部地激活相关的兴趣。
SENET Module
:《Squeeze-and-excitation networks》
提出了 Squeeze-and-Excitation Network: SENET
,通过显式地建模卷积特征通道之间的相互依赖关系,从而提高网络的表达能力。SENET
被证明在图像分类任务中是成功的,并在 ILSVRC 2017
分类任务中赢得了第一名。
除了图像分类,SENET
还有其他的应用。
《Recalibrating Fully Convolutional Networks with Spatial and Channel’Squeeze & Excitation’Blocks》
介绍了三种用于语义分割任务的 SE
模块的变体。
对常见的胸部疾病进行分类,以及对胸部X
光片上的可疑病变区域进行定位(《Weakly Supervised Deep Learning for Thoracic Disease Classifcation and Localization on Chest X-rays》
)是另一个应用领域。
《Global-andlocal attention networks for visual recognition》
用 global-and-local attention: GALA
模块扩展了 SENET
模块,在 ILSVRC
上获得 SOTA
的准确性。
我们的目标是以一种细粒度的方式动态地学习特征的重要性和特征交互。为此,我们提出了用于CTR
预估任务的 Feature Importance and Bilinear feature Interaction NETwork: FiBiNET
。
我们的模型结构如下图所示。为了清晰起见,我们省略了 logistic regression
的部分,这部分可以很容易地纳入。我们的模型由以下部分组成:sparse input layer, embedding layer, SENET layer, Bilinear-Interaction layer, combination layer, multiple hidden layers, output layer
。
sparse input layer
和 embedding layer
与 DeepFM
相同,它对输入特征采用稀疏表示并将原始特征嵌入到稠密向量中。
SENET layer
可以将 embedding layer
转换为 SENET-Like embedding feature
,这有助于提高特征的 discriminability
。
由于原始
Embeddings
和SENET-Like Embeddings
都作为后续模块的输入,因此SENET-Like Embeddings
仅仅是作为原始Embeddings
的补充(类似于残差机制),而不是作为原始Embeddings
重要性的解释。如果仅仅将
SENET-Like Embeddings
作为后续模块的输入,这时候才具有可解释性。
接下来的 Bilinear-Interaction layer
分别对原始 embedding
和 SENET-Like embedding
的二阶特征交互进行建模。
combination layer
拼接了 Bilinear-Interaction layer
的输出。
最后,我们将combination layer
的输出馈入一个深度神经网络从而得到预测分数。
Sparse Input and Embedding layer
:sparse input layer
对原始输入特征采用了 sparse representation
,embedding layer
将 sparse feature
嵌入到一个低维稠密的实值向量中。embedding layer
的输出是由 field embedding
向量所拼接而来:field
数量,field embedding
维度。
SENET Layer
:我们都知道,不同的特征对目标任务有不同的重要性。例如,当我们预测一个人的收入时,职业这个特征比爱好这个特征更重要。受到 SENET
在计算机视觉领域的成功启发,我们引入了 SENET
机制,让模型更加关注特征的重要性。对于特定的 CTR
预估任务,我们可以通过 SENET
机制动态地增加重要特征的权重、减少不重要特征的权重。
以 feature embedding
作为输入,SENET
针对 field embedding
产生权重向量 embedding
embedding
(即,SENET-Like embedding
):
其中: field
的权重;field
的 SENET-Like embedding
。
如下图所示,SENET
由三个步骤组成:squeeze step
、excitation step
、re-weight step
。
squeeze
:这一步是用来计算每个 field embedding
的 summary statistics
的。具体而言,我们使用一些池化方法(如 max/mean
)从而将原始的 embedding
sum
池化、或者最大池化。
原始 SENET
论文中的 squeeze
函数是最大池化。然而,我们的实验结果表明,均值池化的性能比最大值池化的性能更好。
excitation
:这一步可以用来基于统计向量 field embedding
的权重。我们使用两个全连接层来学习权重:
第一个全连接层是一个降维层,参数为
第一个全连接层是一个升维层,参数为
正式地,field embedding
的权重的计算公式为:
其中:
这一步是降维,从而最多保留最重要的
个权重。
re-weight
:SENET
的最后一步是 reweight
,在原始论文中被称为 re-scale
。 SENET-Like embedding
Bilinear-Interaction Layer
:Interaction layer
用于计算二阶的特征交互。特征交互的经典方法是内积和 Hadamard
积,其形式分别为:Hadamard
积过于简单,不能有效地建模稀疏数据集中的特征交互。因此,我们提出了一种更加细粒度的方法来结合内积和 Hadamard
积,如下图 (c)
所示。
具体来说,我们在Interaction layer
提出了三种类型的双线性函数,并称这一层为 Bilinear-Interaction layer
。以第 field embedding
field embedding
Field-All Type
:
其中:field interaction pair
之间共享。
Field-Each Type
:
其中:field
都有一个。
Field-Interactoin Type
:
其中:field interaction pair
都有一个。
如 Figure 1
所示,我们有两种 embedding
:原始 embedding
、SENET-like embedding
。对于每一种 embedding
,我们可以选择采用 bilinear
函数或 Hadamard
积。
最终,Bilinear-Interaction layer
可以从原始 embeddign
interaction vector
SENET-like embedding
interaction vector
Combination Layer
:combination layer
将 interaction vector
如果我们将向量 sigmoid
函数来输出预测值,我们就有了一个浅层的 CTR
模型。
为了进一步提高性能,我们将浅层组件和 DNN
组件组合成一个统一的模型,形成深度网络结构。这个统一的模型在本文中称为深度模型。
而更好的办法是:拼接
之后进行线性加权,即:
Deep Network
:深度网络由多个全连接层组成,隐式地捕获了高阶的特征交互。
Deep Network
的输入是什么?论文没有说明。但是根据Figure 1
,应该是。
Output Layer
:我们模型的输出为:
其中:sigmoid
函数,deep part
的输出,wide part
的输出。
目标函数为交叉熵损失:
其中:ground-truth
。
与 FM, FNN
的联系:
假设我们去掉 SENET layer
和 Bilinear-Interaction layer
,不难发现我们的模型将退化为 FNN
。
当我们进一步去掉 DNN
部分,同时使用常数的 sum
,那么浅层 FiBiNET
就退化为传统的 FM
模型。
数据集:
Criteo
:包含有 4500
万个样本的点击日志。在 Criteo
数据集中有 26
个匿名的 categorical feature field
和 13
个 continuous feature field
。我们将数据集随机分成两部分:90%
用于训练,其余用于测试。
Avazu
:包含有 4000
万个样本的点击日志。对于每个点击数据,有24
个 feature field
。我们将其随机分成两部分:80%
用于训练,而其余部分用于测试。
评估指标:AUC, LogLoss
。
baseline
方法:
浅层 baseline
模型:LR
、FM
、FFM
、AFM
。
深层 baseline
模型:FNN
、DCN
、DeepFM
、XDeepFM
。
实现细节:
所有模型用 TensorFlow
来实现。
embedding layer
的维度:Criteo
数据集设为 10
、Avazu
数据集设为 50
。
使用 Adam
优化器,Criteo
数据集的 batch size = 1000
,Avazu
数据集的 batch size = 500
,学习率设为 0.0001
。
对于所有的深度模型,层深度都是 3
、激活函数都是 RELU
、dropout rate
都是 0.5
。 Criteo
数据集的隐层维度为 400
、Avazu
数据集的隐层维度为 2000
。
对于 SENET
部分,两个全连接层中的激活函数是 RELU
函数,缩减率设置为
硬件配置:2
个 Tesla K40 GPU
。
Table 1
和 Table 2
中分别总结了浅层模型和深层模型在 Criteo
测试集和 Avazu
测试集上的总体表现。
这里
Interaction layer
使用Field-All
双线性函数,如表格的标题所示。
浅层模型:我们的浅层 SE-FM-All
模型一直优于其他模型,如 FM
、FFM
、AFM
等。
一方面,结果表明,将 SENET
机制与稀疏特征上的 bilinear interaction
结合起来,对于许多现实世界的数据集来说是一种有效的方法。
另一方面,对于经典的浅层模型来说, SOTA
的模型是 FFM
,但是它受到大内存的限制,不能轻易用于互联网公司。我们的浅层模型的参数较少,但仍然比 FFM
表现更好。因此,它可以被视为 FFM
的一个替代方案。
深层模型:
将浅层部分和 DNN
结合成一个统一的模型,浅层模型可以获得进一步的性能提升。我们可以从实验结果中推断,隐式的高阶特征交互有助于浅层模型获得更多的表达能力。
在所有的比较方法中,我们提出的深度 FiBiNET
取得了最好的性能。在 Criteo
数据集上和 Avazu
数据集上,我们的深度模型以 0.222%
和 0.59%
的 AUC
( 0.494%
和 0.6%
的 logloss
)优于DeepFM
。
结果表明,将 SENET
机制与 DNN
中的Bilinear-Interaction
相结合进行预测是有效的。
一方面,SENET
固有地引入了以输入为条件的动态性,有助于提高特征的discriminability
;另一方面,与内积或 Hadamard
积等其他方法相比,双线性函数是一种有效的方法来建模特征交互。
不同的特征交互方式:我们将讨论在 Bilinear-Interaction layer
中,双线性函数和 Hadamard
积不同类型的组合的影响。为方便起见,我们用0
和1
来表示在 Bilinear-Interaction layer
使用哪种函数:1
表示使用双线性函数,而 0
表示使用 Hadamard
积。
Interaction layer
使用Field-Each
双线性函数。很奇怪Table3
和Table1/2
使用了不同的双线性函数。
我们有两个 embedding
,所以使用两个数字。第一个数字表示用于原始 embedding
的特征交互方法,第二个数字表示用于 SENET-like embedding
的特征交互方法。例如:10
表示双线性函数被用作原始 embedding
的特征交互方法、Hadamard
函数被用作 SENET-like embedding
的特征交互方法。
实验结果如下表所示。可以看到,在 Criteo
数据集上:
11
的组合在浅层模型中表现最好,但是在深度模型中表现最差。
深层模型中的首选组合应该是 01
。这种组合意味着双线性函数只适用于 SENET-Like embedding layer
。
不同数据集的结论不同,因此这个双线性函数的组合方式需要根据不同的数据进行调优。
Bilinear-Interaction
的 Field Types
:这里我们研究了 Bilinear-Interaction layer
的不同 field
类型(Field-All, Field-Each, Field-Interaction
)的影响。对于深层模型,Bilinear-Interaction layer
的组合被设置为 01
;对于浅层模型,Bilinear-Interaction layer
的组合被设置为 11
。
对于浅层模型,与Field-All
类型相比(见 Table 1
),Field-Interaction
类型可以在 Criteo
数据集上获得 0.382%
(相对提升 0.476%
)的 AUC
改进。
对于深层模型,与 Field-All
类型相比(见 Table 2
),Criteo
数据集的 Field-Interaction
类型、以及 Avazu
数据集的Field-Each
类型可以分别获得一些改进。
不同类型的 Bilinear-Interaction layer
的性能取决于数据集。
超参数:
Embedding
部分:我们将 embedding size
从 10
改变到 50
。可以看到:
随着维度从 10
扩大到 50
,在 Avazu
数据集上我们的模型可以获得大幅改善。
当我们增加 Criteo
数据集的 embedding size
时,性能就会下降。
扩大 embedding size
意味着增加 embedding layer
和 DNN
部分的参数数量。我们猜测可能是 Criteo
数据集的特征比Avazu
数据集多得多,导致了优化的困难。
有两个原因:过拟合、以及优化困难。因为这两个数据集的样本量都在
4000
万以上,因此二者的过拟合程度应该相差无几。
SENET
部分:
squeeze
函数:下表总结了不同 squeeze
函数的性能,我们发现 GlobalMeanPooling
在 Criteo
数据集和 Avazu
数据集上优于 GlobalMaxPooling
或 GlobalSumPooling
。
激活函数:我们改变了激活函数的组合,如下表所示。
在这些激活函数的组合中,Relu-Relu
略胜于其他组合。
与原始 SENET
的设置不同,FiBiNET
的 SENET
组件中的第二个激活函数是Relu
函数,其性能比sigmoid
函数更好。
此外,我们还改变了压缩率(
DNN
部分:
网络层数:增加层数可以增加模型的复杂性。我们可以从下图中观察到,增加层数在开始时可以提高模型性能。然而,如果层数不断增加,性能就会下降。这是因为过于复杂的模型很容易过拟合。对于Avazu
数据集和Criteo
数据集,将隐藏层的数量设置为 3
是一个不错的选择。
隐层神经元数量:同样,增加每层的神经元数量也会引入复杂性。在下图中,我们发现对于 Criteo
数据集,每层设置 400
个神经元比较好;对于 Avazu
数据集,每层设置 2000
个神经元比较好。
消融研究:目前为止,我们还没有分离出 FiBiNET
的每个组件的具体贡献。在本节中,我们对 FiBiNET
进行了消融实验,以便更好地了解它们的相对重要性。我们将 DeepSE-FM-Interaction
设定为基础模型,并以下列方式进行:
No BI
:从 FiBiNET
中删除 Bilinear-Interaction layer
。
No SE
:从 FiBiNET
中删除 SENET layer
。
如果同时我们删除 SENET layer
和 Bilinear-Interaction layer
,我们的浅层 FiBiNET
和深层 FiBiNET
将降级为 FM
和 FNN
。实验结果如下表所示。
Bilinear-Interaction layer
和 SENET layer
对于 FiBiNET
的性能都是必要的。我们可以看到,当我们删除任何组件时,性能将明显下降。
在 FiBiNET
中,Bilinear-Interaction layer
与 SENET layer
一样重要。