论文介绍
这篇论文是图神经网络领域的综述性质的文章,从各个论文里面凝聚和提取了很多精炼的信息和观点,值得一读。
论文是2020年成稿投出去的,有点陈旧的。
GNN的介绍
在introduction里面对比了GNN和CNN,表示出CNN的关键是局部连接,共享权重,和多层的使用。其中CNN操作的是常规欧几里得空间内的数据
而CNN的卷积核很难针对非欧式空间的数据进行采集。
从上面的例子可以看出,CNN的整个图像,自带空间信息, 卷积共享权重一方面可以降低参数量,另外一方面可以定义卷积操作的信息提取能力。
而GCN的关键是:通过领接矩阵A对节点特征进行聚合,用于更新某节点特征。而GCN的基于的假设是:节点的特征与其邻居特征节点有着密切的关系,并且距离越近的邻居关系越大
而GCN的卷积算子定义为:
class GraphConvolution(nn.Module):def __init__(self, input_dim, output_dim, use_bias=True):super(GraphConvolution, self).__init__()self.input_dim = input_dimself.output_dim = output_dimself.use_bias = use_biasself.weights = nn.Parameter(torch.Tensor(input_dim, output_dim))if self.use_bias:self.bias = nn.Parameter(torch.Tensor(output_dim))else:self.register_parameter('bias', None)self.reset_parameters()def reset_parameters(self):init.kaiming_uniform_(self.weights)if self.use_bias:init.zeros_(self.bias)def forward(self, adjacency, input_feature):support = torch.mm(input_feature, self.weights)output = torch.sparse.mm(adjacency, support)if self.use_bias:output += self.biasreturn output
从上面的代码可以看出,每次乘以拉普拉斯矩阵,表示着聚合了本节点和领居节点的特征。其中两个GraphConvolutionLayer的结合,可以聚合了其邻居节点的邻居节点。
由此可以看出每次多一层layer,则提取的信息,可以多一跳的节点。
如何设计GNN
(1)从场景中确定图的结构,图的节点和边分别对应场景中的什么构件
(2)确定图的类型和规模,图是否有向,是否异构图(节点和边是否同一个类型)
(3)设计损失函数,损失函数在不同级别的,可以是节点级别,边级别和图的级别
(4)使用不同的计算模块搭建模型,传播模块,采样模块,池化模块都可以用来组合GNN。
无监督学习中训练GNN的方式
(1)图的自动编码 (Graph auto-encoders),可以用于节点聚类和链路预测的场景中
(2)对比学习(Contrastive learning),通过图级表示和不同级别的节点结构的互信息最大化来进行学习图信息
GNN的分析
(1)图信号处理
最早处理图卷积的是拉普拉斯平滑,对特征矩阵进行平滑,能够提取到附近节点的特征。拉普拉斯平滑的理论基础是同质性假设。
(2)泛化能力
GNN的稳定性取决于滤波器的最大特征值。
注意力机制有助于GNN泛化到最大且有噪声的图
(3)表达能力
GNN的无限层和单元的表达能力需要进一步研究
(4)不变性
因为图没有节点顺序,可以置换不变或者等变线性层来构建不变的GNN
(5)可转移性
GNN的一个确定性特征是参数和图无关,具有跨图转移能力。
(6)标记效率
对于半监督学习,选择高度节点和不确定节点等信息丰富的节点,可以提高半监督的标记效率
GNN的应用
结构化场景中的应用
(1)图挖掘,例如:子图挖掘,图匹配,图分类,图聚类
(2)物理,模型根据系统当前状态和物理原理来推理下一个状态
(3)化学和生物,编码分子结构中的应用,化学反应预测,蛋白质表面的相互关系预测
(4)知识图谱,现实世界实体的集合以及实体对之间的关系。
(5)生成模型
(6)组合优化
(7)交通网络
(8)推荐系统
(9)其他应用,如股票预测,软件的路由性能优化,
在非结构化场景中的应用
(1)图片,知识图谱可以作为额外信息来指导零样本识别分类
(2)文本,主要是翻译
总结
论文综合指出了如何设计和应用GNN,总结得比较精炼,适合初学者。引用的文章和链接都是高质量的。