Graph U-Nets小结
Graph U-Nets中提出了gPool和gUnpool两个操作,基于这两层生成encoder-decoder的模型,关于gPool层:
1. 这里使用一个可训练的投影向量,将所有的点投影到1D上,对于每个点的特征向量都有:,保留了节点投影到方向上时的信息
2. 进行池化操作时,是取上的前个。为了尽可能多的保留前面图上的特征信息,这里先将投影到上的排序,然后取前个:
3. 然后根据2中拿到的索引对对应的行**操作:
4. 根据2中得到的索引截取特征:
5. 根据2中得到的索引形成新的邻接矩阵:
6. 根据2中得到的索引形成新的特征矩阵,其中用来控制所选节点的信息
上述过程就完成了图数据上的池化操作过程,得到了池化后的特征矩阵和邻接矩阵,下面是gPool的过程图以及各个标识符的意义:
上述的池化层即模型中的encoder部分,主要是减少特征图的大小,扩大感受野,在decoder部分特征图需要进行上采样操作,回复原来的分辨率。这里Granph U-Nets中提出了gUnpool层,将图恢复到其原始结构。为了实现这一点,记录gPool层中选择的点的位置信息,并利用这些信息将这些点放回原始位置。这里作者提出图的分层传播规则: 。
其中包含了从个节点选出个节点的索引信息,是当前图的特征矩阵,是新图初始的空特征矩阵。即根据相应的索引,将行向量填入新的特征空矩阵,矩阵的其他地方则保持为0。下图示从gPool到gUnpool的过程:
文章提到了两处改进:
改进1:为了在GCN层能更好的聚合邻居节点的信息,需要增加节点之间的连通性,这里使用了阶的来聚集其邻居节点的信息,这里取值为2,因为在GCN层已经聚集了一阶的相邻节点的信息。所以这里利用下面的等式来代替gPool层中第五小点处等式:
改进2:邻接矩阵在归一化之前会增加一个自环:,赋予自身节点和邻居节点一样的权重,在这里考虑到自身的特征对预测来说应该更加重要,就增加自身节点的权重,将邻接矩阵改为:。
下图是整个graph u-nets的过程: