Wide&Deep/DeepFM

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

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

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

Wide&Deep

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

Wide部分:基础特征和交叉特征构成的线性模型
y = w T [ x , ϕ ( x ) ] + b y=\mathrm{w}^T [\mathrm{x},\phi(\mathrm{x})]+b y=wT[x,ϕ(x)]+b
其中,基础特征 x = ( x 1 , x 2 , ⋯   , x i , ⋯   , x n ) \displaystyle\mathrm{x}=(x_1,x_2,\cdots,x_i,\cdots,x_n) x=(x1,x2,,xi,,xn),叉乘特征
ϕ ( x ) = ∏ i = 1 d x i c k i , c k i ∈ { 0 , 1 } \displaystyle\phi(\mathrm{x})=\prod\limits_{i=1}^d x^{c_{ki}}_i,c_{ki}\in\{0,1\} ϕ(x)=i=1dxickicki{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+1)=f(W(l)a(l)+b(l))
其中, a ( l ) \mathrm{a}^{(l)} a(l)第l层输入, b ( l ) \mathrm{b}^{(l)} b(l)第l层偏置, W ( l ) \mathrm{W}^{(l)} W(l)第l层权重, f f f激活函数

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

DeepFM

DeepFM采取Wide & Deep的框架,差异在于将Wide部分的LR替换为了FM,从而自动构造二阶特征叉乘,而非手工设计叉乘。FM算法负责提取一阶和二阶组合特征;DNN算法负责对输入一阶特征全连接提取高阶特征。FM和DNN共享相同输入和embedding向量,训练更高效。

左边就是刚才将的FM模型的神经网络表示,而右边的则为deep部分,为全连接的网络,用于挖掘高阶的交叉特征。整个模型共享embedding层,最后的结果就是把FM部分和DNN的部分做sigmoid:
Y = s i g m o i d ( Y F M + Y D N N ) Y=sigmoid(Y_{FM}+Y_{DNN}) Y=sigmoid(YFM+YDNN)

你可能感兴趣的:(推荐系统)