图神经网络(GNN)简介
图神经网络(GNN)简介
图神经网络(GNN)是一种用于处理图结构数据的神经网络模型。它能够有效地捕捉图中节点之间的关系,并通过多层神经网络进行特征学习。本文将介绍GNN的基本概念、输入格式以及其核心工作原理。
图的邻接矩阵(类似数据结构的图)
图:
每个像素点周围都有邻居,中间的是邻接矩阵(25*25)主对角线对称。A表示邻居之间的关系。
GNN(A,X),A是每个点和其他点之间的关系,X是每个点的特征
文本数据
文本数据也可以表示图的形式,邻接矩阵表示是连接关系,也就是词之间的有向连接
GNN输入格式
在cv、nlp和其他神经网络结构中对输入格式有一定要求,但是GNN输入数据可以不规则,适应不同类型的图数据和应用场景。
以下是一些常见的GNN输入格式的要素,它们在不同的框架中可能有所变化,但核心概念是相似的:
节点特征矩阵:在不同的框架中,这可能被称为
node_features
、
x
、
features
等。它是一个二维数组或矩阵,其中每一行代表一个节点的特征向量。
邻接矩阵或边列表:在某些框架中,这可能被称为
adjacency_matrix
、
edge_index
、
edges
等。它表示图中节点之间的连接关系。邻接矩阵是一个方阵,而边列表是一个形状为(2, E)的矩阵,其中E是边的数量。
边特征矩阵(如果存在):这可能被称为
edge_features
、
edge_attr
等。它是一个二维数组或矩阵,其中每一行代表一条边的特征向量。
图的标签:在节点分类或图分类任务中,这可能被称为
labels
、
y
等。它是一个一维数组,其中每个元素对应于一个节点或图的标签。
掩码:在半监督学习中,这可能被称为
train_mask
、
val_mask
、
test_mask
等。它们是布尔数组,用于区分训练集、验证集和测试集中的节点。
图的索引(如果处理多个图):在处理多个图的情况下,这可能被称为
graph_indices
、
batch
等。它是一个一维数组,用于指示每个节点属于哪个图。
邻接矩阵
邻接矩阵表达形式应该是(source,target)
消息传递神经网络(每个点如何更新)
1、每个点更新时,需要考虑邻接结点
上图
每一个点提供的特征,有一组可学习的参数经过一个可学习的特征映射得出的结果,即特征 xj 通过一个权重矩阵Wj 进行变换。
节点 i 的当前特征表示 hi 通过权重矩阵 W1 进行变换这个是邻居节点 j 的特征表示 hj 通过权重矩阵 W2 变换后进行求和,得到邻居节点特征的聚合。最后,将节点 i 的变换特征与邻居节点特征的聚合相加,并通过一个非线性激活函数 σ(如ReLU)进行变换,得到节点 i 的新特征表示 hi
一些概念
GNN本质是更新各部分的特征:在每一轮迭代(或称为层)中,每个节点会收集来自其邻居的信息,并结合自己的特征,通过神经网络层进行处理,从而得到新的特征表示
邻接矩阵不会变化:在大多数GNN模型中,邻接矩阵是固定的,它定义了图中节点之间的连接关系。这个矩阵在训练过程中不会变化,它为GNN提供了图的结构信息
GNN经过多层融合之后,一个节点的感受野会越来越大,最终可以覆盖整个图:随着GNN层数的增加,每个节点的感受野(即节点能够直接或间接获取信息的范围)会逐渐扩大。在单层GNN中,节点只能获取其直接邻居的信息。但是,随着层数的增加,节点能够获取到的信息将包括其邻居的邻居,以及更远的节点。理论上,经过足够多层的融合后,一个节点的感受野可以覆盖整个图。