发布时间:2023-03-23 08:30
DGL中的消息传递,大家通常知其然不知所以然。在看完GCN的公式后,会出现这样的疑问: 矩阵运算在哪 ?D波浪和A波浪在哪 ?
GCN公式: https://www.cnblogs.com/denny402/p/10917820.html
下文详细解释了这个背后的机制:
DGL 的核心为消息传递机制(message passing),主要分为消息函数 (message function)和汇聚函数(reduce function)。如下图所示:
消息函数(message function):传递消息的目的是将节点计算时需要的信息传递给它,因此对每条边来说,每个源节点将会将自身的Embedding(e.src.data)和边的Embedding(edge.data)传递到目的节点;对于每个目的节点来说,它可能会受到多个源节点传过来的消息,它会将这些消息存储在"邮箱"中。
汇聚函数(reduce function):汇聚函数的目的是根据邻居传过来的消息更新跟新自身节点Embedding,对每个节点来说,它先从邮箱(v.mailbox['m'])中汇聚消息函数所传递过来的消息(message),并清空邮箱(v.mailbox['m'])内消息;然后该节点结合汇聚后的结果和该节点原Embedding,更新节点Embedding。
更新: message函数的参数是边,包括源节点,目标节点的特征信息,处理完的数据放置到节点的mailbox中。 聚合函数reduce_function或 apply_node函数作用于节点本身,即传入的参数是节点信息和节点的邮箱信息。
原始出处: https://mp.weixin.qq.com/s?__biz=MzIyNjM2MzQyNg==&mid=2247544576&idx=2&sn=bb912ea385f319b708658dcadbeb4f01&chksm=e873fe4ddf04775b5d64889a3e1ed7350159b527a094c07f2c4fb3b96eabf0ff773bb1f8609d&scene=178&cur_album_id=1600877474559639556#rd