GCN与CNN有很多相似之处。GCN的卷积思想也是基于CNN卷积的优秀表现所提出的,。GCN由于其表达形式和卷积方法特殊性,在节点分类任务(引文网络)中,只有简单的3-4层可以把任务完成的很好。但是对于一些其他的的任务,可能浅层的网络模型没有办法很好的处理数据。但是当把GCN的层数增多之后,会出现梯度消失和over-smoothing的问题,与当时CNN的层数加深出现的问题相似,因此自然想到了应用在CNN上的方法迁移到GCN上。
本文提出了几种加深GCN的思路,并进行实验,事实证明确实提高了性能
梯度消失/爆炸出现的两种情况
因为计算梯度的公式中有参数求导连乘的情况,因此层数增多后,一旦有多个连续<1 或者>1 的导数连乘,最终参数的梯度就会接近0(连续<1),又称为梯度消失 或接近无穷(连续<1)又称为梯度爆炸。
意思就是,在拓扑图结构中,一层GCN 聚合了1阶邻居的节点信息,2层GCN 聚合了2阶邻居节点的信息, n层GCN 就聚合了n 阶邻居节点的信息,在一张连通图当中,每个节点用于聚合的邻居节点重合度较高,很容易导致每个节点学出来的特征表示是一致的。这样节点的特性就被掩盖掉了, 图卷积神经网络层数增多后,聚合的邻居变多,不同节点重合的邻居节点数变多,因此会出现over-smothing 现象。
解决思路:(通过有效地改变图的结构或卷积的领接节点来解决。比如在点云里用动态knn/dilation来建边)
此篇文章是基于GCN解决点云方面问题,与传统节点分类预测任务在网络结构上不太一致,但是殊途同归。因此本文介绍的是一种更加普适于点云任务的GCN网络结构模块
聚合函数可以是mean、aggregator、max-pooling aggregator、attention aggregator或LSTM aggregator。更新函数可以是多层感知器,门控网络等。
本文使用一个简单的max-pooling顶点特征聚集器,在没有可学习参数的情况下,来聚集中心顶点与其所有相邻顶点之间的特征差异。使用的更新器是一个有batch normalization的多层感知器(MLP)和一个ReLU作为激活函数。
大多数GCN只在每次迭代时更新顶点特征。最近的一些工作表明,与具有固定图结构的GCN相比,动态图卷积可以更好地学习图的表示。例如,ECC(Edge-Conditioned Convolution,边缘条件卷积)使用动态边缘条件滤波器(dynamic edge-conditional filters)学习特定边的权重矩阵。EdgeConv在每个EdgeConv层之后,找到特征空间中最近的邻居来重建图形。为了学习点云的生成,Graph-Convolution GAN(生成对抗网络)还应用k-NN图来构造每一层顶点的邻域。动态变化的GCN邻居有助于缓解过度平滑的问题,并产生一个有效的更大的感受野。因此,文中在每一层的特征空间中通过一个Dilated k-NN函数来重新计算顶点之间的边,以进一步增加感受野。
深层卷积神经网络中的残差块,卷积层之间跳跃连接,可以保证两个网络之间一定有梯度反传。
相比与Res-net 每一层的输出 包括该层的输出H(x)和上一层的输出x Dense-net 的输入 包括上一层及上一层前所有层的输入并且 每一层的网络更加稠密,宽度更小
按照一定的比例在图卷积中制造一些空洞,在图像分割等端到端的图学习任务中,减少了下采样和上采样的过程,从而缓解了梯度反传。
从总体结构上看,论文提出了三种结构:
PlainGCN: 每层模块接收上一层的输出,作为输入,内部处理完后,产生输出。
ResGCN:每层模块接收上一层的输出,作为输入,内部处理完后,产生的输出,从输入加了一个Residual连接。
DenseGCN:每层模块接收之前所有层的输出,作为输入。
每层模块内部更新feature的过程,可以分为两个操作步骤:选邻居、计算feature:
选邻居。以点xi 为中心,用 KNN选出 K 个最近的点。为了增加每个点的receptive field,论文在KNN的基础上,文提出了dilated KNN选点方法。
计算feature。选出点后,有多种方式来计算xi的feature。代码中实现了4种。
Feature融合模块以segmentation为例,该模块使用一个卷积层处理后,用max_pool将点云中所有点的feature整合为一个点云的全局feature,再将该全局feature拼接到每个点的feature上。
此时,每个点既有局部信息,也有全局信息。
预测模块用多个卷积层对每个点的feautre进行处理、降维,计算出每个点属于每个类的概率。
实验与三维点云分类任务有关,在这里省略