- 更新时间:2018/06/18
前言
这篇博文是阅读xDeepFM论文之后整理所得,论文地址为:https://arxiv.org/abs/1803.05170,以下理解都是个人想法,有疏漏请指出。
Embedding方式
首先,论文介绍了模型中Embedding的方式,对于大规模离散特征,数据稀疏,采用one-hot编码方式,对于每个属性特征分别进行one-hot编码,然后再将每一条属性链接生成输入数据。如下图所示,表示m个属性,每个属性编码生成一个e。
DCN的不足
xDeepFM主要是针对DeepFM和DCN的改进,论文中怼了一下DCN的缺点,提出了更有效的解决办法,作者称之为CIN结构。
首先说一下DCN的不足吧,DCN的网络结构如下:
大致流程是这样的:现将数据进行embedding和stacking,输入到Cross网络和Deep网络中,将两个网络的输出融合得到输出。
DCN中对Cross网络的设置有如下公式:
x
k
=
x
0
x
k
−
1
T
w
k
+
b
k
+
x
k
−
1
x_k = x_0x_{k-1}^Tw_k+b_k+x_{k-1}
xk=x0xk−1Twk+bk+xk−1 论文认为这种处理方式是有问题的,并对这个问题进行了说明:简化这个公式,去掉偏置项,可以得到:
x
k
=
x
0
x
k
−
1
T
w
k
+
x
k
−
1
x_k = x_0x_{k-1}^Tw_k+x_{k-1}
xk=x0xk−1Twk+xk−1 对于$ x_1
,
有
如
下
公
式
,有如下公式
,有如下公式$ x_1 = x_0x_0^Tw_k+x_0
合
并
可
得
到
:
合并可得到:
合并可得到: x_1 = x_0(x_0^Tw_k+1)= \alpha^1x_0KaTeX parse error: Can't use function '$' in math mode at position 4: 其中$̲\alpha^1=x_0^Tw… x_{i+1}=x_0x_iTw_{i+1}=x_0((\alphaix_0)w_{i+1})+\alphaix_0=\alpha{i+1}x_0$$ 实际上,
α
i
+
1
\alpha^{i+1}
αi+1 又是一个标量,就相当于
x
0
x_0
x0 不断乘以一个数。
CIN
于是,论文中提出了一种叫做CIN的结构,如作者所述,CIN应用向量维度,而不再是之前DCN模型的标量,每层计算的公式为:
X
h
,
∗
k
=
∑
i
=
1
H
k
−
1
∑
j
=
1
m
W
i
j
k
,
h
(
X
i
,
∗
k
−
1
⋅
X
j
,
∗
0
)
X_{h,*}^k = \sum_{i=1}^{H_{k-1}}\sum_{j=1}^m{W_{ij}^{k,h}(X_{i,*}^{k-1} \cdot X_{j,*}^0)}
Xh,∗k=i=1∑Hk−1j=1∑mWijk,h(Xi,∗k−1⋅Xj,∗0) 其中,点乘那块给出明确示例:
<
a
1
,
a
2
,
a
3
>
⋅
<
b
1
,
b
2
,
b
3
>
=
<
a
1
b
1
,
a
2
b
2
,
a
3
b
3
>
<a_1,a_2,a_3>\cdot<b_1,b_2,b_3>=<a_1b_1,a_2b_2,a_3b_3>
<a1,a2,a3>⋅<b1,b2,b3>=<a1b1,a2b2,a3b3> 。
下面上图解释这个公式:
图(a)表示刚刚的点乘过程,刚开始看的时候有点蒙,因为给出的示例比较简单,尺寸相同的直接就求积求和好了,可是图片中的尺寸却不同,于是生成了尺寸为344的
z
k
+
1
z^{k+1}
zk+1。
接下来图(b),这个就好理解了,图(a)的输出作为图(b)的输入,每层生成feature map中的一个值,有点类似全连接,最终产生
H
k
+
1
H_{k+1}
Hk+1 个feature map。
图(c)给出了CIN的结构,中间部分相当于是不同深度的图(b),生成的每个feature map都进行sum pooling,第一次见到sum pooling,想了想觉得和Max pooling差不太多,都是为了保留提取到的高阶特征,求和会将特征进行叠加吧~计算之后串联所有的sum pooling结果,通过sigmoid函数输出。
值得一提的是,论文中设置的这种网络的拓扑结构和胶囊网络(CapNets)、循环神经网络(RNN)有类似之处。
再之后就是一些分析,结果对比啥的了。。看那个对比结果可知两个结构层数不需要多深也可以得到很好的效果。