RGCF: Refined Graph Convolution Collaborative Filering withConcise and Expressive Embedding

这篇文章和lightGCN是大同小异,可以移步至lightGCN看具体介绍,

图卷积网络在推荐系统中的应用lightGCN,配套pytorch的代码解释_只想做个咸鱼的博客-CSDN博客_图卷积 推荐

下面只是粗略的讲解一下做了啥,以及代码中变了啥

一、论文

这个图看起来很高大上,其实原理很简单,都在文中表述了,我们来看原话

1、在我们的 RGCF 中删除了非线性网络层,因为它们对模型性能没有任何好处。

2、即使采用dropout技术也无法完全消除网络层参数过多导致的过拟合问题。 

3、这一项可以减弱非线性图卷积产生的信息冗余和噪声的负面影响,类似于上述的串联操作。事实上,这样的乘积项也是多余的,而交互函数是内积。

好了!!!这就是这篇论文干的事情了

二、代码

它的代码和lightGCN代码9成相似度

这里借用直接NGCF的代码(红线部分都是删除的,论文中证明他们都是没有较大作用的)

 于是:简化的RGCF就诞生了

    def _create_rgcf_embed(self):

        A_fold_hat = self._split_A_hat(self.norm_adj)

        ego_embeddings = tf.concat([self.weights['user_embedding'], self.weights['item_embedding']], axis=0)

        for k in range(0, self.n_layers):

            temp_embed = []

            for f in range(self.n_fold):

                temp_embed.append(tf.sparse_tensor_dense_matmul(A_fold_hat[f], ego_embeddings))

            side_embeddings = tf.concat(temp_embed, 0)

            ego_embeddings = side_embeddings

        u_g_embeddings, i_g_embeddings = tf.split(ego_embeddings, [self.n_users, self.n_items], 0)
        return u_g_embeddings, i_g_embeddings

是不是比上面的简单多了,这里它是将聚合后的信息作为下一阶的输入,所以最后的结果就是最后一阶的表示

但是lightGCN是将每阶的结果都保存,然后整合,作为最后的结果,具体如下所示

    def _create_lightgcn_embed(self):
        if self.node_dropout_flag:
            A_fold_hat = self._split_A_hat_node_dropout(self.norm_adj)
        else:
            A_fold_hat = self._split_A_hat(self.norm_adj)
        
        ego_embeddings = tf.concat([self.weights['user_embedding'], self.weights['item_embedding']], axis=0)
        all_embeddings = [ego_embeddings]
        
        for k in range(0, self.n_layers):

            temp_embed = []
            for f in range(self.n_fold):
                temp_embed.append(tf.sparse_tensor_dense_matmul(A_fold_hat[f], ego_embeddings))

            side_embeddings = tf.concat(temp_embed, 0)
            ego_embeddings = side_embeddings
            all_embeddings += [ego_embeddings]
        all_embeddings=tf.stack(all_embeddings,1)
        all_embeddings=tf.reduce_mean(all_embeddings,axis=1,keepdims=False)
        u_g_embeddings, i_g_embeddings = tf.split(all_embeddings, [self.n_users, self.n_items], 0)
        return u_g_embeddings, 

 lightGCN对比RGCF。多了一个all—embedding,用来存储每一阶的的信息,然后融合成最后的embedding,他们的区别就在这,所以两篇论文代码9成相似

这篇论文,毕!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值