论文链接:
https://arxiv.org/pdf/1703.04247.pdf
主要内容
DeepFM结合了FM与Deep Learning,进行了特征自动提取,利用了FM难以有效利用的高阶特征。
借助FNN的思想,利用FM进行embedding,之后的wide和deep模型共享embedding之后的结果。DNN的输入完全和FNN相同(这里不用预训练,直接把embedding层看作一层的NN),而通过一定方式组合后,模型在wide上完全模拟出了FM的效果,最后将DNN和FM的结果组合后激活输出。
DeepFM输出为:
y
^
=
sigmoid
(
y
F
M
+
y
D
N
N
)
\hat{y}=\operatorname{sigmoid}\left(y_{F M}+y_{D N N}\right)
y^=sigmoid(yFM+yDNN)
FM部分
y
F
M
=
⟨
w
,
x
⟩
+
∑
j
1
=
1
d
∑
j
2
=
j
1
+
1
d
⟨
V
i
,
V
j
⟩
x
j
1
⋅
x
j
2
y_{F M}=\langle w, x\rangle+\sum_{j_{1}=1}^{d} \sum_{j_{2}=j_{1}+1}^{d}\left\langle V_{i}, V_{j}\right\rangle x_{j_{1}} \cdot x_{j_{2}}
yFM=⟨w,x⟩+j1=1∑dj2=j1+1∑d⟨Vi,Vj⟩xj1⋅xj2
DNN部分
依然采用了全连接的深度神经网络的方式,只是在最后激活输出时,会对FM和DNN的结果一起做embedding
y
D
N
N
=
σ
(
W
∣
H
∣
+
1
⋅
a
H
+
b
∣
H
∣
+
1
)
y_{D N N}=\sigma\left(W^{|H|+1} \cdot a^{H}+b^{|H|+1}\right)
yDNN=σ(W∣H∣+1⋅aH+b∣H∣+1)
a
(
l
+
1
)
=
σ
(
W
(
l
)
a
(
l
)
+
b
(
l
)
)
a^{(l+1)}=\sigma\left(W^{(l)} a^{(l)}+b^{(l)}\right)
a(l+1)=σ(W(l)a(l)+b(l))
a
(
0
)
=
[
e
1
,
e
2
,
…
,
e
m
]
a^{(0)}=\left[e_{1}, e_{2}, \ldots, e_{m}\right]
a(0)=[e1,e2,…,em]
DeepFM至少有以下几个优点:
1)它不需要任何预训练;
2)它学习高阶和低阶特征交互;
3)引入了特征嵌入的共享策略,以避免特征工程。
具体编码什么的详见论文吧……
参考链接:
https://blog.csdn.net/u010352603/article/details/80201033
https://blog.csdn.net/zynash2/article/details/79348540
https://blog.csdn.net/songbinxu/article/details/80099969
https://blog.csdn.net/qq_35564813/article/details/86022277