图神经网络三大基础算法——GraphSAGE
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。
更多推荐
所有评论(0)