key word:
学术论文
Motivation: 传统的
Embedding&MLP
算法是通过内积和Hadamard product实现特征交互的,这篇文章的作者提出了采用SENET
实现动态学习特征的重要性;作者认为简单的内积和Hadamard product无法有效对稀疏特征进行特征交互,因此提出bilinear function
实现特征交互,提出了FIBINET
preface: 笔者认为这篇文章没有多大的模型创新点,本质上就是使用了
SENET
和内积与Hadamard product的融合实现
一、模型设计
SENET
实现动态学习特征重要性,包括三个部分:
squeeze step
,excitation step
andre-weight step
,为了方便学习,笔者将这一过程更直观的展示出来
Squeeze step
:对每个field
实现mean pooling操作【原来SENET模型是采用max pooling操作】,得到一个标量值,每一个field
对应一个标量值,最后输出的向量维度: 1 × f i e l d 1 \times field 1×field;excitation step
:将得到的标量向量经过两层全连接层,第一层先实现维度减小,第二层FC层再还原原来的维度从而得到每个field
的权重值;re-weight step
:最后将得到的权重值与初始输入的embedding进行加权,从而提高重要特征的重要性,减少不相关特征的重要性;
Bilinear-Interaction Layer
本质上就是对内积和Hadamard product的融合,作者提出了三种不同
field
的融合形式
一般性融合的形式化表达:
p
i
j
=
v
i
⋅
W
⊙
v
j
p_{ij}=v_i ·W \odot v_j
pij=vi⋅W⊙vj
其中,
v
i
,
v
j
v_i,v_j
vi,vj表示不同field
的embedding,而
W
W
W的不同设计决定了三种不同的融合形式:
- Field-All Type
所有
field
共有同一个 W W W
- Field-Each Type
每个
field
都有一个 W W W,共有field
个
p i j = v i ⋅ W i ⊙ v j p_{ij}=v_i ·W_i \odot v_j pij=vi⋅Wi⊙vj
- Field-Interaction Type
每个
field
和其他不同的field
都有一个 W W W,共有field
× \times ×field
个
p i j = v i ⋅ W i j ⊙ v j p_{ij}=v_i ·W_{ij} \odot v_j pij=vi⋅Wij⊙vj
❓ 为什么作者把这个模块称为bilinear-interaction layer
作者对原始Embedding和经过
SENET
的Embedding都进行了融合field
,得到 p = [ p 1 , p 2 , . . . , p n ] , q = [ q 1 , q 2 , . . . , q n ] p=[p_1,p_2,...,p_n],q=[q_1,q_2,...,q_n] p=[p1,p2,...,pn],q=[q1,q2,...,qn]两个向量,并对两个向量实现concat操作合成一个新的向量 F c o n c a t ( p , q ) F_{concat}(p,q) Fconcat(p,q)
Output Layer
- 简单形式:直接对 F c o n c a t ( p , q ) F_{concat}(p,q) Fconcat(p,q)向量求和并通过 s i g m o i d sigmoid sigmoid函数;
- 复杂形式:再经过神经网络进行预测输出;
二、实验
实验数据集:
Criteo2 dataset
:90%作为训练集
Avazu
:80%作为训练集
评价指标
AUC
Log loss