SAGEConv

SAGEConv

论文名称:Inductive Representation Learning on Large Graphs

论文链接:https://arxiv.org/pdf/1706.02216.pdf

现在存在方法具有内在transductive,不能generalize未见到的节点,。我们提出GraphSAGE是基于inductive开发的,对于未见到数据具备泛化能力。在训练的过程中,对邻居的节点采用抽样的方式,而不是对所有的节点进行训练。

GraphSAGE学习的主要方法是收集局部的邻居信息,例如度特征或者邻居节点的属性特征。接下来,首先描述推理算法,假设参数已经学习,如何生成节点的Embedding。然后,我们在讲一下如何通过随机梯度下降法和后向传播算法学习模型的参数。

1、Embedding产生算法(前向传播算法)

假设我们已经学习K 聚合函数( A G G R E G A T E k , k ∈ { 1 , … , K } AGGREGATE_k,k\in\{1,\dots,K\} AGGREGATEk,k{1,,K})的参数和一系列的权重矩阵 W k , ∀ k ∈ { 1 , … , K } W^k,\forall k \in\{1, \ldots, K\} Wk,k{1,,K}, 其中K指搜索的深度,这些参数主要用于前向传播。

在这里插入图片描述

Algorithm 1是在一次迭代、深度搜索并aggregate局部邻居的信息,随着迭代次数的增加,能够获取到更深层次的信息。

G = ( V , E ) \mathcal{G}=(\mathcal{V},\mathcal{E}) G=(V,E)表示整张图,

x v , ∀ v ∈ V \text{x}_v, \forall v\in\mathcal{V} xvvV表示节点的特征。

k k k表示当前step下,每个节点 v ∈ V v\in\mathcal{V} vV 收集邻居节点特征表示 h u k − 1 , ∀ u ∈ N ( v ) \text{h}_u^{k-1},\forall u\in\mathcal{N(v)} huk1,uN(v),生成单一的节点表示 h N ( v ) k − 1 \text{h}_{N(v)}^{k-1} hN(v)k1. 注意本次迭代aggregate取决于前一次迭代的输出。其中bad case k = 0 k=0 k=0是节点的特征输入。将汇总的邻居向量 h N ( v ) k − 1 \text{h}_{\mathcal{N(v)}}^{k-1} hN(v)k1和当前的节点特征 h v k − 1 h_v^{k-1} hvk1进行拼接, 进行全连接层和非线性激活函数 σ \sigma σ的转换,生成的结果作为下一次迭代的输入。最终输出的特征表示为 z v ≡ h v K , ∀ v ∈ V \mathbf{z}_{v} \equiv \mathbf{h}_{v}^{K}, \forall v \in \mathcal{V} zvhvK,vV

在minibatch的设置中,对邻居节点和边进行采样。相对于全部节点的向量的计算,GraphSAGE只是对必要的节点minibatch集合 B \mathcal{B} B进行计算。

在这里插入图片描述

主要的思想就是抽样出需要的节点进行计算,Algorithm的Line 2-7描述了抽样的过程。

从Line1-6看出: 每个 B k \mathcal{B}^k Bk包含节点 v ∈ B k + 1 v\in \mathcal{B}^{k+1} vBk+1的 表示。

Line9-15 描述聚合过程, N k ( u ) \mathcal{N}_k(u) Nk(u)采用独立的均匀采样。

Relation to the Weisfeiler-Lehman Isomorphism Test. GraphSAGE的灵感来自同构图检验的经典算法。在Algorithm中,我们 (i)设 K = ∣ V ∣ K=|V| K=V (ii) 边权重是相等的。(iii) 使用Hash函数作为aggregator。如果两个子图输出 { z v , ∀ v ∈ V } \{\text{z}_v, \forall v\in\mathcal{V}\} {zv,vV}是相同的,我们认为两个子图是同构的。当然,我们的目标学习节点的表示,不是测试是否同构。

