推荐算法学习笔记2.1:基于深度学习的推荐算法-基于共线矩阵的深度推荐算法-NeuralCF模型

发布于:2024-07-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

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(1pk)

对于所有的样本 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,,Nk=1,2,,M(1pi[k])1yi[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])} θmini=1,,Nk=1,2,,M(1yi[k])log(1pi[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]))} θmink=1,2,,Myi[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])logpi[k]softmaxθpi[k]=softmax(pi[k])1pi[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])1pi[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])1pi[k]softmaxθpi[k]=softmax(pi[k])1(softmax(pi[k])2)θpi[k]=softmax(pi[k])θpi[k]


网站公告

今日签到

点亮在社区的每一天
去签到