本文介绍谷歌于2016年提出的Wide&Deep模型,它兼具记忆能力与泛化能力,在谷歌商店的app推荐中效果显著。

Wide&Deep由记忆能力较强的Wide部分和泛化能力较强的Deep部分组成,接下来我们分别介绍这两部分,然后将它们组合起来,得到Wide&Deep.

Wide

Wide部分是一个(广义)线性模型,比如逻辑回归,具有较强的记忆能力。
Alt text

输入这种模型的特征可以通过交互产生新的有用特征,然后将这些新的特征与原始特征共同输入模型进行预测。

举个栗子,假设输入逻辑回归模型的特征中含有”已安装应用,在应用商店看到的应用”这俩特征,那么我们可以根据这俩特征得到一个新的交互特征:”已安装应用=xxx 并且 在应用商店看到的应用=yyy”.

使用上述方法构造特征,训练模型。当待预测的样本特征中也含有类似上述交互特征时,由于在训练集中存在相同特征,那么模型就能很快定位到训练集中出现相同模式时的标签。

假设训练集中出现”已安装应用=Youtube 并且 在应用商店看到的应用=facebook”这一交互特征,也就是说,用户安装了Youtube,并且在应用商店中看到了Facebook,那么我们可以统计该样本对应的标签(是否安装看到的Facebook),得到两者的共现频率,若共现频率达到某一设定阈值,那么在预测时,如果待预测的样本中出现了”已安装应用=Youtube 并且 在应用商店看到的应用=facebook”,那么就可以认为该用户会安装看到的Facebook,这就是所谓的记忆能力。

Wide部分使用如下公式构造交互特征,这被称为cross-product transformation:
Alt text

$d$是输入Wide部分的总特征数。

当第i个特征不构成第k个交互特征时,$c_{ki}=0$,反之为1。

线性模型通常输入one-hot形式的类别特征,比如对于如下的交互特征:AND(gender=female, language=en)

只有当gender=female 且 language=en时,AND(gender=female, language=en) 的值才是1,其余情况都是0.

尽管线性模型具有较强的记忆能力,但是,如果测试样本中出现模型从而见过的某种模式(训练集中不曾有),那么就可能束手无策了。

面对新事物时无法正确做出决策,这意味着线性模型的泛化能力不足。

Deep

Deep部分就是深层神经网络,它由多个全连接层+激活函数堆叠而成。
Alt text

它可以将稀疏的类别变量的One-Hot形式使用Embedding编码,从而使得稀疏向量稠密化。因此,Deep部分拥有较强的泛化能力。

尽管如此,当一些待推荐的物品比较小众,或者用户的品味十分独特时,对应的共现矩阵相应位置是非常稀疏的,但由于有Embedding的存在,导致Embedding后的向量中多数位置非零,于是会推荐一些不相关的物品,模型出现了过度泛化。此时,还不如直接根据线性模型的记忆能力进行推荐。

Wide&Deep

既然(广义)线性模型具有较强的记忆能力,而深层的神经网络具有较强的泛化能力,那不如将两者结合起来,以获得更好的推荐效果,于是,Wide&Deep诞生了。
Alt text

Wide&Deep的前向传播过程如下:
Alt text

可以看到,在Wide部分,将原始特征$x$和交互特征$\phi(x)$拼接在一起,输入到Wide,$W_{wide}$是Wide部分对应的模型权重;在Deep部分,直接将特征做Embedding,然后经过堆叠的全连接层+激活函数,$W_{deep}$是Deep部分对应的模型权重

最终,将两部分的输出一起输入最后的输出层,对于CTR预估问题,输出层一般是$Sigmoid$.

作者在论文中也给出了一个具体应用Wide&Deep的例子,此时的网络结构如下:
Alt text

它被用于谷歌商店为用户推荐app的环节。

在Deep部分,其中的数值型特征无需编码,类别特征经过Embedding,两者拼接起来,得到的向量大概是1200维,将其输入到后续全连接层+激活函数;在Wide部分,只使用了User Installed App 和Impression App,即用户已安装应用和被曝光的应用。

以上便是Wide&Deep的介绍。在具体使用时,还需要根据具体的应用场景,灵活选取输入Wide和Deep部分的特征。网上有贝壳找房在2019年末发布的Wide&Deep在他们业务中的应用,想了解的小伙伴可以看参考资料[3].

参考资料: