代码角度分析DeepFM
DeepFM架构
embedding+Factorization machines(FM)+Deep
程序中的输出
很明显,又两个部分组成FM+DEEP
FM
前者由y_first_order与y_second_order组成(对应FM的两个部分)维度分别为特征下标与embedding矩阵的size
DEEP
由多层FC组成维度为最后一层的神经元个数(参数)
(None-BATCHSIZE)
self.out
由上面两个部分拼接后进行一个线性回归得到最终的解
数据集
Xi
一个field代表一个特征,具体值影响one-hot
len(xi[0])相当于特征个数(如特征颜色)
xi[0][0]相当于这个特征+值(构建字典…)所对应的feature
(应该是这样理解)
Xv
上面feature对应的值
(个人感觉主要考虑到有连续的属性所以加了此项)
y
标签
过程
embeddings
基于Xi的值feature,进行一个embedding
(相当于构建一个矩阵feature-size*embedding-size)
基于具体feature找行得到len(xi[0])*embedding-size
再与xv,进行tf.multiply得到embedding层的输出
y_first_order
FM的线性回归过程,未使用embeddings
y_second_order
FM的后面过程
(why=-)
Deep
对embeddings后的数据拉伸为一维进行全连接层的叠加
loss
self.out是一维数据(二分类CTR)
参考
https://github.com/ChenglongChen/tensorflow-DeepFM