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
- 由于Graph Data的表征学习问题,不能像CNN能够对图像进行Pooling或者Up-sampling操作。由于给定的Images 可以认为是一种节点位于2D表格上Graph的特殊情况,因此很自然地可以将node classification、graph embedding与像素级别的分割任务对应。
- 特别是Encoder-Decoder的经典模型U-Nets已经在图像处理领域大放异彩,但是在Graph Data领域中缺乏与之类似的方法。
由于受到U-Net结构的启发,作者希望可以构建类似U-Net的架构,包含三种Block分别是:卷积(convolutions)、池化(pooling)和上采样(up-sampling)操作,推广到图数据。由于网格数据与图像和文本数据不同,graph中的节点没有常规池化操作所需的空间位置和排列顺序的信息。
为了解决上述问题,作者提出以下方法解决Graph Data适应的问题
- graph pooling (gPool) 与 unpooling (gUnpooling)操作
- 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 K−Max 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), id