对于CTR问题,最有效的提升任务表现的策略是特征组合(Feature Interaction)
其他方法的局限:
- DNN :
由于离散特征需要使用one-hot编码处理,会导致维度猛增,可以将OneHot特征转换为Dense Vector。
通过增加全连接层可以实现高阶的特征组合,但是仍然缺少低阶的特征组合
- FNN 和PNN
结合FM和DNN两种模型,得到FNN
在FNN中加入一个product(做内积或外积)模块,得到PNN
- Wide & Deep
FNN和PNN仍然对于低阶组合特征学习的比较少,是由于DNN的全连接导致低阶特征不能在输出端有较好的表现。
所以提出了并行结构Wide&deep,但是在最后的output unit阶段,直接将
低阶和高阶特征进行组合,很容易让模型最终偏向学习到低阶或者高阶的特征,而不能做到很好的结合。
DeepFM
模型结构与原理
- FM
FM Layer是由一阶特征和二阶特征Concatenate到一起在经过一个Sigmoid得到logits
y
^
F
M
(
x
)
=
w
0
+
∑
i
=
1
N
w
i
x
i
+
∑
i
=
1
N
∑
j
=
i
+
1
N
v
i
T
v
j
x
i
x
j
\hat{y}{FM}(x) = w_0+\sum{i=1}^N w_ix_i + \sum_{i=1}^N \sum_{j=i+1}^N v_i^T v_j x_ix_j
y^FM(x)=w0+∑i=1Nwixi+i=1∑Nj=i+1∑NviTvjxixj
- Deep
Embedding层的输出是将所有id类特征对应的embedding向量concat到到一起输入到DNN中。
z
L
=
σ
(
W
L
−
1
z
L
−
1
+
b
L
−
1
)
z_L=\sigma(W_{L-1} z_{L-1}+b_{L-1})
zL=σ(WL−1zL−1+bL−1) 表示上一层的输出作为下一层的输入
y
D
N
N
=
σ
(
W
L
a
L
+
b
L
)
y_{DNN}=\sigma(W^{L}a^L+b^L)
yDNN=σ(WLaL+bL)
输出使用sigmoid激活函数激活
代码实现
思考
1 如果对于FM采用随机梯度下降SGD训练模型参数,请写出模型各个参数的梯度和FM参数训练的复杂度
训练的复杂度为 : o(bachsize * kn)
2 对于下图所示,根据你的理解Sparse Feature中的不同颜色节点分别表示什么意思
黄色节点代表该sparse feature中出现的值,而其他点则代表未在该样本中出现的值。