Wide & Deep Google’16
Google 16年发布的论文,并应用在Google Play上,影响力较大,其他厂商也仿照了。
首先理解Wide和Deep的含义是什么
Wide部分(Memorization)
Wide部分其实就是一个线性模型
y = w T [ x , ϕ ( x ) ] + b y=\boldsymbol{w}^{T}[\boldsymbol{x}, \phi(\boldsymbol{x})]+b y=wT[x,ϕ(x)]+b
其中 x , ϕ ( x ) \boldsymbol{x}, \phi(\boldsymbol{x}) x,ϕ(x)分别表示原始特征和叉乘特征。叉乘特征是将两个特征叉乘**(cross-product)**起来。线性模型通常输入二进制的one-hot稀疏表示特征进行训练。比如特征“user_installed_app=netflix”为1,表示用户已安装netflix。交叉特征AND(user_installed_app=netflix,impresion_app=Pandora)表示既安装了netflix app同时又浏览过Pandora的用户特征为1,否则为0。
所以我们可以看出叉乘特征其实就像是在写规则,叉乘特征做到极致几乎等价于把所有样本的规则都写出来了,记住了所有样本,这就是原论文里Memorization的意思,可以达到准确推荐的目的。
Deep部分(Generalization)
deep部分就是前馈神经网络模型。对于高维稀疏的分类特征,首先会转化成低维的稠密的向量 a a a(embedding),然后作为神经网络hidden layers的输入进行训练。Hidden layers的计算公式如下:
a ( l + 1 ) = f ( W ( l ) a ( l ) + b ( l ) ) a^{(l+1)}=f\left(W^{(l)} a^{(l)}+b^{(l)}\right) a(l+1)=f(W(l)a(l)+b(l))
f f f是激活函数(例如ReLu), a a a是上一个hidden layer的输出, W W W是要训练的参数, b b b是bias。这类模型可以实现泛化能力**(Generalization)**,包括可以实现对未见过的内容进行泛化推荐。当模型query-item矩阵比较稀疏时,模型的会过分泛化,推荐出很多无相关性的内容,准确性不能得到保证。
所以Wide&Deep模型:
P ( Y = 1 ∣ x ) = σ ( w w i d e T [ x , ϕ ( x ) ] + w d e e p T a ( l f ) + b ) P(Y=1 \mid \mathbf{x})=\sigma\left(\mathbf{w}_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{d e e p}^{T} a^{\left(l_{f}\right)}+b\right) P(Y=1∣x)=σ(wwideT[x,ϕ(x)]+wdeepTa(