Neighborhood defination 均匀采样固定大小的邻居节点的数量, 即 N ( v ) \mathcal{N(v)} N(v)是固定的,每次迭代均匀采样不同的样本。如果不采样,一个Batch的大小为 O ( ∣ V ∣ ) O{(|\mathcal{V}|)} O(V). 采样后, GraphSAGE的复杂度固定在 O ( ∏ i = 1 K S i ) O\left(\prod_{i=1}^{K} S_{i}\right) O(i=1KSi), 其中 S i , i ∈ { i , ⋯   , K } S_i, i\in\{i,\cdots,K\} Si,i{i,,K}, K K K用户自定义的。在实际应用中,一般 K = 2 K=2 K=2 S 1 ⋅ S 2 ≤ 500 S_{1} \cdot S_{2} \leq 500 S1S2500

2、GraphSAGE参数学习

使用graph-based loss function学习节点的表示, z u , ∀ u ∈ V \text{z}_u, \forall u\in\mathcal{V} zu,uV, 学习权重矩阵 W k , ∀ k ∈ { 1 , ⋯   , K } W^k, \forall k\in\{1,\cdots, K\} Wk,k{1,,K}, 采用随机梯度下降的方法。graph-based loss function会使得相近的节点有相同的表示,同时兼顾不同的节点学习表示不相同的。
J G ( z u ) = − log ⁡ ( σ ( z u ⊤ z v ) ) − Q ⋅ E v n ∼ P n ( v ) log ⁡ ( σ ( − z u ⊤ z v n ) ) (1) J_{\mathcal{G}}\left(\mathbf{z}_{u}\right)=-\log \left(\sigma\left(\mathbf{z}_{u}^{\top} \mathbf{z}_{v}\right)\right)-Q \cdot \mathbb{E}_{v_{n} \sim P_{n}(v)} \log \left(\sigma\left(-\mathbf{z}_{u}^{\top} \mathbf{z}_{v_{n}}\right)\right)\tag{1} JG(zu)=log(σ(zuzv))QEvnPn(v)log(σ(zuzvn))(1)
其中,节点v和节点u是在固定长度随机游走过程共现的。 σ \sigma σ是激活函数, P n P_n Pn是负采样的分布, Q Q Q是定义负样本的数量, 损失函数输入表示 z u \text{z}_u zu包含来自邻居节点的特征。

3、Aggregator Architectures

节点的邻居和文本、图像不一样,他们的无序、对称的,测试如下三个aggregator functions:

Mean aggregator

