GraphSAGE

SAmple+aggreGatE:采样与聚合;
之前谈到的GCN是利用节点的邻居信息来聚合它下一层的节点的表示; 这种直推式的方法,只能在一张图上做GCN,如果在一张没有见过的图上,GCN是无法进行的 ;
Graphsage正是采样和聚合,采用归纳式的方法,对于没见过的节点也可以生成embedding;

如下图,我们的输入是:图GGG,节点的特征XvX_vXv​,层数K,权重矩阵WkW^kWk;hv0=Xvh_v^0=X_vhv0​=Xv​首先,我遍历K层的Graphsage,在每一层上我遍历所有的节点,我求一下v节点周围的节点信息,我将邻居节点的信息聚合在一起,就可以求v节点在第K层的邻居向量 hN(v)kh_{N(v)}^khN(v)k​;
这个时候,我再将上一层(K-1)的v节点的特征表示hvk−1h_v^{k-1}hvk−1​和第K层v节点邻居聚合后的特征向量hN(v)kh_{N(v)}^khN(v)k​拼在一起,在乘以这个WkW^kWk参数,就可以得到v节点在这一层的特征表示hvkh_v^{k}hvk​;
经过K层graphsage,就可以得到v节点学习到的特征表示;
在这里插入图片描述
最重要的就是第4步的聚合和第五步的连接;
举个例子:
在这里插入图片描述
首先,聚合3456在第0层的特征h3,4,5,60h_{3,4,5,6}^0h3,4,5,60​,求得邻域特征hN(1)1h_{N(1)}^1hN(1)1​;
之后将h10h_{1}^0h10​与hN(1)1h_{N(1)}^1hN(1)1​拼接在一起;再乘以可学习参数WWW,就得到了1节点在经过了1层graphsage之后的特征表示h00h_0^0h00​;
邻居采样:
不对所有邻居进行聚合,采样聚合固定长度的邻居数量,会出现以下两种情况:
①邻居节点比采样节点多,如1与3456,那么在3456中随机选3个即可;
②邻居节点比采样节点少,如2与13,那么在选择完13之后,还需要重新重复选择一下1或者3;

作者表明该模型K=2K=2K=2 和 S1∗S2≤500S_1*S_2\le500S1​∗S2​≤500时,效果会比较好;ps:S1,S2S_1,S_2S1​,S2​分别是第一层聚合的邻居数量和第二层聚合的邻居数量;
在这里插入图片描述
举个例子:
在这里插入图片描述
ps:1-4是出度,对1没有影响;
聚合函数:需要满足对称排列不变性
①Mean aggregator:上面提到的都是采用mean
在这里插入图片描述
作者提出了mean也可以直接算,不用后面的那步连接操作;
②LSTM aggregator:LSTM本身是由顺序的,通过将输入节点随机排列,使得LSTM也可以适用于无序的集合;(模型容量大,做出来效果好)
③Pooling aggregator:
在这里插入图片描述
在这里插入图片描述
最后,抽取的便是,0.6,1,0.8,1.2;池化层可以有效的缩小参数矩阵的尺寸,从而减少最后连接层的中的参数数量。所以加入池化层可以加快计算速度和防止过拟合的作用。

GraphSAGE(mini_batch版本)
我们是从第K层开始,通过K-1的节点再去求取K-2层的节点,通过这样我们就求得了最终我要计算的minibeatch所需的所有的节点,那么我就将这个部分节点把它存下来就可以,然后我将存下来的这些节点,我再通过一个graphsage的操作,那么我就学习到了每个节点的特征。
在这里插入图片描述
举个例子:
这个例子由两层GraphSAGE组成,第一层聚合两个邻居,第二层聚合三个邻居;
首先是B2层是我们的最终层,我们要求目标节点a;然后看倒数第一层B1,它要聚合的是我们a节点周围的节点,采样3个邻居节点C,F,J;然后看一下倒数第二层B0,我需要选择聚合C,F,J 的k,l,i,h,d,e这六个节点。
在这里插入图片描述
将一整个大图简化为只需要,三种颜色的这种小图;
在这里插入图片描述
Graph_embedding:
在这里插入图片描述
作者说这两个节点比较相近得,这两个节点得表征是比较相似的;
通过损失函数,训练GraphSAGE的权重函数W,这种方法学习的不是节点的embedding,而是学习了W,当我学习完这个W,我就可以推出一个节点的embedding。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