Wide&Deep:
推荐下面的参考资料,讲解非常详细,包括自己对于Wide&Deep和推荐系统的看法。
1. Wide&Deep论文的贡献:
- 联合训练Wide&Deep框架,分别为带有Embedding层的前向NN和带有特征变换的线性模型;
- 在Google Play进行实现和应用,作者进行了AB测试,相比Wide模型带来了3.9%的提升;
- TensorFlow开源实现;
(这个贡献我也是醉了)
2. 搜索推荐任务想要解决的两个问题:
- Memorization(记忆能力):
记忆能力定义为了解物品或特征的共现频率,以及探索历史数据中的潜在关系。类比人类自己,可以认为是,日常中认识,记忆知识和常识的过程。 - Generalization(泛化能力):
模型能够基于现有联系,来探索新的特征组合,即使这些在过去很少或者从未出现。可以类别是一种推理能力。
3. Wide&Deep整体框架是什么:
Wide&Deep由两部分构成,左边的Wide部分,也就是一个我们常见的线性模型,可以认为是LR。右边是Deep部分,也就是NN,将类别特征的Embedding输入,然后经过一系列隐藏层。Wide和Deep部分后面拼接在一起,一起联合训练。
其实这个图和Google最终采用的结构不同,可以借助此图意会,很多教程拿这个图讲解,其实并不精确。
4. Wide部分详细是什么:
Wide部分也就是上图的左边,可以认为是一个泛华的线性模型,线性模型形式为: y = w T x + b y = w^Tx + b y=wTx+b
- y y y:预测输出;
- x = [ x 1 , x 2 , . . . x d ] x=[x_1, x_2,...x_d] x=[x1,x2,...xd]:d维的特征向量;
- w = [ w 1 , w 2 , . . . w d ] w = [w_1, w_2,...w_d] w=[w1,w2,...wd]:模型参数;
- b b b:偏差
Wide的输入,除了原始特征,还包括一些转换的联合交叉特征(Cross-product transformation features),可以定义为:
ϕ
k
(
x
)
=
∏
i
=
1
d
x
i
c
k
i
c
k
i
∈
{
0
,
1
}
\phi_{k}(\mathbf{x})=\prod_{i=1}^{d} x_{i}^{c_{k i}} \quad c_{k i} \in\{0,1\}
ϕk(x)=i=1∏dxickicki∈{0,1}
也就是我们常见的特征工程中的交叉特征。其实最终Google的实现和部署仅仅采用了User Installed App
和Impression App
这两个特征。不过在实际应用中,我们可以自行尝试其他的特征交叉,但是可能会使维度很大。
5. Deep部分详细是什么:
Deep部分即上图的右边,是一个前馈神经网络。输入是类别特征,每一个稀疏高纬的稀疏特征首先转换为低纬的稠密实值嵌入向量,嵌入向量的维度一般在 O ( 10 ) O(10) O(10)到 O ( 100 ) O(100) O(100)数量级。嵌入向量首先被随机初始化,然后通过最小化损失函数训练模型,和模型的其他参数一样来进行训练。
这部分和NLP中词嵌入向量几乎是完全一样的,在word2vec等预训练词向量出现之前,就是对模型进行随机初始化,然后利用模型来进行训练。
6. Wide&Deep是如何联合训练的:
模型将Wide部分和Deep部分拼接(Concat)在一起,然后通过BP进行联合训练,实验中使用了
L
1
L1
L1正则化,以及AdaGrad优化算法。模型的最终预测输出为:
P
(
Y
=
1
∣
x
)
=
σ
(
w
w
i
d
e
T
[
x
,
ϕ
(
x
)
]
+
w
deep
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}_{\text {deep}}^{T} a^{\left(l_{f}\right)}+b\right)
P(Y=1∣x)=σ(wwideT[x,ϕ(x)]+wdeepTa(lf)+b)
- Y Y Y:二分类标签;
- σ \sigma σ:sigmoid激活函数;
- ϕ ( x ) \phi(x) ϕ(x):交叉特征变换;
- w w i d e w_{wide} wwide:wide模型参数向量;
- w d e e p w_{deep} wdeep:deep部分的参数;
7. 模型的输入是什么:
此处给出推荐系统的流程概览:
模型的数据输入,分为类别特征和数值特征,两个分开进行考虑。
对于类别特征,将其转化为ID,建立一个字典存储。
对于连续的实值特征,进行归一化到
[
0
,
1
]
[0,1]
[0,1]区间。此处并没有采用常见的的MinMacScaler和StandScaler。而是得到x的累积分布,然后根据分位值求解。第
i
i
i分位值,归一化后之的值为
i
−
1
n
q
−
1
\frac{i-1}{n_q-1}
nq−1i−1。
8. 模型的具体结构:
看这个图要清晰的多,输入输出分别是什么,交叉特征是什么,Deep部分和Wide部分到底是什么拼接的。
模型的输入依然是前面讲过的,Wide部分的输入是全部的原始特征和交叉特征(只有User Installed APP和Impression APP这两个特征),Deep部分是全部的类别特征。类比特征嵌入到大小为32的稠密向量中。
数值型特征和Embedding层,拼接在一起得到一个大约1200维的稠密向量,再经过三层全连接得到输出。
参考资料:
Paper-Wide & Deep Learning for Recommender Systems
计算广告CTR预估系列(四)–Wide&Deep理论与实践
Wide and Deep on TensorFlow (notebook style)
Wide and Deep on Pytorch
pytorch-widedeep