GNN
对于图上每个节点被编码为嵌入向量,因此,节点可能是一个图,可以通过cnn进行计算,可能是一个词、一个嵌入,它可以是自己希望的任何东西,这是图神经网络的输入。
对于F,GNN处理可以看作节点的特征提取,F通过不同的边类型与E和D连接,D和F有自己的初始向量。
从F的邻居开始,做一些类似计算消息的操作,实际上是获得另一个向量。合并得到的邻居消息结合F节点当前状态,将更新t时刻的F节点状态(拥有自身和邻居的信息)。
具体一点,x代表邻居信息,是由当前节点的边类型为K的邻居信息合并而成。
对于图神经网络,每个时间点,所有节点都从其邻居获得输入,计算消息然后更新状态。此过程,一次又一次重复操作。
一开始,每个节点都了解自己,下一步中,了解了邻居,逐步扩大自己的感知区域。
GNN-1
E是模型的参数,消息取决于边类型K和邻居状态。E与不同类型的邻居节点进行矩阵乘法,汇总邻居的输入状态,通过GRU更新状态,GRU实现从上一个状态转移到下一个状态。
GGNN中的矩阵运算
邻居矩阵可以将一个节点用邻居节点表示。如上图,c节点乘上邻接矩阵得到了他邻居a和b的表示,即用a和b表示c。
对于K个边类型,就要K个邻接矩阵。
首先,节点状态是一个n x D 的矩阵,每一行是节点在t时刻初始向量表示。接下来,计算要发送的消息,不同的K,使用E乘上节点状态矩阵,M代表所有向外发送的消息。接收消息,使用邻接矩阵乘上M,会受到所有类型K的边的邻居消息。最后,通过GRU得到t+1时刻的更新状态。
GGNN-2
起点是递归神经网络RNN,是对特殊的图(链图)进行操作,可以处理文字、一系列tokens。
我们用recurrent unit表示链图中每一个节点,箭头进行连接。一次给每个节点嵌入一个节点特征(信封表示),每个节点通过递归神经网络得到新的状态。
对于普通图,如下
每个节点代表任何你想要的东西(不同的原子、图像等),都有一个特征向量。
关联到一个网络,具有不同类型的边。边不同,知识库就不同。
将节点替换成递归单元,如下
消息传递将如下进行,对于一个特定节点放大
该节点将从邻居拉取特征,随着消息被拉出,将通过网络经过特定的边。新的状态由自己,和邻居特征和组成。
对于图中所有节点同一个时间步同时更新,其中单个时间步节点可以知道自身信息和相距一阶的邻居的信息。
第二次重复操作,节点又知道了一阶和二阶的信息,经过固定T个时间步停止后,节点知道信息的范围越来越大。
一次一次重复前进,将图的全部信息收集起来进行求和。