提出动机
deep crossing是微软bing ad团队提出的,用来解决大规模特征组合问题的模型,避免了人工进行特征组合,并使用了当年提出的残差神经网络。模型主要结构如下(搞不懂这图为啥画的这么随意)。
主要分为embedding layer,stacking layer,residual unit 和scoring layer。
deep crossing模型中输入的部分用得是原始的单个特征,不进行手动特征组合,完全靠模型自己去学。
Embedding layer
对于sparse特征x,通过embedding方式将其转化为dense特征,表达式如下:
X
j
O
=
max
(
0
,
W
j
X
j
I
+
b
j
)
X_{j}^{O}=\max \left(\mathbf{0}, \mathbf{W}_{j} X_{j}^{I}+\mathbf{b}_{j}\right)
XjO=max(0,WjXjI+bj)这里
X
j
表
示
第
j
个
特
征
X_{j}表示第j个特征
Xj表示第j个特征,
W
j
W_{j}
Wj表示的j个特征对应filed的参数矩阵,没理解错的话作者通过将特征分成不同的field,来减少embedding层的参数。
论文中作者提到了一种场景,对于维度非常高的特征,比如CampaignID(一个ID是一个推广计划,一个推广计算中有若干个广告)有数万种,可以将这些CampaignID按照历史的点击率(所有在一起算不区分用户)进行排名,选前n个特征比如前1000个,保留其真实值,剩下的若干个算作others,特征值用统计特征比如平均点击率。
Stacking layer
通过将embedding的结果横向拼接得到stacking层的结果:
X
O
=
[
X
0
O
,
X
1
O
,
⋯
,
X
K
O
]
X^{O}=\left[X_{0}^{O}, X_{1}^{O}, \cdots, X_{K}^{O}\right]
XO=[X0O,X1O,⋯,XKO]作者将sparse特征embedding到256维向量上,而对于维度不到256维的特征,直接添加到stacking层即可,如上图中的Feature #2。
Residual unit
残差单元示意如下,当年(2016)年何凯明大神提出,使得深层神经网络至少能与浅层神经网络相持平。
表达式为
X
O
=
F
(
X
I
,
{
W
0
,
W
1
}
,
{
b
0
,
b
1
}
)
+
X
I
X^{O}=F\left(X^{I},\left\{W_{0}, W_{1}\right\},\left\{b_{0}, b_{1}\right\}\right)+X^{I}
XO=F(XI,{W0,W1},{b0,b1})+XI
Scoring layer
该层利用交叉熵作为损失函数,可以替换为其他任意的损失函数
logloss
=
−
1
N
∑
i
=
1
N
(
y
i
log
(
p
i
)
+
(
1
−
y
i
)
log
(
1
−
p
i
)
)
\text {logloss}=-\frac{1}{N} \sum_{i=1}^{N}\left(y_{i} \log \left(p_{i}\right)+\left(1-y_{i}\right) \log \left(1-p_{i}\right)\right)
logloss=−N1i=1∑N(yilog(pi)+(1−yi)log(1−pi))
小结
该模型在当时用了特征拼接以及当时的残差单元,虽然现在看来很一般,不过论文对不同特征按照filed来使用参数矩阵,以及对基数巨多的特征的一些特殊处理还是非常值得借鉴的