最近对GNN和transfomer的相关内容看的比较多,简单总结一下二者的区别和共同之处吧。
从 Transformer 来看,我们需要分别计算 Q(Query), K(Key), V, 然后使用 Q 和 K 来计算自注意力矩阵A,A矩阵代表了 token (节点或词)之间的相关性,使用计算 AV 来完成不同 token 之间的加权融合。
从 GNN 来看,使用消息传递机制来解释 GNN,每个中心节点与其邻居节点之间进行信息交互,邻居生成的消息通过边传给中心节点,然后进行 Aggregator 操作和 Update 操作。如果我们使用最简单的消息函数(I)和一层 Linear 作为 Updater,则 Y=AXW=AV。
从上面可以看到,其实 Transformer 和 GNN 的计算其实十分相似,主要区别在于A 的获取:Transformer 通过自注意力构建全连接图(A),而 GNN 则使用预先设定的 邻接矩阵。
总结:
图和Transoformer的联系:kq的计算结果,可以看做是一个(n,n)的图邻接矩阵,联想到图网络的消息传递,不难发现,kq矩阵与v的相乘,就是消息传递。
而与图网络不一样的是,图网络的邻接矩阵是先验提供的,而transformer将靠模型自己去探索。
也就是说,transformer是自己学习特征的权重图,然后进行消息传递加权。
后面我会总结一些GNN和transfomer的模型思路。