推荐图模型总结

目前实现过的图模型有

目录

一、GCN

二、ClusterGCN

三、LightGCN

四、Surge

五、Pinsage & GraphSage

六、SR-GNN

七、GCE-GNN

八、Node2vec & DeepWalk

九、超图DHCF


一、GCN

1.GCN是一个神经网络层,层与层之间的传播方式是

 构造一个两层的GCN,激活函数分别采用ReLU和Softmax,则整体的正向传播的公式为:

注意:

(1)A+I是为了在做卷积时,计算上节点本身的特征;

(2)D矩阵的引入是为了对A做归一化,使得A与特征矩阵相乘不会改变特征原本的分布;

2、优点:可以捕捉图的全局信息,很好的表征节点的特征,边的特征。

3、缺点:若是新增节点,整个图发生变化, 那么GCN的结构就会发生变化。因此对于节点不固定的图结构来说,不适用。

全批次梯度下降(Full-batch gradient descent),要一次性计算整个图所有节点的梯度,需要存储所有中间的node的embeddings,对显存的要求很高。

4、特性:

  • 局部参数共享,算子是适用于每个节点(圆圈代表算子),处处共享。
  • 感受域正比于层数,最开始的时候,每个节点包含了直接邻居的信息,再计算第二层时就能把邻居的邻居的信息包含进来,这样参与运算的信息就更多更充分。层数越多,感受域就更广,参与运算的信息就更多。

二、ClusterGCN

1、Cluster GCN解决了GCN的两个问题:(1)计算量高,显存压力太大,尤其是GCN的基于批梯度下降法(没有mini-batch直接whole batch ,一个epoch 训练全部节点),显存压力非常高,并且随着GCN layer的层数增长,显存占用指数增长;(2)GCN无法insductive,没有使用sage这类的策略来辅助

采用的策略是:先对图进行聚类,然后分别抽取部分图聚类得到的子图进行分批训练,这限制了节点的邻域的范围,本质上可以看作是做采样。

图聚类的方法是社区发现算法;或随机聚类(实际上等同于对原始的邻接矩阵进行行列采样

2、问题:

直接丢弃了clusters之间的edge了,显然模型的精度会有一定下降的;

通过图聚类的方法进行节点的聚类会有一些问题,一方面不同图聚类(或者说社区发现算法)的结果不一定和下游的任务是契合的;每个batch的subgraph的分布和整个graph可能会存在一些差异从而导致了数据分布不一致的问题;

3、其中用到的图聚类软件包为metis,该算法基于多层次递归二分切分法、多层次k路切分法以及多约束划分机制;

三、LightGCN

1、原理:

LightGCN认为GCN中常见的特征转换和非线性激活对于协同过滤来说没有太大作用,甚至降低了推荐效果,所以只由邻域聚合构成,且聚合不包括自连接。

 论文中,将ak设置为1/(k+1)

LightGCN是由NGCF改进而来,图卷积的定义为:

 其中,eu(k)和ei(k)分别表示用户u的嵌入和item的嵌入,k为传播的层数,Ni表示于用户u交互的邻居项目i,模型预测被定义为用户和项目最终表示的得分为:

采用BPR作为损失函数:

 2.核心代码:

def forward(self):
    A = sp.dok_matrix((self.n_users + self.n_items,self.n_users + self.n_items), dtype=np.float32)
    A = A.tolil()
    A[:self.n_users, self.n_users:] = self.interaction_matrix
    A[self.n_users:, :self.n_users] = self.interaction_matrix.transpose()
    sumArr = (
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值