作者开门见山的指出:特征转换和非线性激活——对协同过滤的性能几乎没有贡献。这篇文章也就是对NGCF的模型进行了精简,所以最好先理解前者才更好的理解后者
如果想回顾一下:可以参考图卷积网络在推荐系统中的应用NGCF(Neural Graph Collaborative Filtering)配套pytorch的代码解释_zhao254014的博客-CSDN博客
言归正传,这篇论文前面都在讲这些繁琐的操作对最后的推荐没啥用,然后显示出lightGCN的好处
在LightGCN中,采用了简单的加权和聚合器,放弃了使用特征变换和非线性激活, 同时只聚合连接的邻居,而不集成目标节点本身(即自连接)。
我们进一步组合在每一层获得的嵌入,以形成最终的表示
这个是新添的:其中αk设置为1/(K+1)效果最好。
我们执行图层组合以获得最终表示的原因有三个:
(1) 随着层数的增加,嵌入将过度平滑。(对于过渡平滑,我所理解的就是即使是不同类别的结点,在经过多阶处理后也会达到一个相似的值,或者说所有的用户结点都趋于一个值,这不是我们所希望的)
(2) 不同层的嵌入捕获了不同的语义。例如,第一层对具有交互的用户和项目强制平滑,第二层平滑在交互的项目(用户)上有重叠的用户(项目),更高的层捕获更高阶的接近度。因此,将它们结合起来将使表示更加全面。
(3) 将不同层的嵌入与加权和相结合,可以捕捉到图卷积与自连接的效果,这是GCN中的一个重要技巧。
然后后面的东西就是和NGCF一样了
90%的代码和NGCF都是一样的,
这里只阐述不同的核心部分:
这里其实就是对NGCF进行删减罢了,去掉特征变换以及激活函数
for k in range(len(self.layers)): #生成1-3跳embed信息
# u到u,聚合u所有邻居的消息
side_embeddings = torch.sparse.mm(A_hat, ego_embeddings)
ego_embeddings = side_embeddings
#上面的all—embed是一个列表经过三次循环后,包含1-3的embed+自身结点的embed,所以列表索引为4
all_embeddings += [ego_embeddings]
all_embeddings = torch.stack(all_embeddings, 1) # 所有跳数组合
all_embeddings = torch.mean(all_embeddings,axis=1, keepdims=False)
#分用户和物品em
u_g_embeddings = all_embeddings[:self.n_user, :]
i_g_embeddings = all_embeddings[self.n_user:, :]
"""
*********************************************************
look up.
"""
# 查询此批次1024数据的embed
u_g_embeddings = u_g_embeddings[users, :] #此批次用户的embed
pos_i_g_embeddings = i_g_embeddings[pos_items, :] #正样本的embed
neg_i_g_embeddings = i_g_embeddings[neg_items, :] #负样本的embed
return u_g_embeddings, pos_i_g_embeddings, neg_i_g_embeddings
其实lightGCN就是个简化版的NGCF,将一些可有可无的复杂计算给剔除掉,提高模型的处理速度及可读性:
有下面的结果其实不难看出,训练一个epoc仅需要30s左右,而我们在上一篇训练完整版NGCF时一步需要约60s,所以归根结底就是剔除了可有可无的一些复杂计算,我们的测试结果也是跑出了论文中的指标值的99%,总体来说复现的还不错。
Best Iter=[48]@[30959.6] recall=[0.18065 0.25163 0.30306 0.34299 0.37581], precision=[0.05557 0.03917 0.03163 0.02700 0.02380], hit=[0.58859 0.69084 0.74828 0.78542 0.81198], ndcg=[0.15381 0.17604 0.19132 0.20253 0.21136]
好了,至此这篇lightGCN论文也暂时告一段落!!后续其他论文敬请期待
关于NGCF的详细步骤解释:图卷积网络在推荐系统中的应用NGCF(Neural Graph Collaborative Filtering)配套pytorch的代码解释_zhao254014的博客-CSDN博客
torch版:GitHub - gusye1234/LightGCN-PyTorch: The PyTorch implementation of LightGCN
tensorflow版:GitHub - kuandeng/LightGCN
下面网盘这个是我文章中用到的代码,更优先匹配这篇文章
或者网盘获取
链接:https://pan.baidu.com/s/103DlE-aU66wlqOuA2u4PeA
提取码:715z
复制这段内容后打开百度网盘手机App,操作更方便哦