返回介绍

数学基础

统计学习

深度学习

工具

Scala

三十、FiBiNET [2019]

发布于 2023-07-17 23:38:25 字数 62379 浏览 0 评论 0 收藏 0

  1. 近年来,许多基于深度学习的 CTR 模型被提出并取得了成功,如 Factorization-Machine Supported Neural Network: FNNWide&Deep model: WDLAttentional Factorization Machine: AFMDeepFMXDeepFM 等等。

    论文 《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 机制和双线性特征交互,论文的浅层模型在 CriteoAvazu 数据集上的浅层模型之间(如 FFM )实现了 SOTA
    • 为了进一步提高性能,论文将经典的深度神经网络组件与浅层模型相结合,构成一个深度模型。深度 FiBiNETCriteoAvazu 数据集上的表现一直优于其他 SOTA 的深度模型。
  2. 相关工作:

    • FM 及其变体:factorization machine: FMfield-aware factorization machine: FFM 是两个最成功的 CTR 模型。

      • FM 使用因子化的参数建模所有的特征交互。它的时间复杂度和空间复杂度都很低,在大型稀疏数据上表现很好。
      • FFM 引入了 field-aware 的潜在向量,并赢得了由 CriteoAvazu 主办的两个比赛。然而,FFM 的空间复杂度太高,不容易在互联网公司中使用。
    • Deep Learning based CTR Models:近年来,许多基于深度学习的 CTR 模型被提出。大多数基于神经网络的 CTR 模型的关键因素是:如何有效地建模特征交互。

      • Factorization-Machine Supported Neural Network: FNN 是一个前馈神经网络,使用 FM 来预训练 embedding layer 。然而,FNN 只能捕获高阶的特征交互。
      • Wide & Deep model: WDL 联合训练 wide linear modeldeep neural network ,从而为推荐系统来结合 memorizationgeneralization 的好处。然而,对于 WDLwide 部分的输入,仍然需要专业的特征工程,这意味着 cross-product transformation 也需要手工设计。
      • 为了减轻特征工程中的人工努力,DeepFMFM 取代了 WDLwide 部分,并在 FMdeep 组件之间共享 feature embeddingDeepFM 被认为是 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 的准确性。

