从这篇文章开始我想陆续写一些关于推荐系统的深度学习论文笔记总结,首先介绍Google的这篇Wide & Deep模型(Paper传送门)。
一、摘要
利用泛化线性模型和非线性特征变换来处理大规模回归和分类问题很常见,文章引入Memorization和Generalization,其中Memorization是指利用特征的交互,这里是wide部分,具有可解释性;Generalization部分是指对那些没有见过的训练集特征组合,利用Embedding来学习到这些稀疏特征;DNN部分可以提高推荐系统的新颖性,也就是推荐一些用户-商品交互少但是排名很高的物品,但是这会导致过拟合,所以使用Wide & Deep相结合。
二、介绍
推荐系统可看作是搜索排序系统,比如把输入的Query当作一个用户和上下文的集合,输出是排序好的商品,那么也就存在上述的两个问题:Memorization和Generalization;Memorization是对历史数据的观察,是学习频繁出现的商品的交互;Generalization是探索那些在过去很少出现的商品,提高推荐的新颖性;
为什么LR很受欢迎:简单、可扩展、解释性好,通常其输入是Sparse的,但是对于很少出现的组合特征泛化性就不行了;所以使用Embedding-based models,学习出每个Query和Item的隐向量,并且这个是只需要很少的特征工程的;简单的说,就是DNN部分的Embedding会导致稀疏的过拟合,通过引入Wide部分,可以记住用户常见的喜欢物品类型,两者相结合;
三、Wide & Deep
Wide & Deep 模型示意图如下:
其中Wide部分做的工作就是
y
=
w
T
x
+
b
{\rm{y}} = {w^T}x + b
y=wTx+b,x是输入向量,但是这里x存在交互特征,也就是
ϕ
k
(
x
)
{\phi _k}(x)
ϕk(x)是对x的变换,举个例子来说,增加这一列特征"AND(性别=男,语言=英语)",也就是说两个同时满足,对应的才是1,否则是0;
Deep部分是一个前馈神经网络,对于类别特征,比如(语言=英语)转换成Embedding向量,维度通常是10-100维,随机初始化且通过BP反向传播来训练参数,然后输入给隐层,
a
(
l
+
1
)
=
f
(
w
(
l
)
a
(
l
)
+
b
(
l
)
)
{a^{(l + 1)}} = f({w^{(l)}}{a^{(l)}} + {b^{(l)}})
a(l+1)=f(w(l)a(l)+b(l))
最后Wide部分和Deep部分通过不同权重相加并作Sigmoid变换;这里文章提到该模型和Ensemble的区别,也就是该模型是联合训练的,而Emsemble是分开训练的,小数据集是联合训练的模型更好;
对于试验阶段:Wide部分使用FTRL模型+L1正则化,Deep部分使用AdaGrad最优化方法,最终的结果预测公式:
P
(
Y
=
1
∣
X
)
=
σ
(
W
w
i
d
e
T
[
x
,
ϕ
(
x
)
]
+
W
d
e
e
p
T
a
(
l
)
+
b
)
P(Y = 1|{\rm{X}}) = \sigma ({W_{wide}}^T[x,\phi (x)] + {W_{deep}}^T{a^{(l)}} + b)
P(Y=1∣X)=σ(WwideT[x,ϕ(x)]+WdeepTa(l)+b)
四、仿真
特征处理:对于类别特征需要去除低频,连续特征通过累积分布函数CDF映射到[0,1],分成
n
q
n_q
nq个分位数,然后对于第i个分位数,归一化的值是
i
−
1
n
q
−
1
{{i - 1} \over {{n_q} - 1}}
nq−1i−1(这里做的归一化貌似不同);
模型训练的过程如下图:
其中Embedding维数是32维,然后拼接起来所有的Embedding,最后通过3个Relu层,原文说使用5000亿个数据训练…然后直接训练太难,采用暖启动(线性模型采用原来的模型权重初始化等);最终结果如下:
线下没啥提升,线上提升贼大,原文的解释是impression和label在离线阶段是固定的,然而在在线阶段可以综合Memorization和Generalization来探索新的推荐;
注:本文的图片全部来自于上述Paper。