美文网首页数学建模艺术算法艺术
《现代推荐算法》神经协同过滤之GMF算法

《现代推荐算法》神经协同过滤之GMF算法

作者: 伊凡vnir | 来源:发表于2020-03-01 16:22 被阅读0次

    关注公众号 长歌大腿,发送“机器学习”关键字,可获取包含机器学习(包含深度学习),统计概率,优化算法等系列文本与视频经典资料,如《ESL》《PRML》《MLAPP》等。
    《现代推荐算法》神经协同过滤之GMF算法

    神经协同过滤简介

    前面的文章介绍了协同过滤算法,主要分为基于用户的协同过滤算法与基于物品的协同过滤算法,同时指出,矩阵分解也属于广义的协同过滤算法。
    那么之前的文章介绍的SVD,SVD++等等矩阵分解算法都是在传统矩阵分解上面进行的改进。随着神经网络的兴起,神经网络应用到协同过滤算法上,有研究者(何教授)提出了神经协同过滤算法,并将其分为GMF,MLP,NeuMF三种具体的网络结构。我们在本篇文章中介绍其中的GMF模型。

    广义矩阵分解算法(GMF)

    GMF是广义矩阵分解的简写(generalized matrix factorization model) ,它模型具体描述为用户隐空间向量与物品隐空间向量的点积,然后进行加权和输出。如果我们令用户隐空间向量p_{u}P^{T}v_{u}^{U} 物品隐空间向量 q_{i}Q^{T}v_{i}^{I}. GMF 由下面这个数学式给出
    \hat{y_{u,i}}=a_{out}(h^{T}(p_{u}\odot q_{i}))
    在公式里 \odot 是点积, a_{out}h 是输出层激活函数与加权和输出的权重。在GMF模型中,模型用sigmoid 方程 \sigma(x) = 1/(1+e^{-x}) 作为激活函数 a_{out} ,通过训练数据优化对数损失(交叉熵)学习权重 h .

    代码实现

    我们采用pytorch计算框架来示例GMF的网络结构部分。GMF网络类如下所示,

    class GMF(nn.Module):
        def __init__(self,user_num, item_num, factor_num):
            super(GMF,self).__init__()
            self.embed_user_GMF = nn.Embedding(user_num,factor_num)
            self.embed_item_GMF = nn.Embedding(item_num,factor_num)
            self.predict_layer = nn.Linear(factor_num,1)
            self._init_weight_()
    
        def _init_weight_(self):
            nn.init.normal_(self.embed_item_GMF.weight,std=0.01)
            nn.init.normal_(self.embed_user_GMF.weight,std=0.01)
    
        def forward(self,user,item):
            embed_user_GMF = self.embed_user_GMF(user)
            embed_item_GMF = self.embed_item_GMF(item)
            output_GMF = embed_user_GMF*embed_item_GMF
            prediction = self.predict_layer(output_GMF)
            return prediction.view(-1)
    

    先根据嵌入层维度等信息初始化网络,同时初始化权重为方差为0.01的正态分布(非必要)。
    网络传播层如代码所示,输入为用户与物品的ID,然后经过嵌入编码,再进行点积,最后通过一个全连接线性层加权输出。

    相关文章

      网友评论

        本文标题:《现代推荐算法》神经协同过滤之GMF算法

        本文链接:https://www.haomeiwen.com/subject/nluckhtx.html