1 什么是图神经网络
图神经网络(Graph Neu做ral Networks, GNNs)是一种基于图结构的深度学习方法,从其定义中可以看出图神经网络主要由两部分组成,即“图”和“神经网络”。这里的“图”是图论中的图数据结构,“神经网络”是我们熟悉的深度学习NN结构,如MLP,CNN,RNN等。要了解图神经网络我们需要先回顾一下“图”和“神经网络”的基本概念。
1.1图的定义
1.2典型神经网络
典型的神经网络结构有两条主线,一条主线是卷积神经网络,简称CNN,主要用于图像类数据的处理。另一条主线是循环神经网络,简称RNN,主要用于时序类数据的处理。由于神经网络结构的介绍不是本篇的重点,因此在这里不做重点介绍。只展示如下两图典型的CNN和RNN的结构:
下图展示了当前的主流神经网络结构以及适用的场景:
1.3 图神经网络
根据上述对图和神经网络的回顾,我们可以看出,图神经网络就是借助神经网络的“能力”如深度特征抽取等来处理图结构的数据,因此对于图神经网络,其直观的结构应该如下图:
其中图结构的数据有许多,如社交网络图、交通路线图、人物关系图、分子结构图、计算结网络拓扑图等等。 ...
1.数学定义
图网络: , 其中节点的数量 。对于当前的图网络他的邻接矩阵是 。某一个节点的特征用 表示, 矩阵 是整个图网络的节点特征的矩阵表示。
随机的潜在变量:某一个随机潜在变量用 表示,矩阵 表示图网络的所有节点被编码之后的潜在变量。
2. 方法
2.1推断模型(其实我觉得叫做编码模型更加合适)
1)首先用图卷积网络求出每个节点的高斯分布的均值和方差:
其中 ,其是一个两层的网络, 是归一化的邻接矩阵。
2)根据所求得的节点特征编码的均值和方差,我们可以得到推断模型:
(个人理解,之所以用乘积连接各个不同的分布,旨在求得N个独立的变量的联合分布)
这样每一个节点都有一个具有特定均值和方差的高斯分布去表示。
2.2生成模型
, 且 (这里有个问题,当 时候 是什么呢?)
2.3目标函数
最大化这个variational lower bound目标函数, 从而优化GCN的层参数 和 。
注:目标函数中的期望项只包括了标签为1的node,而标签为0的node是不予考虑的。在代码里是这样的操作的(见代码解读部分):在计算交叉熵损失的时候,给标签为1的 ...
一、度中心性 Degree Centrality
在网络中,一个节点的度越大,就意味着这个节点的度中心性就越高,就说明在网络中这个节点越重要。
其中,n表示节点的数量, 表示该节点的度。
二、特征向量中心性 Eigenvector Centrality
一个节点的重要性取决于其邻居节点的数量(即该节点的度),也取决与其邻居节点的重要性。与之相连的邻居节点越重要,则该节点就越重要。
特征向量中心性的计算公式如下:
假设 表示节点i的重要性,则
其中,c为比例常数,记 ,经过多次迭代达到稳态时,可以写成如下矩阵形式:
x=cAx.
这里x表示的是矩阵A的特征值 对应的特征向量,也可以表示成 这种形式。
1(哎,百度出来的,其实自己也没看明白,多次迭代到稳态是什么意思啊。。。)
于是自己又在b站上面看了个视频。
如图,先求出该图所表示的邻接矩阵的特征值。选最大的一个特征值2.48,求出对应的特征向量。将其乘以-1,是没有影响的。于是得到了图中所示的特征向量中心性
{1:0.53,2:0.358, 3:0.358 , 4:0.427 ,5:0.53}
可以看到,1和5节点的特征 ...
许多场景中的图数据是由多个图组成,而不是单个的大图数据。例如不同类型的人群社区。 通过用图刻画同一社区里人与人间的友谊,可以得到多张用于分类的图。 在这个场景里,整图分类模型可以识别社区的类型,即根据结构和整体信息对图进行分类。
概述¶
整图分类与节点分类或链接预测的主要区别是:预测结果刻画了整个输入图的属性。 与之前的任务类似,用户还是在节点或边上进行消息传递。但不同的是,整图分类任务还需要得到整个图的表示。
整图分类的处理流程如下图所示:
整图分类流程¶
从左至右,一般流程是:
准备一个批次的图;
在这个批次的图上进行消息传递以更新节点或边的特征;
将一张图里的节点或边特征聚合成整张图的图表示;
根据任务设计分类层。
批次的图¶
整图分类任务通常需要在很多图上进行训练。如果用户在训练模型时一次仅使用一张图,训练效率会很低。 借用深度学习实践中常用的小批次训练方法,用户可将多张图组成一个批次,在整个图批次上进行一次训练迭代。
使用DGL,用户可将一系列的图建立成一个图批次。一个图批次可以被看作是一张大图,图中的每个连通子图对应一张原始小图。
批次化的图¶
需要注意,DGL里对 ...
最重要的4类图数据:
同构图(Homogeneous Graph)
异构图(Heterogeneous Graph)
属性图(Property Graph)
非显式图(Graph Constructed from Non-relational Data)。
(1)同构图:
同构图是指图中的节点类型和关系类型都仅有一种。同构图是实际图数据的一种最简化的情况,如由超链接关系所构成的万维网,这类图数据的信息全部包含在邻接矩阵里。
同构图:在图里面,节点的类型和边的类型只有一种的图,
举个例子,像社交网络中只存在一种节点类型,用户节点和一种边的类型,用户-用户之间的连边。
(2)异构图:
与同构图相反,异构图是指图中的节点类型或关系类型多于一种。在现实场景中,我们通常研究的图数据对象是多类型的,对象之间的交互关系也是多样化的。因此,异构图能够更好地贴近现实。
异构图:在图里面,节点的类型+边的类型>2的一种图,
举个例子,论文引用网络中,存在着作者节点和paper节点,边的关系有作者-作者之间的共同创作关系连边,作者-论文之间的从属关系,论文-论文之间的引用关系。
( ...
GCN
GCN的公式看起来还是有点吓人的,论文里的公式更是吓破了我的胆儿。但后来才发现,其实90%的内容根本不必理会,只是为了从数学上严谨地把事情给讲清楚,但是完全不影响我们的理解,尤其对于我这种“追求直觉,不求甚解”之人。
下面进入正题,我们直接看看GCN的核心部分是什么样子:
假设我们手头有一批图数据,其中有N个节点(node),每个节点都有自己的特征,我们设这些节点的特征组成一个N×D维的矩阵X,然后各个节点之间的关系也会形成一个N×N维的矩阵A,也称为邻接矩阵(adjacency matrix)。X和A便是我们模型的输入。
GCN也是一个神经网络层,它的层与层之间的传播方式是:
这个公式中:
A波浪=A+I,I是单位矩阵
D波浪是A波浪的度矩阵(degree matrix),公式为
H是每一层的特征,对于输入层的话,H就是X
σ是非线性激活函数
我们先不用考虑为什么要这样去设计一个公式。我们现在只用知道:
这个部分,是可以事先算好的,因为D波浪由A计算而来,而A是我们的输入之一。
所以对于不需要去了解数学原理、只想应用GCN来解决实际问题的人来说,你只用知道:哦,这个GC ...
前言
在之前介绍的GraphSAGE[3]文章中,通过融合当前节点的邻居节点来获得这个节点的特征表示,从而将GCN扩展到了归纳学习的领域。在GraphSAGE中,各个邻居节点被等同的看待,然而在实际场景中,不同的邻居节点可能对核心节点起着不同的作用。这一部分要介绍的GAT(Graph Attention Network)[1]就是通过自注意力机制(self-attention)[2] 来对邻居节点进行聚合,实现了对不同邻居的权值自适应匹配,从而提高了模型的准确率。GAT在归纳学习和转导学习的任务中均取得了不错的效果。源代码参考:https://github.com/PetarV-/GAT
1. GAT详解
和很多深度学习方法类似,GAT由若干个功能相同的block组成,这个block叫做Graph Attention Layer,首先我们先介绍Graph Attention Layer的结构。
1.1 图注意力层
图注意力层(Graph attention layer)的输入时节点的特征值 ,其中 是节点的个数, 是节点特征的维度。经过一个Graph Attention Laye ...
一、图的逻辑结构
(一)图的定义
图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E)
ps:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。
(二)基本概念
1.无向边:顶点vi和vj之间的边没有方向,表示为(vi,vj)。
2.无向图:顶点vi和vj之间的边没有方向,表示为(vi,vj)。
3.有向边:从顶点vi到vj的边有方向,表示为<vi,vj>。
4.有向图:图的任意两个顶点之间的边都是有向边。
5.简单图:若不存在顶点到其自身的边,且同一条边不重复出现。
6.邻接、依附:无向图中,对于任意两个顶点vi和顶点vj,若存在边(vi,vj),则称顶点vi和
顶点vj互为邻接点,同时称边(vi,vj)依附于顶点vi和顶点vj。
7.无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。
8.有向完全图:在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图
为有向完全图。
(三)基本术语
1.稀疏图:称边数很少的图为稀疏图;
2.稠密图:称边数很多的图为稠密图。
3.顶点的度:在无向图中,顶点v的度是 ...
注意力机制最初在 2014年作为 RNN(Recurrent Neural Network)中编码器-解码器框架的一部分来编码长的输入语句,后续被广泛运用在RNN中。
1.单路注意力
SE-NET(Squeeze and Excitation)
HU J,SHEN L,SUN G.Squeeze-and-excitation networks[J].
2018年 ,CVPR(计算机视觉和模式识别)收录的论文中提出了 SE-Net(挤压和励磁网络)是 Momenta 胡杰团队 (WMW)提出的新的网络结构,该团队利用 SE网络获得 了ImageNet 2017年竞赛图像分类任务的冠军,在ImageNet数据集上将 top-5错误降低到 2.251%,对比于以往的最 好成绩 2.991%有了较大的提升。
SE-Net中的关键结构SE-Netblock利用了注意力机制的思想,显式地建模特征图之间的相互依赖关系,并通过学习的方式来自适应地获取到每张特征图的重要性,然后依照这个重要程度去对原数据进行更新。SE-Net通过这种方式提升有用的特征重要程度同时降低无用特征的重要性,并以不同通道的重 ...
在DGL中,可以使用dgl.degree、dgl.in_degree和dgl.out_degree函数来计算图的度、入度和出度。此外,DGL还提供了一些其他库和函数来计算不同类型的中心性度量。以下是几种常见的中心性度量及其计算方法:
度中心性(Degree Centrality):度中心性衡量一个节点与图中其他节点之间的连接数量。可以使用dgl.degree函数计算节点的度。
123456import dgl# 创建图g = dgl.graph(([0, 1, 2], [1, 2, 3]))# 计算节点的度中心性degree_centrality = dgl.degree(g).float() / (g.number_of_nodes() - 1)print("Degree Centrality:", degree_centrality)
介数中心性(Betweenness Centrality):介数中心性衡量一个节点在图中的最短路径中充当桥梁的频率。可以使用dgl.contrib.sampling.sampler.BetweennessCentrality ...