【Paper Note】FiBiNet论文详解

概述

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

整体架构

如下图所示:
【Paper Note】FiBiNet论文详解

除常规的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相关的论文中,来学习每个特征的重要性,之前的一篇博客********中有介绍,如下图所示:

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=1∑k​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积。
【Paper Note】FiBiNet论文详解
根据权重矩阵 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​⋅W⊙vj​(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=0∑m​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=1∑N​(yi​log(y^​i​)+(1−yi​)∗log(1−y^​i​))(10)

上一篇:生产环境mysql问题记录


下一篇:网络科学导论【第二章】读书脑图