NeuralCF模型
NeuralCF模型将矩阵分解和逻辑回归思想进行结合,利用神经网络分别学习用户和物品的隐向量表示(Embedding),然后将矩阵分解中的内积互操作替换成神经网络计算,从而更好地从特征中学习到有用的信息。
原论文(https://arxiv.org/pdf/1708.05031)中还提出使用不同的隐向量表示和互操作可以提高模型的拟合能力,从而提高表现。混合模型如下图所示:
值得注意的是,该模型将推荐问题转化成CTR分类问题,所以使用了交叉熵损失函数作为模型的训练函数。
总结:
- NeuralCF模型利用深度学习的拟合能力,更好地学习隐向量表示,并且通过定义多种互操作解决了原特征分解方法欠拟合的问题。但也带来了过拟合和数据需求、训练复杂度等问题。
- NeuralCF模型也没有使用用户和物品的属性特征,存在信息浪费的问题。
附录:
附1:交叉熵损失函数推导
对于一个M分类问题,考虑到随机变量 Y Y Y表示采样样本 x i \mathbf{x}_i xi属于某一类,如采样到 y i = [ 0 , 0 , … , 1 ( j t h ) , … , 0 ] \mathbf{y}_i=[0,0,\dots,1(jth),\dots,0] yi=[0,0,…,1(jth),…,0], 其中 y i [ j ] = 1 \mathbf{y}_i[j]=1 yi[j]=1表示样本 x i \mathbf{x}_i xi属于 j j j类别。假设事件:样本 x i \mathbf{x}_i xi属于任意类别服从泊松分布,则采样到 y i = [ 0 , 0 , … , 1 ( j t h ) , … , 0 ] \mathbf{y}_i=[0,0,\dots,1(jth),\dots,0] yi=[0,0,…,1(jth),…,0]的概率为:
p j ∏ k = 1 , 2 , … , M ; k ≠ j ( 1 − p k ) p_j\prod_{k=1,2,\dots,M;k\ne j}{(1-p_k)} pjk=1,2,…,M;k=j∏(1−pk)
对于所有的样本 x i \mathbf{x}_i xi,我们想通过神经网络估计样本 x i \mathbf{x}_i xi属于任意类别 j j j的概率 p i [ j ] \mathbf{p}_i[j] pi[j],即网络的输出为向量 p i = f ( x i ; θ ) \mathbf{p}_i=f(\mathbf{x}_i;\boldsymbol{\theta}) pi=f(xi;θ), 从而最大化采样到标签 y i \mathbf{y}_i yi的概率,即
max θ ∑ i = 1 , … , N ∏ k = 1 , 2 , … , M ( 1 − p i [ k ] ) 1 − y i [ k ] p i [ k ] y i [ k ] \max_{\boldsymbol{\theta}}\sum_{i=1,\dots,N}\prod_{k=1,2,\dots,M}{(1-\mathbf{p}_i[k])^{1-\mathbf{y}_i[k]}\mathbf{p}_i[k]^{\mathbf{y}_i[k]}} θmaxi=1,…,N∑k=1,2,…,M∏(1−pi[k])1−yi[k]pi[k]yi[k]
通过负对数操作,将该目标函数转为最小化目标并避开乘项,
min θ − ∑ i = 1 , … , N ∑ k = 1 , 2 , … , M ( 1 − y i [ k ] ) l o g ( 1 − p i [ k ] ) + y i [ k ] l o g ( p i [ k ] ) \min_{\boldsymbol{\theta}}\quad-\sum_{i=1,\dots,N}\sum_{k=1,2,\dots,M}{(1-\mathbf{y}_i[k])log{(1-\mathbf{p}_i[k])}+\mathbf{y}_i[k]log(\mathbf{p}_i[k])} θmin−i=1,…,N∑k=1,2,…,M∑(1−yi[k])log(1−pi[k])+yi[k]log(pi[k])
上面公式中,认为 x i \mathbf{x}_i xi属于各个类别的事件是独立,这不太符合多分类的含义,于是我们进一步引入softmax函数,从而让其他类别应该是某一类别的负类,
s o f t m a x ( p ) = [ e x p ( p [ 0 ] ) ∑ j = 1 , … , M e x p ( p [ j ] ) , … , e x p ( p [ M ] ) ∑ j = 1 , … , M e x p ( p [ j ] ) ] softmax(\mathbf{p})=[\frac{exp(\mathbf{p}[0])}{\sum_{j=1,\dots,M}exp(\mathbf{p}[j])},\dots,\frac{exp(\mathbf{p}[M])}{\sum_{j=1,\dots,M}exp(\mathbf{p}[j])}] softmax(p)=[∑j=1,…,Mexp(p[j])exp(p[0]),…,∑j=1,…,Mexp(p[j])exp(p[M])]
此时,我们可以将损失函数改为仅考虑样本为某一类别的正类(不考虑其为负类)的概率,对于某一样本 x i \mathbf{x}_i xi,其交叉熵损失函数如下所示,
min θ − ∑ k = 1 , 2 , … , M y i [ k ] l o g ( s o f t m a x ( p i [ k ] ) ) \min_{\boldsymbol{\theta}}\quad-\sum_{k=1,2,\dots,M}{\mathbf{y}_i[k]log(softmax(\mathbf{p}_i[k]))} θmin−k=1,2,…,M∑yi[k]log(softmax(pi[k]))
当标签 y i = [ 0 , 0 , … , 1 ( j t h ) , … , 0 ] \mathbf{y}_i=[0,0,\dots,1(jth),\dots,0] yi=[0,0,…,1(jth),…,0]时,该损失函数对参数 θ \boldsymbol{\theta} θ的梯度为,
− ∂ l o g ∂ s o f t m a x ( p i [ k ] ) ∂ s o f t m a x ∂ p i [ k ] ∂ p i [ k ] ∂ θ = − 1 s o f t m a x ( p i [ k ] ) ∂ s o f t m a x ∂ p i [ k ] ∂ p i [ k ] ∂ θ -\frac{\partial log}{\partial softmax(\mathbf{p}_i[k])}\frac{\partial softmax}{\partial \mathbf{p}_i[k]}\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta} \\=-\frac{1}{softmax(\mathbf{p}_i[k])}\frac{\partial softmax}{\partial \mathbf{p}_i[k]}\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta}\\ −∂softmax(pi[k])∂log∂pi[k]∂softmax∂θ∂pi[k]=−softmax(pi[k])1∂pi[k]∂softmax∂θ∂pi[k]
当 j = k j=k j=k时,
− 1 s o f t m a x ( p i [ k ] ) ∂ s o f t m a x ∂ p i [ k ] ∂ p i [ k ] ∂ θ = − 1 s o f t m a x ( p i [ k ] ) ( s o f t m a x ( p i [ k ] ) − s o f t m a x ( p i [ k ] ) 2 ) ∂ p i [ k ] ∂ θ = ( s o f t m a x ( p i [ k ] ) − 1 ) ∂ p i [ k ] ∂ θ -\frac{1}{softmax(\mathbf{p}_i[k])}\frac{\partial softmax}{\partial \mathbf{p}_i[k]}\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta}\\=-\frac{1}{softmax(\mathbf{p}_i[k])}(softmax(\mathbf{p}_i[k])-softmax(\mathbf{p}_i[k])^2)\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta}\\=(softmax(\mathbf{p}_i[k])-1)\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta} −softmax(pi[k])1∂pi[k]∂softmax∂θ∂pi[k]=−softmax(pi[k])1(softmax(pi[k])−softmax(pi[k])2)∂θ∂pi[k]=(softmax(pi[k])−1)∂θ∂pi[k]
否则,
− 1 s o f t m a x ( p i [ k ] ) ∂ s o f t m a x ∂ p i [ k ] ∂ p i [ k ] ∂ θ = − 1 s o f t m a x ( p i [ k ] ) ( − s o f t m a x ( p i [ k ] ) 2 ) ∂ p i [ k ] ∂ θ = s o f t m a x ( p i [ k ] ) ∂ p i [ k ] ∂ θ -\frac{1}{softmax(\mathbf{p}_i[k])}\frac{\partial softmax}{\partial \mathbf{p}_i[k]}\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta}\\=-\frac{1}{softmax(\mathbf{p}_i[k])}(-softmax(\mathbf{p}_i[k])^2)\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta}\\=softmax(\mathbf{p}_i[k])\frac{\partial \mathbf{p}_i[k]}{\partial \boldsymbol \theta} −softmax(pi[k])1∂pi[k]∂softmax∂θ∂pi[k]=−softmax(pi[k])1(−softmax(pi[k])2)∂θ∂pi[k]=softmax(pi[k])∂θ∂pi[k]