Introduction

下采样和上采样

​ 卷积神经网络可以很自然地对图像进行操作,但在处理图形数据时却面临着巨大的挑战 。像U-Net这样的编码器-解码器体系结构已成功应用于许多图像像素级的预测任务,但对于图形数据却缺乏类似的方法。这是由于图神经网络在图数据上难以自然地进行池化和上采样。

1. gpool层根据节点在可训练投影向量上的标量投影值,自适应地选择节点形成较小的图。
2. gUnpool根据在相应的gPool层中选择的节点位置信息,gUnpool层将图恢复到其原始结构。 
3. 使用gpool和gUnpool构造U-Net

U-Net

Relate

GCN(kipf)

Xl+1=σ(D^1/2A^D^1/2XlWl)X_{l+1} = \sigma(\hat{D}^{-1/2}\hat{A}\hat{D}^{-1/2}X_{l}W_{l})

论文链接

GraphSAGE

采样固定数量的相邻节点 ,使用聚合器进行节点特征的更新

论文链接

GAT

  • 使用注意力机制计算某个节点邻居的权重
  • mutli-head

论文链接

Graph classification

DGCNN

graph pooling

  • Convolutional neural networks on graphs with fast localized spectral filtering,Defferrard,NIPS 2016 使用二叉树索引进行图粗化,在应用1-D池化操作之前固定节点索引。

  • Dynamic edge-conditioned filters in convolutional neural networks on graphs,CVPR 2017

使用确定性图聚类算法确定池化模式。

  • Hierarchical graph representation learning with differentiable pooling,NIPS 2018

使用assignment矩阵,通过将节点分配到下一层的不同cluster来实现池化。

Graph U-Nets

使用gPool层和gUnpool层构建graph U-Nets

Graph Pooling Layer

​ 池层在CNNs中对网格状数据起着重要的作用。它们可以减小特征图的尺寸,增大感知域,从而产生更好的泛化和性能。在图像等网格数据上,将特征图分割成不重叠的矩形,并对其应用极大值等非线性降采样函数。除了loca lpooling之外,global pooling对所有输入单元执行向下采样操作,从而将每个特征映射重新导出为单个数字。相反,k-max pooling选取最大的k个单元。

​ 普通池化不能直接用于图,全局池化将所有节点映射到一个节点上,限制了网络的灵活性

gpool

gpool

  1. 可训练的投影向量pp,将所有节点特征投影到1D,然后执行k-max池化来选择节点。

yi=xip/py_i = x_ip/||p||

  1. yiy_i衡量xix_ipp上投影后保留的信息

  2. 1583696332752

反向传播
用通过rank得到的索引对特征图XlX_l进行切片,得到k个节点的特征图$\tilde{X_l} ,,时,这一操作无法进行梯度的传播,需要添加一个到\tilde{X_l} $的操作以得到新的特征图

Graph Unpooling Layer

​ 上采样操作对于诸如U-Net的编码器-解码器网络很重要。 网络的编码器通常采用池化操作来减小特征图的大小并增加接收范围。 解码器需要向上采样以恢复其原始分辨率,对应的操作有deconvolution 和 unpooling 层

​ 为了支持对图形数据的上采样操作,提出了图形反池(gUnpool)层,它执行gPool层的反向操作,并将图形恢复到其原始结构。记录在相应的gPool层中选择的节点的位置,并使用这些信息将节点放回图中它们最初的位置

反池化层的传播公式

Xl+1=distribute(0N×C,Xl,idx)X^{l+1} = distribute(0_{N\times C,X^{l},idx})

0N×C0_{N\times C}:新的特征图的初始空矩阵

XlRk×CX^{l} \in R^{k\times C}

Xl+1RN×CX^{l+1} \in R^{N\times C}

idxZkidx \in Z^{*k} 在gpooling层中被选择的k个节点的位置信息

Xl+1X^{l+1}中,索引在idxidx中的向量由XlX^{l}对应的向量进行更新,其他保持0

gUnpool层利用位置信息,利用未选择节点的空特征向量来重构原始的图形结构

Graph U Net

graph U Nets中,首先使用一个图嵌入层,将节点特征转为低维表示。在图嵌入之后,通过堆叠几个编码块来构建编码器,每个编码块包含一个gPool层和一个GCN层。gPool层通过减少图的大小来编码高维特征,而GCN层负责从每个节点的一阶邻居聚合信息。在解码器部分,堆叠了与编码器部分数量相同的解码块。每个解码器块由一个gUnpool层和一个GCN层组成。gUnpool层将图恢复到更高分辨率的结构,而GCN层则聚合来自邻居的信息。在编码器和解码器层对应的块之间存在 skip-connections,这些连接将空间信息传输给解码器以获得更好的性能。skip-connections可以是feature map addition或concatenation。最后,使用一个GCN层和softmax函数进行最后的预测。

通过Graph Power 增加图的连通性

​ 在使用gpool中,删除节点的同时会删除一些边,会影响到后续信息的传播,所以需要增加池化了的图中节点的连接性。

Gk:GKG^k:图G的K次幂 可以在图G中最多k跳的节点之间建立链接

设k=2, 添加2跳链接,A2=AlAl,Al+1=A2( idx , idx )A^2=A^lA^l,A^l+1=A^2( idx , idx )

Improved GCN Layer

Xl+1=σ(D^1/2A^D^1/2XlWl)X_{l+1} = \sigma(\hat{D}^{-1/2}\hat{A}\hat{D}^{-1/2}X_{l}W_{l})

A^=A+2I\hat{A} = A + 2I(强调自身节点信息)

参考

  1. 论文链接

  2. 源码

  3. Graph U-Nets [gPool gUnpool] 图分类 节点分类 图池化 ICML 2019

  4. Unet-简介

  5. Unet-论文