30.1 模型

  1. 我们的目标是以一种细粒度的方式动态地学习特征的重要性和特征交互。为此,我们提出了用于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 layerembedding layerDeepFM 相同,它对输入特征采用稀疏表示并将原始特征嵌入到稠密向量中。

    • SENET layer 可以将 embedding layer 转换为 SENET-Like embedding feature ,这有助于提高特征的 discriminability

      由于原始 EmbeddingsSENET-Like Embeddings 都作为后续模块的输入,因此 SENET-Like Embeddings 仅仅是作为原始 Embeddings 的补充(类似于残差机制),而不是作为原始 Embeddings 重要性的解释。

      如果仅仅将 SENET-Like Embeddings 作为后续模块的输入,这时候才具有可解释性。

    • 接下来的 Bilinear-Interaction layer 分别对原始 embeddingSENET-Like embedding 的二阶特征交互进行建模。

    • combination layer 拼接了 Bilinear-Interaction layer 的输出。

    • 最后,我们将combination layer 的输出馈入一个深度神经网络从而得到预测分数。

  2. Sparse Input and Embedding layersparse input layer 对原始输入特征采用了 sparse representationembedding layersparse feature 嵌入到一个低维稠密的实值向量中。embedding layer 的输出是由 field embedding 向量所拼接而来:e=[e1,e2,,ef]Rfk$ \mathbf{\vec e} = \left[\mathbf{\vec e}_1,\mathbf{\vec e}_2,\cdots,\mathbf{\vec e}_f\right]\in \mathbb R^{fk} $ ,其中eiRk$ \mathbf{\vec e}_i\in \mathbb R^k $ ,f$ f $ 为 field 数量,k$ k $ 为 field embedding 维度。

  3. SENET Layer:我们都知道,不同的特征对目标任务有不同的重要性。例如,当我们预测一个人的收入时,职业这个特征比爱好这个特征更重要。受到 SENET 在计算机视觉领域的成功启发,我们引入了 SENET 机制,让模型更加关注特征的重要性。对于特定的 CTR 预估任务,我们可以通过 SENET 机制动态地增加重要特征的权重、减少不重要特征的权重。

    feature embedding 作为输入,SENET 针对 field embedding 产生权重向量a=(a1,,af)Rf$ \mathbf{\vec a}=(a_1,\cdots,a_f)\in \mathbb R^f $ ,然后用向量a$ \mathbf{\vec a} $ 来重新缩放原始的 embeddinge$ \mathbf{\vec e} $ 从而得到一个新的 embedding (即,SENET-Like embedding):

    (54)v=[v1,v2,,vf]Rfk,vi=ai×eiRk

    其中:aiR$ a_i\in \mathbb R $ 是一个标量,表示第i$ i $ 个 field 的权重;viRk$ \mathbf{\vec v}_i\in \mathbb R^k $ 为第i$ i $ 个 fieldSENET-Like embedding

    如下图所示,SENET 由三个步骤组成:squeeze stepexcitation stepre-weight step

    • squeeze:这一步是用来计算每个 field embeddingsummary statistics 的。具体而言,我们使用一些池化方法(如 max/mean)从而将原始的 embeddinge=[e1,e2,,ef]$ \mathbf{\vec e} = \left[\mathbf{\vec e}_1,\mathbf{\vec e}_2,\cdots,\mathbf{\vec e}_f\right] $ 挤压为一个统计向量z=(z1,,zf)Rf$ \mathbf{\vec z}=(z_1,\cdots,z_f)\in \mathbb R^f $ ,其中ziR$ z_i\in \mathbb R $ 为一个标量,表示第i$ i $ 个特征表示的全局信息。

      zi$ z_i $ 的计算公式为zi=Fsq(ei)$ z_i = F_\text{sq}(\mathbf{\vec e}_i) $ ,其中Fsq()$ F_\text{sq}(\cdot) $ 可以为均值池化、sum 池化、或者最大池化。

      (55)zi=Fsq(ei)=1kt=1kei,t,zi=Fsq(ei)=t=1kei,t,zi=Fsq(ei)=max1tk{ei,t}

      原始 SENET 论文中的 squeeze 函数是最大池化。然而,我们的实验结果表明,均值池化的性能比最大值池化的性能更好。

    • excitation:这一步可以用来基于统计向量z$ \mathbf{\vec z} $ 来学习每个 field embedding 的权重。我们使用两个全连接层来学习权重:

      • 第一个全连接层是一个降维层,参数为W1$ \mathbf W_1 $ ,降维率r$ r $ 是一个超参数,非线性函数为σ1$ \sigma_1 $ 。
      • 第一个全连接层是一个升维层,参数为W2$ \mathbf W_2 $ ,非线性函数为σ2$ \sigma_2 $ 。

      正式地,field embedding 的权重的计算公式为:

      (56)a=Fex(z)=σ2(W2σ1(W1z))Rf

      其中:σ1,σ2$ \sigma_1,\sigma_2 $ 为激活函数;W1Rf×fr,W2Rfr×f$ \mathbf W_1\in \mathbb R^{f\times \frac{f}{r}}, \mathbf W_2\in \mathbb R^{\frac{f}{r}\times f} $ 。

      这一步是降维,从而最多保留最重要的r$ r $ 个权重。

    • re-weightSENET 的最后一步是 reweight ,在原始论文中被称为 re-scaleSENET-Like embeddingv$ \mathbf{\vec v} $ 可以被计算为:

      (57)v=FReweight(a,e)=[a1×e1,,af×ef]=[v1,,vf]

  4. Bilinear-Interaction LayerInteraction layer 用于计算二阶的特征交互。特征交互的经典方法是内积和 Hadamard 积,其形式分别为:{(vivj)xixj}(i,j)Rx$ \left\{\left(\mathbf{\vec v}_i\cdot \mathbf{\vec v}_j\right)x_ix_j\right\}_{(i,j)\in \mathcal R_x} $ 以及{(vivj)xixj}(i,j)Rx$ \left\{\left(\mathbf{\vec v}_i\odot\mathbf{\vec v}_j\right)x_ix_j\right\}_{(i,j)\in \mathcal R_x} $ ,其中Rx={(i,j)}i,j{1,,f},j>i$ \mathcal R_x=\{(i,j)\}_{i,j\in \{1,\cdots,f\}, j\gt i} $ 。内积和Hadamard 积过于简单,不能有效地建模稀疏数据集中的特征交互。因此,我们提出了一种更加细粒度的方法来结合内积和 Hadamard 积,如下图 (c) 所示。

    具体来说,我们在Interaction layer 提出了三种类型的双线性函数,并称这一层为 Bilinear-Interaction layer 。以第i$ i $ 个 field embeddingvi$ \mathbf{\vec v}_i $ 和第j$ j $ 个field embeddingvj$ \mathbf{\vec v}_j $ 为例,特征交互的结果pi,j$ p_{i,j} $ 可以计算为:

    • Field-All Type

      (58)pi,j=(Wvi)vjRk

      其中:WRk×k$ \mathbf W\in \mathbb R^{k\times k} $ 为权重矩阵,它在所有的 field interaction pair 之间共享。

    • Field-Each Type

      (59)pi,j=(Wivi)vjRk

      其中:WiRk×k$ \mathbf W_i\in \mathbb R^{k\times k} $ 为权重矩阵,每个 field 都有一个。

    • Field-Interactoin Type

      (60)pi,j=(Wi,jvi)vjRk

      其中:Wi,jRk×k$ \mathbf W_{i,j}\in \mathbb R^{k\times k} $ 为权重矩阵,每个 field interaction pair 都有一个。

    Figure 1 所示,我们有两种 embedding:原始 embeddingSENET-like embedding 。对于每一种 embedding,我们可以选择采用 bilinear 函数或 Hadamard 积。

    最终,Bilinear-Interaction layer 可以从原始 embeddigne$ \mathbf{\vec e} $ 中输出一个 interaction vectorp=[p1,,pf]$ \mathbf{\vec p}=\left[\mathbf{\vec p}_1,\cdots,\mathbf{\vec p}_f\right] $ ,从 SENET-like embeddingv$ \mathbf{\vec v} $ 中输出一个 interaction vectorq=[q1,,qf]$ \mathbf{\vec q}=\left[\mathbf{\vec q}_1,\cdots,\mathbf{\vec q}_f\right] $ 。

  5. Combination Layercombination layerinteraction vectorp$ \mathbf{\vec p} $ 和q$ \mathbf{\vec q} $ 拼接起来:

    (61)c=Fconcat[p1,,pf,q1,,qf]=[c1,,c2f]

    如果我们将向量c$ \mathbf{\vec c} $ 中的每个元素相加,然后用一个 sigmoid 函数来输出预测值,我们就有了一个浅层的 CTR 模型。

    为了进一步提高性能,我们将浅层组件和 DNN 组件组合成一个统一的模型,形成深度网络结构。这个统一的模型在本文中称为深度模型。

    而更好的办法是:拼接c$ \mathbf{\vec c} $ 之后进行线性加权,即:

    (62)scorep=i=1fj=1fwi,j(p)×pi,j,scoreq=i=1fj=1fwi,j(q)×qi,jscore=scorep+scoreq
  6. Deep Network:深度网络由多个全连接层组成,隐式地捕获了高阶的特征交互。

    Deep Network 的输入是什么?论文没有说明。但是根据 Figure 1,应该是c$ \mathbf{\vec c} $ 。

  7. Output Layer:我们模型的输出为:

    (63)y^=σ(w0+i=02fkwici+yd)

    其中:σ$ \sigma $ 为 sigmoid 函数,yd$ y_d $ 为 deep part 的输出,w0+i=02fkwici$ w_0+\sum_{i=0}^{2fk}w_ic_i $ 为 wide part 的输出。

    目标函数为交叉熵损失:

    (64)L=1Ni=1N(yilogy^i+(1yi)log(1y^i))

    其中:N$ N $ 为样本数量,yi$ y_i $ 为 ground-truth

  8. FM, FNN 的联系:

    • 假设我们去掉 SENET layerBilinear-Interaction layer,不难发现我们的模型将退化为 FNN
    • 当我们进一步去掉 DNN 部分,同时使用常数的 sum ,那么浅层 FiBiNET 就退化为传统的 FM 模型。

