赞
踩
什么时候需要考虑DeepFM
基于CTR预估的推荐系统,究其根本,其实是学习到用户点击行为背后隐含的特征组合。在各种各样的推荐场景中,低阶特征组合或者高阶的特征组合都会对最终用户的行为产生影响。
之前介绍的FM通过对每一维特征的隐变量内积提取特征组合,最终结果还算不错。
虽然理论上FM可以对高阶特征组合进行建模,可是因为计算复杂度的原因一般到二阶的特征组合就结束。
那么高阶特征该怎么办呢,此时你应该会和很多大牛的想法一样,通过多层的神经网络去解决。
以下图片内容参考自张俊林教授在AI大会上的分享
我们知道,对于离散特征的处理,一般都是把特征转换为one-hot编码形式,不过把one-hot编码类型的特征输入到DNN中,会导致网络参数过多:
就如上图,从输入层到隐藏层,将会产生50亿的参数。
解决上面这个问题的方法是:把特征分为不同的field,从one-hot变成dense vector:
然后再添加两层全连接层,让其和dense vector进行组合,此时高阶特征的组合就搞定了
不过上面方式把低阶和高阶特征组合隐含的体现在隐藏层中,如果我们希望把低阶特征组合单独建模,然后融合高阶特征组合。又该怎么做呢?
此时,我们能想到的就是把
DNN与FM进行一个合理的融合:
二者的融合总的来说有两种形式,一是串行结构,二是并行结构。
融合方式一:并行结构
融合方式二:串行结构
而我们今天要讲到的DeepFM,就是并行结构中的一种典型代表。
究竟什么是DeepFM算法
DeepFM是2017年华为诺亚方舟实验室发表的一篇论文。
论文链接:https://arxiv.org/pdf/1703.04247.pdf
DeepFM整体结构:
根据上图,我们把图像分成左半部分和右半部分,其实**这也就是DeepFM包含的两部分:DNN部分和FM部分,其中DNN部分负责高阶特征的提取,FM部分负责低阶特征的提取。**这两部分共享同样的输入。
接下来,我们从下往上,分别看一下组成DeepFM的各个部分。
架构间参数的传递,有几处需要注意,尤其是上面标记红色圈中部分。
FM的计算公式,我们在之前文章中讲过,此处拿来直接使用:
y
^
(
x
)
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
∑
i
=
1
n
∑
j
=
i
+
1
n
<
v
i
,
v
j
>
x
i
x
j
\hat{y}(x) = w_0+\sum^{n}_{i=1}{w_ix_i}+\sum^{n}_{i=1}{\sum^{n}_{j=i+1}{<v_i,v_j>x_ix_j}}
y^(x)=w0+i=1∑nwixi+i=1∑nj=i+1∑n<vi,vj>xixj
上公式中,第一项和第二项公式对应上面标圈部分1的内容,即:
w
0
+
∑
i
=
1
n
w
i
x
i
w_0+\sum^{n}_{i=1}{w_ix_i}
w0+i=1∑nwixi
公式中第三项公式对应上面标圈部分2的内容,即:
∑
i
=
1
n
∑
j
=
i
+
1
n
<
v
i
,
v
j
>
x
i
x
j
\sum^{n}_{i=1}{\sum^{n}_{j=i+1}{<v_i,v_j>x_ix_j}}
i=1∑nj=i+1∑n<vi,vj>xixj
DNN是一个前馈神经网络。与图像或者语音这类输入不同,图像语音的输入一般是连续而且密集的,然而用于CTR的输入一般是极其稀疏的。因此需要重新设计网络结构。具体实现中为,在第一层隐含层之前,引入一个嵌入层来完成将输入向量压缩到低维稠密向量。
嵌入层(embedding layer)的结构如上图所示。当前网络结构有两个特性:
最后,上DeepFM中FM和DNN预测结果的输出方式:
y
^
=
s
i
g
m
o
i
d
(
y
F
M
+
y
D
N
N
)
\hat{y}=sigmoid(y_{FM}+y_{DNN})
y^=sigmoid(yFM+yDNN)
DeepFM怎么使用
推荐百度官方基于paddlepaddle实现框架:
Ps:参考readme运行一遍就搞定。
资料一:https://arxiv.org/pdf/1703.04247.pdf
资料二:https://zhuanlan.zhihu.com/p/67795161
资料三:http://wiki.baidu.com/pages/viewpage.action?pageId=765563246
资料四:https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/ctr/deepfm_dygraph
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。