论文链接:
https://arxiv.org/pdf/1606.07792.pdf
主要内容
提到CTR预估,最经典的应该是LR模型了,LR模型简单、快速并且模型具有可解释,有着很好的拟合能力,但是LR模型是线性模型,表达能力有限,泛化能力较弱,需要做好特征工程,尤其需要交叉特征,才能取得一个良好的效果,然后工业中,特征的数量会很多,可能达到成千上万,甚至数十万,这时特征工程就很难做,并且特征工程是一项很枯燥乏味的工作,搞得算法工程师晕头转向,还不一定能取得更好的效果。
DNN模型不需要做太精细的特征工程,就可以取得很好的效果,已经在很多领域开始应用了,DNN可以自动交叉特征,学习到特征之间的相互作用,尤其是可以学到高阶特征交互,具有很好的泛化能力。另外,DNN通过增加embedding层,可以有效的解决稀疏数据特征的问题,防止特征爆炸。推荐系统中的泛化能力是很重要的,可以提高推荐物品的多样性,但是DNN在拟合数据上相比较LR会较弱。
为了提高推荐系统的拟合性和泛化性,可以将LR和DNN结合起来,同时增强拟合能力和泛化能力,wide&deep就是将LR和DNN结合起来,wide部分就是LR,deep部分就是DNN,将两者的结果组合进行输出。
WDL将wide linear model 和deep neural network 结合起来,一起训练。WDL模型的优势在于同时获得了wide模型的memorization(“记忆”)能力,和deep模型的generalization(“泛化”)能力。
1)什么是“记忆”能力和“泛化”能力
Memorization can be loosely defined as learning the frequent co-occurrence of items or features and exploiting the correlation available in the historical data.
“记忆”能力是指对历史数据集中已经出现过的特征、特征关联及其与label之间关系进行很好的学习。即对历史数据中已经出现过的模式进行很好的学习。
Generalization, is based on transitivity of correlation and explores new feature combinations that have never or rarely occurred in the past.
“泛化”能力指能将从历史数据集中学到的模式迁移,用于对包含未出现特征组合的样本进行预测。
(2)为什么wide模型的“记忆”能力强?deep模型的“泛化”能力强?
wide模型以逻辑回归(LR)模型为例,deep模型以深度神经网络为例。
主要差异在于两者的特征组合能力不一样。
LR是属于广义线性模型,本身不具备对特征之间非线性关系进行建模。所以通过人工构建特征组合(交叉特征)的方式来给LR模型增加非线性建模能力。
可以看出来人工构建组合特征,主要基于历史数据集中已经出现过的特征取值组合,而对于未出现过的特征取值组合没有办法构建组合特征。所以LR模型具备很好的记忆能力,但没有泛化能力。
深度神经网络模型无需人工构建组合特征,有自动做特征组合的能力。而且由于加入非线性的激活函数,神经网络模型具备非线性建模能力。神经网络模型的泛化能力除了因为它自动特征组合的能力,还因为它对类别特征的取值做embedding。这样,由于embedding的特性,即使没出现过的特征取值组合,神经网络模型也可以计算得到组合特征的值。
P ( Y = 1 ∣ x ) = σ ( w w i d e T [ x , ϕ ( x ) ] + w d e e p T a ( l f ) + b ) P(Y=1 | \mathbf{x})=\sigma\left(\mathbf{w}_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{d e e p}^{T} a^{\left(l_{f}\right)}+b\right) P(Y=1∣x)=σ(wwideT[x,ϕ(x)]+wdeepTa(lf)+b)
wide部分
wide部分就是LR模型,传统的LR模型:
用X=[x1,x2,x3,…,xd]X=[x1,x2,x3,…,xd]表示一个有d个特征的样本,W=[w1,w2,w3,…,wd]W=[w1,w2,w3,…,wd]表示模型的参数,b表示bias,y表示预测值,有 y=W*X+b
在实际中往往需要交叉特征,对于这部分定义如下
ϕ
k
(
X
)
=
∏
i
=
1
d
x
i
C
k
i
,
c
k
i
∈
0
,
1
\phi_{k}(X)=\prod_{i=1}^{d} x_{i}^{C_{k i}}, c_{k i} \in 0,1
ϕk(X)=i=1∏dxiCki,cki∈0,1
用ϕk表示第k个交叉特征,Cki表示是第k个交叉特征的一部分。
最终的wide部分为
y
=
W
T
X
+
b
+
∑
k
=
1
N
w
d
+
k
ϕ
k
y=W^{T} X+b+\sum_{k=1}^{N} w_{d+k} \phi_{k}
y=WTX+b+k=1∑Nwd+kϕk
Deep部分
我觉得没什么好讲的。。。
a
l
+
1
=
f
(
W
l
a
l
+
b
l
)
a^{l+1}=f\left(W^{l} a^{l}+b^{l}\right)
al+1=f(Wlal+bl)
WDL模型与ensemble的区别
本文将wide模型和deep模型联合训练不同于一般的模型融合(ensemble)。
ensemble时,单个的基模型在训练的时候是彼此独立的。只有在做预测的时候,才将多个基模型的预测结果进行融合得到最终的预测结果。
WDL是将wide模型和deep模型作为一个整体进行训练,意味着同步用反向传播技术更新wide模型和deep模型的参数
WDL训练方式
wide&deep模型中,wide部分和deep部分是同时训练的,不需要单独训练任何一部分。GBDT+LR模型中GBDT需要先训练,然后再训练LR,两部分具有依赖关系,这种架构不利于模型的迭代。
Join training和ensemble training的区别:
(1)ensemble中每个模型需要单独训练,并且各个模型之间是相互独立的,模型之间互相不感知,当预测样本时,每个模型的结果用于投票,最后选择得票最多的结果。而join train这种方式模型之间不是独立的,是相互影响的,可以同时优化模型的参数。
(2)ensemble的方式中往往要求存在很多模型,这样就需要更多的数据集和数据特征,才能取得比较好的效果,模型的增多导致难以训练,不利于迭代。而在wide&deep中,只需要两个模型,训练简单,可以很快的迭代模型。
参考链接
https://www.jianshu.com/p/976a8d94172b
https://blog.youkuaiyun.com/guozhenqiang19921021/article/details/80871641