当前位置: 代码迷 >> 综合 >> 【Paper Note】FiBiNet论文详解
  详细解决方案

【Paper Note】FiBiNet论文详解

热度:53   发布时间:2023-12-16 22:34:29.0
概述

ctr预估任务中,对输入特征进行建模,通过权重weight拟合特征和样本的关系,但实际任务中,特征之间的重要度也是不同的,
某些特征天然地与label具有较强关联性,因此,在模型中增加对特征本身重要度的描述,有利于模型更好的描述样本。
FiBiNet通过SENet的方式来解决上述问题;同时,从FM到FFM、DeepFM等模型,交叉特征的重要程度不言而喻,通常通过点积或hadamard积的方式获取特征交互,
这样获取特征交互的方式是否有效或者说是否最佳?这篇论文通过Bilinear-Interaction提出了交互特征提取的新方式。

整体架构

如下图所示:
在这里插入图片描述

除常规的embedding layer、hidden layer,本文将详细介绍SENet layer和Bilinear-Interaction layer。

embedding layer

输入数据为高维稀疏特征,经过embedding生成低维embedding E = [ e 1 , e 2 , ? , e f ] E=[e_1, e_2, \cdots , e_f] E=[e1?,e2?,?,ef?],其中f为field的个数

SENet layer

SE block最早出现在cv相关的论文中,来学习每个特征的重要性,之前的一篇博客【Paper Note】SENet论文——SE block详解中有介绍,如下图所示:
在这里插入图片描述

Squeeze
将每个embedding做average pooling,计算公式如下:
z i = F s q ( e i ) = 1 k ∑ t = 1 k e i ( t ) (1) z_i = F_{sq}(e_i) = \frac{1}{k} \sum_{t=1}^k{e_i^{(t)}} \tag{1} zi?=Fsq?(ei?)=k1?t=1k?ei(t)?(1)

Excitation
通过两层fully connected layers来学习每个field的权重,表示如下:
A = F e x ( Z ) = σ 2 ( W 2 σ 1 ( W 1 Z ) ) (2) A = F_{ex}(Z)= \sigma_2(W_2 \sigma_1(W_1 Z)) \tag{2} A=Fex?(Z)=σ2?(W2?σ1?(W1?Z))(2)
其中, W 1 W_1 W1? f × r f \times r f×r 维权重矩阵, W 2 W_2 W2? r × f r \times f r×f 维权重矩阵,其中 r < f r<f r<f

Reweight
基于field粒度的乘积运算动态学习每个特征的重要度,实现如下:
V = F R e W e i g h t ( A , E ) = [ a 1 ? e 1 , ? , a f ? e f ] = [ v 1 , ? , v f ] (3) V = F_{ReWeight}(A, E) = [a_1 \cdot e_1, \cdots , a_f \cdot e_f] = [v_1, \cdots, v_f] \tag{3} V=FReWeight?(A,E)=[a1??e1?,?,af??ef?]=[v1?,?,vf?](3)

Bilinear-Interaction layer

不同于FM或DeepFM模型中使用点积或hadamard积来获取交互特征,本文提出了Bilinear-Interaction方式,具体情况入下图c中所示, v i v_i vi? 首先会乘一个权重矩阵 W W W 之后再和 v j v_j vj? 计算hadamard积。
在这里插入图片描述
根据权重矩阵 W W W 的不同分配方式,会有三种情况:
Field-All Type
所有的field共用一个权重矩阵 W W W,具体如下:
p i j = v i ? W ⊙ v j (4) p_{ij} = v_i \cdot W \odot v_j \tag{4} pij?=vi??Wvj?(4)
上述方式,参数量为 m m m m m m 为权重矩阵的参数量,下同。
Field-Each Type
每个field对应一个权重矩阵 W W W,具体如下:
p i j = v i ? W i ⊙ v j (5) p_{ij} = v_i \cdot W_i \odot v_j \tag{5} pij?=vi??Wi?vj?(5)
上述方式,参数量为 f × m f \times m f×m f f f 为field个数,下同。
Field-Interaction Type
每个交叉特征对应一个权重矩阵 W W W,具体如下:
p i j = v i ? W i j ⊙ v j (6) p_{ij} = v_i \cdot W_{ij} \odot v_j \tag{6} pij?=vi??Wij?vj?(6)
上述方式,参数量为 f ( f ? 1 ) 2 × m \frac{f(f-1)}{2} \times m 2f(f?1)?×m

经过SENet和Bilinear-Interaction之后,原本的embedding计算得到向量 q = [ q 1 , ? q i ? q n ] q = [q_1, \cdots q_i \cdots q_n] q=[q1?,?qi??qn?]

Other layer

后面是一些常规操作,首先将embedding经过Bilinear-Interaction得到的 p p p 和embedding经过SENet再经过Bilinear-Interaction得到的 q q q 进行concat:
c = F c o n c a t ( p , q ) = [ p 1 , ? p n , q 1 , ? , q n ] = [ c 1 , ? , c 2 n ] (7) c = F_{concat}(p,q) = [p_1, \cdots p_n, q_1, \cdots, q_n] = [c_1, \cdots, c_{2n}] \tag{7} c=Fconcat?(p,q)=[p1?,?pn?,q1?,?,qn?]=[c1?,?,c2n?](7)
之后经过多层hidden layer:
a ( l ) = σ ( W ( l ) a ( l ? 1 ) + b ( l ) ) (8) a^{(l)} = \sigma(W^{(l)} a^{(l-1)} + b^{(l)}) \tag{8} a(l)=σ(W(l)a(l?1)+b(l))(8)
hidden layer输出的结果经过sigmoid输出:
y ^ = σ ( w 0 + ∑ i = 0 m w i x i + y d ) (9) \hat{y} = \sigma(w_0 + \sum_{i=0}^m{w_i x_i} + y_d) \tag{9} y^?=σ(w0?+i=0m?wi?xi?+yd?)(9)
损失函数定义为:
l o s s = ? 1 N ∑ i = 1 N ( y i l o g ( y ^ i ) + ( 1 ? y i ) ? l o g ( 1 ? y ^ i ) ) (10) loss = -\frac{1}{N} \sum_{i=1}^N(y_i log(\hat{y}_i) + (1-y_i) * log(1-\hat{y}_i)) \tag{10} loss=?N1?i=1N?(yi?log(y^?i?)+(1?yi?)?log(1?y^?i?))(10)

  相关解决方案