30.2 实验

  1. 数据集:

    • Criteo:包含有 4500 万个样本的点击日志。在 Criteo 数据集中有 26 个匿名的 categorical feature field13continuous feature field 。我们将数据集随机分成两部分:90% 用于训练,其余用于测试。
    • Avazu:包含有 4000 万个样本的点击日志。对于每个点击数据,有24feature field 。我们将其随机分成两部分:80% 用于训练,而其余部分用于测试。
  2. 评估指标:AUC, LogLoss

  3. baseline 方法:

    • 浅层 baseline 模型:LRFMFFMAFM
    • 深层 baseline 模型:FNNDCNDeepFMXDeepFM
  4. 实现细节:

    • 所有模型用 TensorFlow 来实现。
    • embedding layer 的维度:Criteo 数据集设为 10Avazu 数据集设为 50
    • 使用 Adam 优化器,Criteo 数据集的 batch size = 1000Avazu 数据集的 batch size = 500,学习率设为 0.0001
    • 对于所有的深度模型,层深度都是 3 、激活函数都是 RELUdropout rate 都是 0.5Criteo 数据集的隐层维度为 400Avazu 数据集的隐层维度为 2000
    • 对于 SENET 部分,两个全连接层中的激活函数是 RELU 函数,缩减率设置为r=3$ r=3 $ 。
    • 硬件配置:2Tesla K40 GPU
  5. Table 1Table 2 中分别总结了浅层模型和深层模型在 Criteo 测试集和 Avazu 测试集上的总体表现。

    这里 Interaction layer 使用 Field-All 双线性函数,如表格的标题所示。

    • 浅层模型:我们的浅层 SE-FM-All 模型一直优于其他模型,如 FMFFMAFM等。

      • 一方面,结果表明,将 SENET 机制与稀疏特征上的 bilinear interaction 结合起来,对于许多现实世界的数据集来说是一种有效的方法。
      • 另一方面,对于经典的浅层模型来说, SOTA 的模型是 FFM ,但是它受到大内存的限制,不能轻易用于互联网公司。我们的浅层模型的参数较少,但仍然比 FFM 表现更好。因此,它可以被视为 FFM 的一个替代方案。

    • 深层模型:

      • 将浅层部分和 DNN 结合成一个统一的模型,浅层模型可以获得进一步的性能提升。我们可以从实验结果中推断,隐式的高阶特征交互有助于浅层模型获得更多的表达能力。

      • 在所有的比较方法中,我们提出的深度 FiBiNET 取得了最好的性能。在 Criteo 数据集上和 Avazu 数据集上,我们的深度模型以 0.222%0.59%AUC0.494%0.6%logloss )优于DeepFM

      • 结果表明,将 SENET 机制与 DNN 中的Bilinear-Interaction 相结合进行预测是有效的。

        一方面,SENET 固有地引入了以输入为条件的动态性,有助于提高特征的discriminability ;另一方面,与内积或 Hadamard 积等其他方法相比,双线性函数是一种有效的方法来建模特征交互。

  6. 不同的特征交互方式:我们将讨论在 Bilinear-Interaction layer 中,双线性函数和 Hadamard 积不同类型的组合的影响。为方便起见,我们用01来表示在 Bilinear-Interaction layer 使用哪种函数:1 表示使用双线性函数,而 0 表示使用 Hadamard 积。

    Interaction layer 使用 Field-Each 双线性函数。很奇怪Table3Table1/2 使用了不同的双线性函数。

    我们有两个 embedding ,所以使用两个数字。第一个数字表示用于原始 embedding 的特征交互方法,第二个数字表示用于 SENET-like embedding 的特征交互方法。例如:10 表示双线性函数被用作原始 embedding 的特征交互方法、Hadamard 函数被用作 SENET-like embedding 的特征交互方法。

    实验结果如下表所示。可以看到,在 Criteo 数据集上:

    • 11 的组合在浅层模型中表现最好,但是在深度模型中表现最差。
    • 深层模型中的首选组合应该是 01 。这种组合意味着双线性函数只适用于 SENET-Like embedding layer

    不同数据集的结论不同,因此这个双线性函数的组合方式需要根据不同的数据进行调优。

  7. Bilinear-InteractionField 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 的性能取决于数据集。

  8. 超参数:

    • Embedding 部分:我们将 embedding size10 改变到 50。可以看到:

      • 随着维度从 10 扩大到 50 ,在 Avazu 数据集上我们的模型可以获得大幅改善。

      • 当我们增加 Criteo数据集的 embedding size 时,性能就会下降。

        扩大 embedding size 意味着增加 embedding layerDNN 部分的参数数量。我们猜测可能是 Criteo 数据集的特征比Avazu 数据集多得多,导致了优化的困难。

        有两个原因:过拟合、以及优化困难。因为这两个数据集的样本量都在 4000 万以上,因此二者的过拟合程度应该相差无几。

    • SENET 部分:

      • squeeze 函数:下表总结了不同 squeeze 函数的性能,我们发现 GlobalMeanPoolingCriteo 数据集和 Avazu 数据集上优于 GlobalMaxPoolingGlobalSumPooling

      • 激活函数:我们改变了激活函数的组合,如下表所示。

        • 在这些激活函数的组合中,Relu-Relu 略胜于其他组合。
        • 与原始 SENET 的设置不同,FiBiNETSENET 组件中的第二个激活函数是Relu函数,其性能比sigmoid 函数更好。

      • 此外,我们还改变了压缩率(1r5$ 1\le r\le 5 $ ),发现压缩率的最佳设置是r=3$ r=3 $ 。

    • DNN 部分:

      • 网络层数:增加层数可以增加模型的复杂性。我们可以从下图中观察到,增加层数在开始时可以提高模型性能。然而,如果层数不断增加,性能就会下降。这是因为过于复杂的模型很容易过拟合。对于Avazu 数据集和Criteo数据集,将隐藏层的数量设置为 3 是一个不错的选择。

      • 隐层神经元数量:同样,增加每层的神经元数量也会引入复杂性。在下图中,我们发现对于 Criteo 数据集,每层设置 400个神经元比较好;对于 Avazu 数据集,每层设置 2000 个神经元比较好。

  9. 消融研究:目前为止,我们还没有分离出 FiBiNET 的每个组件的具体贡献。在本节中,我们对 FiBiNET 进行了消融实验,以便更好地了解它们的相对重要性。我们将 DeepSE-FM-Interaction 设定为基础模型,并以下列方式进行:

    • No BI :从 FiBiNET 中删除 Bilinear-Interaction layer
    • No SE :从 FiBiNET 中删除 SENET layer

    如果同时我们删除 SENET layerBilinear-Interaction layer,我们的浅层 FiBiNET 和深层 FiBiNET 将降级为 FMFNN 。实验结果如下表所示。

    • Bilinear-Interaction layerSENET layer 对于 FiBiNET 的性能都是必要的。我们可以看到,当我们删除任何组件时,性能将明显下降。
    • FiBiNET 中,Bilinear-Interaction layerSENET layer 一样重要。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文