Closed jasperzhong closed 1 year ago
核心公式是这个:
对于每个node i,分不同relation,分别汇聚,然后把所有relation的embedding加权加起来,最后再加上自己的embedding (和 #128 GCN一样).
实现的时候直接转成homogeneous graph就行了. 如果要采样,就直接是dgl.dataloading.MultiLayerNeighborSampler
就行了,参考这个实现 https://github.com/dmlc/dgl/blob/master/examples/pytorch/rgcn/entity_sample.py
而如果relation数量很多,W_r也越来越多,会参数爆炸的. 注意每个W_r都是一个d_in x d_out的matrix,跟relation大小没有关系. 论文提到了两种regularization方法,将W_r分解:
$$Wr^{(l)} = \sum{b=1}^{B} a_{rb}^{(l)}V_b^{(l)}$$
其中$V_b$都是Wr的shape,$a{rb}$是depend on r要学习的参数,所以可以看作是linear combination of basis. 这相当于是shared weights.
https://arxiv.org/abs/1703.06103