Wide&Deep/DeepFM

基于DNN的推荐算法引入背景

推荐系统的一大挑战是同时具备”记忆能力“和”泛化能力“。
”记忆能力“:学习那些经常同时出现的特征,发觉历史数据中存在的共现特性。
”泛化能力“:基于迁移相关性,探索之前几乎没出现过的新特征组合。

基于嵌入的模型(FM)对之前没出现过的特征具备二阶泛化能力,即为每个query和item特征学习一个低维稠密的嵌入向量。但FM很难有效学习低维表示,当query-item矩阵稀疏且高秩时,稠密嵌入会给所有item-query带来非零预测,可能过度泛化/给出完全不相关的推荐。

Wide&Deep

联合训练一个线性模型组件和一个深度神经网络组件得到Wide&Deep模型,该模型的Wide部分具备记忆能力,Deep部分具备泛化能力。
Wide&Deep/DeepFM

Wide部分:基础特征和交叉特征构成的线性模型
y=wT[x,ϕ(x)]+by=\mathrm{w}^T [\mathrm{x},\phi(\mathrm{x})]+b
其中,基础特征x=(x1,x2, ,xi, ,xn)\displaystyle\mathrm{x}=(x_1,x_2,\cdots,x_i,\cdots,x_n),叉乘特征
ϕ(x)=i=1dxickicki{0,1}\displaystyle\phi(\mathrm{x})=\prod\limits_{i=1}^d x^{c_{ki}}_i,c_{ki}\in\{0,1\}

Deep部分:将一些sparse特征(e.g. ID类特征)转换成低维稠密向量,然后和一些原始dense特征一起作为网络的输入;**函数是Relu的前馈神经网络
a(l+1)=f(W(l)a(l)+b(l))\mathrm{a}^{(l+1)}=f(\mathrm{W}^{(l)}\mathrm{a}^{(l)}+\mathrm{b}^{(l)})
其中,a(l)\mathrm{a}^{(l)}第l层输入,b(l)\mathrm{b}^{(l)}第l层偏置,W(l)\mathrm{W}^{(l)}第l层权重,ff**函数

Wide&Deep联合预测输出:联合训练的Wide部分只需要作一小部分的特征叉乘来弥补Deep部分的不足,不需要一个full-size 的wide 模型。在论文中,作者通过梯度的反向传播,使用 mini-batch stochastic optimization 训练参数,并对wide部分使用带L1正则的Follow- the-regularized-leader (FTRL) 算法,对deep部分使用 AdaGrad算法。
P(y=1x)=sigmoid(wWideT[x,ϕ(x)]+wDeepTalf+b)P(y=1|\mathrm{x})=sigmoid(\mathrm{w}^T_{Wide}[\mathrm{x},\phi(\mathrm{x})]+\mathrm{w}^T_{Deep}\mathrm{a}^{l_f} + b)
其中,alf\mathrm{a}^{l_f}是NN最后一层**值。

DeepFM

DeepFM采取Wide & Deep的框架,差异在于将Wide部分的LR替换为了FM,从而自动构造二阶特征叉乘,而非手工设计叉乘。FM算法负责提取一阶和二阶组合特征;DNN算法负责对输入一阶特征全连接提取高阶特征。FM和DNN共享相同输入和embedding向量,训练更高效。
Wide&Deep/DeepFM
左边就是刚才将的FM模型的神经网络表示,而右边的则为deep部分,为全连接的网络,用于挖掘高阶的交叉特征。整个模型共享embedding层,最后的结果就是把FM部分和DNN的部分做sigmoid:
Y=sigmoid(YFM+YDNN)Y=sigmoid(Y_{FM}+Y_{DNN})
Wide&Deep/DeepFM