【论文笔记】Graph U-Nets

7 篇文章 2 订阅
4 篇文章 0 订阅

Graph U-Nets

原文链接:http://proceedings.mlr.press/v97/gao19a/gao19a.pdf
开源代码:https://github.com/HongyangGao/Graph-U-Nets
Pytorch Geometric版本GUNet: https://github.com/mulinmeng/GraphU-Net

Background

  1. 由于Graph Data的表征学习问题,不能像CNN能够对图像进行Pooling或者Up-sampling操作。由于给定的Images 可以认为是一种节点位于2D表格上Graph的特殊情况,因此很自然地可以将node classification、graph embedding与像素级别的分割任务对应。
  2. 特别是Encoder-Decoder的经典模型U-Nets已经在图像处理领域大放异彩,但是在Graph Data领域中缺乏与之类似的方法。

由于受到U-Net结构的启发,作者希望可以构建类似U-Net的架构,包含三种Block分别是:卷积(convolutions)、池化(pooling)和上采样(up-sampling)操作,推广到图数据。由于网格数据与图像和文本数据不同,graph中的节点没有常规池化操作所需的空间位置排列顺序的信息

为了解决上述问题,作者提出以下方法解决Graph Data适应的问题

  1. graph pooling (gPool) 与 unpooling (gUnpooling)操作
  2. graph U-Nets

gPool与gUnpool互为逆操作,gPool通过对一些节点进行抽样操作,根据它们的标量投影在一个可训练的投影向量上形成一个较小的图;gUnpool通过在对应的gPool层中选择节点的位置,将图恢复到原来的结构,graph U-Nets通过将high-level特征进编码和解码用于network embedding。

Graph U-Nets模型

通过引入graph pooling (gPool) layer 以及graph unpooling (gUnpool) layer提出Graph U-Nets模型,池化层在CNN中能够减少特征图的大小,并且扩大感受野,因此能使模型具有较强的泛化能力和表现水平。K-Max Pooling将输出图中可能来自不同节点的K个最大单元,导致所选节点的连通性不一致。

Graph Pooling Layer

由于在图上的节点并没有位置信息,因此并不能将CNN中的池化操作并能直接使用到图数据。全局池化操作将所有的节点变成单个节点,严重限制了网络的灵活性。作者提出的graph pooling (gPool) layer能够将图数据进行降采样,通过自适应选择一系列节点作为子集来形成一个新的但更小的图。

通过一个可训练的投影向量 p p p,将所有的节点特征投影到 1 D 1D 1D空间,然后执行 K − M a x K-Max KMax p o o l i n g pooling pooling操作选择节点,由于是基于footprint选择每个节点,因此新图中的连通性在各个节点之间是一致的。

给定节点 i i i的特征向量 x i x_i xi x i x_i xi的标量投影到 p p p y i y_i yi y i y_i yi表示节点 i i i投影到方向 p p p所保留的信息 y i = x i p / ∣ ∣ p ∣ ∣ y_i=x_ip/||p|| yi=xip/p,选择投影在 p p p上具有最大标量投影值的节点形成一个新图。

图池化层的分层传播规则为:

y = X l p l / ∣ ∣ p l ∣ ∣ , y=X^lp^l/||p^l||, y=Xlpl/pl,
i d x = r a n k ( y , k ) , idx=rank(y,k), idx=rank(y,k),
y ^ = s i g m o i d ( y ( i d x ) ) , \hat{y}=sigmoid(y(idx)), y^=sigmoid(y(idx)),
X ~ l = X l ( i d x , : ) , \widetilde{X}^l=X^l(idx,:), X l=Xl(idx,:),
A l + 1 = A l ( i d x , i d x ) , A^{l+1}=A^l(idx,idx), Al+1=Al(idx,idx), − − − − − − − − − − ( 2 ) ----------(2) (2)
X l + 1 = X ~ l ⊙ ( y ~ 1 C T ) X^{l+1}=\widetilde{X}^l\odot(\widetilde{y}1_C^T) Xl+1=X l(y 1CT)

k k k是新图中选中的节点的数量;节点的排序操作 r a n k ( y , k ) rank(y,k) rank(y,k) i d x idx idx中包含着 k k k个最大值的索引 y y y;根据 i d x idx idx提取出新图的邻接矩阵 A ( i d x , i d x ) A(idx,idx) A(idx,idx)以及特征矩阵 X ( i d x , : ) X(idx,:) X(idx,:); 1 C ∈ R C 1_C\in \mathbb{R}^C 1CRC向量大小长度为C所有元素为 1 1 1

通过将门操作(gate operation)进行反向传播,训练投影向量 p p p。如果没有门操作,投影向量 p p p将离散的输出,这使得它不能通过反向传播进行训练;另一方面增加少量额外的参数 p p p可以显著提高模型性能。
在这里插入图片描述
在这里插入图片描述

Grapn Unpooling Layer

上采样操作对于U-Net这样的Encoder-Decoder模型来说是非常重要的部分。在Encoder中通过使用下采样减少feature map的大小,同时扩大感受野;在Decoder中通过使用上采样还原原始的分辨率。

作者提出的graph unpooling layer是gPool的反向操作,通过记录gPool中选中节点的位置,根据位置信息能够将图数据恢复到原始的结构。

X l + 1 = d i s t r i b u t e ( 0 N × C , X l , i d x ) X^{l+1}=distribute(0_{N \times C },X^l,idx) Xl+1=distribute(0N×C,Xl,idx)