用以下公式替换Algorithm1中Line4和Line5
h v k ← σ ( W ⋅ MEAN ⁡ ( { h v k − 1 } ∪ { h u k − 1 , ∀ u ∈ N ( v ) } ) (2) \mathbf{h}_{v}^{k} \leftarrow \sigma\left(\mathbf{W} \cdot \operatorname{MEAN}\left(\left\{\mathbf{h}_{v}^{k-1}\right\} \cup\left\{\mathbf{h}_{u}^{k-1}, \forall u \in \mathcal{N}(v)\right\}\right)\right.\tag{2} hvkσ(WMEAN({hvk1}{huk1,uN(v)})(2)
计算当前节点 h v k − 1 \mathbf{h}_v^{k-1} hvk1和邻居节点拼接起来, 计算均值,这种操作可以将不同深度的节点进行"skip connnection"。

LSTM aggregator

LSTM不具备对称性,简单地将邻居节点处理成无序的序列作为输入。

Pooling aggregator
 AGGREGATE  k pool  = max ⁡ ( { σ ( W pool  h u i k + b ) , ∀ u i ∈ N ( v ) } ) (3) \text { AGGREGATE }_{k}^{\text {pool }}=\max \left(\left\{\sigma\left(\mathbf{W}_{\text {pool }} \mathbf{h}_{u_{i}}^{k}+\mathbf{b}\right), \forall u_{i} \in \mathcal{N}(v)\right\}\right)\tag{3}  AGGREGATE kpool =max({σ(Wpool huik+b),uiN(v)})(3)

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SAGEConv是一种基于邻居聚合的图卷积神经网络层。要定义一个邻居聚合函数,需要实现下面两个步骤: 1. 定义邻居采样方法:邻居采样方法指定了从每个节点的邻居中选择哪些节点用于聚合。在SAGEConv中,可以通过指定采样大小采样方式来实现。例如,可以使用固定大小的邻居采样或自适应邻居采样。 2. 定义聚合函数:聚合函数指定了如何将选定的邻居节点的特征汇集到目标节点的表征中。在SAGEConv中,聚合函数通常采用平均池化或最大池化的方式实现。 下面是一个使用DGL库实现SAGEConv的Python代码示例: ```python import dgl.function as fn import torch.nn as nn import dgl class SAGEConv(nn.Module): def __init__(self, in_feats, out_feats, aggregator_type='mean'): super(SAGEConv, self).__init__() self.fc = nn.Linear(in_feats, out_feats) if aggregator_type == 'mean': self.aggregator = fn.mean elif aggregator_type == 'max': self.aggregator = fn.max else: raise ValueError('Aggregator type {} not supported'.format(aggregator_type)) def forward(self, g, h): # g: DGLGraph, h: node features with g.local_scope(): g.ndata['h'] = h g.update_all(fn.copy_src('h', 'm'), self.aggregator('m', 'neigh')) h_neigh = g.ndata['neigh'] rst = self.fc(torch.cat([h, h_neigh], dim=1)) return rst ``` 在上述代码中,我们通过`aggregator_type`参数指定了使用平均池化或最大池化的方式实现聚合函数。在`forward`函数中,我们首先把节点特征赋值给图的节点数据`h`,然后通过`update_all`函数从每个节点的邻居中采样,并利用聚合函数将邻居特征聚合到目标节点的表征中。最后,我们将目标节点的表征和邻居节点的表征拼接起来,输入到全连接层中进行线性变换。 ### 回答2: SAGEConv是一种图卷积神经网络(Graph Convolutional Neural Network,GCN)的层,用于图数据的卷积操作。在SAGEConv中,定义邻居聚合函数可以通过以下步骤来实现: 1. 首先,我们定义一个邻居采样函数,用于从图中的每个节点处获得一定数量(如k个)的邻居节点。这通常可以通过图的邻接矩阵来实现,根据节点之间的连接关系进行采样。 2. 然后,对于每个节点,我们根据邻居节点的特征进行聚合。可以考虑不同的邻居聚合方式,常用的有求和、平均等。在SAGEConv中,可以使用邻居聚合函数将邻居节点特征聚合起来。 3. 在聚合过程中,可以引入权重矩阵,用于调整不同邻居节点特征的重要性。这可以通过在聚合过程中进行加权操作来实现,即对每个邻居节点的特征乘以相应的权重值。 4. 最后,可以考虑将聚合得到的特征进行归一化操作,使得每个节点的特征范围都在一个相对一致的尺度上。可以使用常见的归一化方法,如Batch Normalization或Layer Normalization等。 通过以上步骤,我们可以定义一个邻居聚合函数来实现SAGEConv中的图卷积操作。这样,SAGEConv可以在每个节点上根据其邻居节点特征进行特征的聚合和传播,从而实现对图数据的卷积运算。 ### 回答3: SAGEConv是一种用于图卷积神经网络(GCN)的聚合函数。为了实现邻居聚合函数,我们首先需要定义一个邻居采样函数来选择每个节点的邻居节点。 邻居聚合函数的目标是将每个节点的邻居特征进行聚合,以获得节点的全局特征表示。这可以通过以下几个步骤来完成: 1. 输入: - 邻居特征矩阵: 一个包含每个节点邻居特征的矩阵,可以表示为N×D的矩阵,其中N是节点数量,D是每个邻居的特征维度。 - 节点自身特征: 一个包含每个节点自身特征的矩阵,可以表示为N×D的矩阵。 - 邻居权重矩阵: 一个包含每个节点邻居权重的矩阵,可以表示为N×N的矩阵,其中每个元素表示节点之间的连接强度。 2. 邻居选择: 使用邻居采样函数来选择每个节点的邻居节点。这可以通过基于邻居权重矩阵进行邻居采样来实现。 3. 邻居特征聚合: 对于每个节点,将其邻居节点的特征进行加权求和,其中权重由邻居权重矩阵提供。这可以通过将邻居特征矩阵与邻居权重矩阵进行相乘,并进行逐行求和来实现。 4. 特征融合: 将节点自身特征与邻居特征进行融合,以获得节点的全局特征表示。这可以通过将邻居特征聚合结果与节点自身特征进行连接或求和来实现。 通过实现上述步骤,可以定义一个邻居聚合函数来实现SAGEConv。该函数能够将节点的邻居特征进行聚合,并产生节点的全局特征表示,从而在GCN中进行节点分类、链接预测等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值