i d x ∈ Z ∗ k idx \in Z^{*k} idxZk包含通过gPool选中节点的索引,将图中的 N N N个节点减少到 k k k个节点, X l ∈ R k × C X^{l} \in \mathbb{R}^{k \times C} XlRk×C表示新图的特征矩阵; 0 N × C 0_{N \times C } 0N×C表示图的初始化为全0特征矩阵, d i s t r i b u t e ( 0 N × C , X l , i d x ) distribute(0_{N \times C },X^l,idx) distribute(0N×C,Xl,idx) X l X^l Xl向量的每行根据索引放入 0 N × C 0_{N \times C } 0N×C ,根据 X l X^l Xl的行向量以及索引更新 X l + 1 X^{l+1} Xl+1的行向量,其他行向量仍保持为0。

Graph U-Nets Architecture

在 graph U-Nets中 首先通过图嵌入层将图转换成低维表征,通过堆叠多个编码块(encoding block)形成encoder,每个GCN层之后加一层gPool层,gPool层通过减小图的大小以实现对高阶特征的编码,而GCN层负责从每个节点的一阶信息中聚合信息。

在decoder中,作者堆叠与encoder中相同数量的block。每个解码块由gUnpool层以及GCN层组成,gUnpool层将图还原到更高的分辨率结构,GCN层将邻居的信息进行聚合。跳跃连接(skip-connections)对应相同层级之间的编码层和解码层,跳跃连接将空间信息传递到解码器中实现更好的性能。跳跃连接可以通过feature map相加或者concat实现,在经过 s o f t m a x softmax softmax之前通过GCN层实现最终的预测。

下图为简单的g-U-Net结构在encoder以及decoder分别包含了两个block:
在这里插入图片描述

Graph Connectivity Augmentation via Graph Power

gPool通过采样重要的节点,然后形成一个编码high-level 特征的图,当gPool将一些节点移除的同时也会移除相关的边,gPool图中的节点可能会变得孤立。这可能会影响后续层中的信息传播,特别是当使用GCN层来聚合来自邻近节点的信息时。我们需要增加池化图中节点之间的连接性。

使用 K t h K^{th} Kth graph power(应该是类似于数学的幂运算) G k \mathbb{G}^k Gk增加图的连通性。在这项工作中,作者采用使用 k = 2 k=2 k=2,由于在GCN层之后接一个gPool层从一阶邻居中聚合信息:

A 2 = A l A l , A l + 1 = A 2 ( i d x , i d x ) , A^2=A^lA^l, A^{l+1}=A^2(idx,idx), A2=AlAl,Al+1=A2(idx,idx),其中 A 2 ∈ R N × N A^2\in \mathbb{R}^{N \times N} A2RN×N表示图的二次幂,在经过处理之后的图上有更强的连通性。

Improved GCN Layer

由于在进行预测时自身节点的特征显得更加重要,在处理之前的邻接矩阵的标准化是通过 A ^ = A + I \hat{A}=A+I A^=A+I给图中添加一个self-loop,在进行信息聚合时,对节点自身的特征向量及其邻近节点给予相同的权值,这种方法显得不太合理。作者通过改变计算公式 A ^ = A + 2 I \hat{A}=A+2I A^=A+2I ,证明提高自身特征的权重可以更好地提高性能。

Experimental Study

作者分别评估网络在Transductive learning条件下进行节点分类任务以及在Inductive learning条件下进行图分类任务的性能。

首先,将CoraCiteseer以及Pubmed作为节点分类的基准数据集,详细信息如下表所示:
在这里插入图片描述

Transductive learning任务中,gU-Net模型的encoder部分包含四个block,每个block包含一个GCN层以及gPool层。在四个gPool层分别采样2000,100,500,200个节点;decoder部分包含四个block,每个block包含一个GCN层以及一个gUnpool层,在每层对应的encoder与decoder中添加跳跃连接,最后通过一个GCN层进行用于最终的分类。在每个GCN层之后使用单位激活函数(Identity activation function)

MethodValue
L 2 L_2 L2 regularization λ = 0.001 \lambda = 0.001 λ=0.001
d r o p o u t 邻 接 矩 阵 dropout_{邻接矩阵} dropout0.8
d r o p o u t 特 征 矩 阵 dropout_{特征矩阵} dropout0.08

节点分类任务的实验结果如下表所示

在这里插入图片描述

选择D&D、PROTEINS以及COLLAB作为图分类任务的基准数据集
在这里插入图片描述
Inductive learning任务阶段采取了与transductive learning任务中一致的架构。由于在图分类任务中图的大小是不确定的,作者在四种不同的gPool层中分别采样90%,70%,60%,50%的节点,特征矩阵的Dropout设置为0.3。图分类任务的实验结果如下表所示。

在这里插入图片描述
作者进行消融实验分别检验gPool层、gUnpool层和增强图的连通性这三个方面对性能提升的贡献,以及 网络深度与节点分类性能之间的关系和gPool层中涉及的额外参数是否会增加过拟合的风险。
在这里插入图片描述

Tabel 5.中的结果显示gPool与gUnPool层能够有效提高性能

在这里插入图片描述

Table 6.中的结果表明,缺乏图连通性将导致三个数据集的性能下降。这表明可以通过二次图幂运算增加图的连通性,提高抽样图中节点间的图连通性和信息传递。

在这里插入图片描述

Table 7.中的结果显示,网络的性能并不会随着网络的深度增加而提高,当网络深度为4层时,网络的性能最好;当网络的深度大于4时出现了过拟合的现象。

在这里插入图片描述

Table 8.中的结果显示,添加gPool层以及gUnPool层之后虽然增加了一部分参数量但是分类性能提高了2.3%。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值