第二课.图卷积神经网络

目录

  • 卷积神经网络
  • 图卷积神经网络
    • GNN数据集
    • 图的表示
    • GCN
    • GNN的基准化:Benchmarking Graph Neural Networks

卷积神经网络

在计算机视觉中,卷积网络是一种高效的局部特征提取工具,一个卷积层包含多个filter,每个filter的kernel数量等于输入张量的通道数,输出张量的通道数量就是filter的个数,一个filter中的各个kernel是不同的;
可以理解为不同的filter提取不同的局部特征,filter内的kernel不同是为了获取输入张量上不同通道的局部信息,最后加和得到该filter对应的局部特征相似度;
第二课.图卷积神经网络_第1张图片
上图的输入张量有3个通道,设置了一个filter,容易理解这个filter应当有3个kernel,通过在输入张量上滑动加和得到输出张量,输出张量为1个通道;通过以上计算可见,卷积神经网络其实相当于不同的全连接网络组成一组滤波器(全连接网络不附带激活函数),作用在输入张量的局部特征上,这些局部特征计算得到的张量再组合成为新的张量;

计算机视觉任务中,Pooling layer 用于对局部特征求最大或者求平均,比如这是一个MaxPool2d:
第二课.图卷积神经网络_第2张图片
补充一个部分,MaxPooling其实相当于一个特殊的注意力机制,只不过注意力完全赋给了局部最大的那个值;

2015年出现了ResNet,后继2017年出现DenseNet(以上内容回顾Pytorch笔记本第八课),ResNet的特征融合是特征的元素相加,残差结构减轻了梯度消失vanishing-gradient问题,同时加强了特征的传递,DenseNet的每层卷积输出都会沿着通道拼接前面所有卷积层的输出特征,进一步减轻梯度消失和加强特征传递,更有效地利用了特征;

第二课.图卷积神经网络_第3张图片

现在补充2019年提出的思想CSPNet:Cross Stage Partial Net,CSP的思想是沿着张量的通道维度将部分特征留下,剩余特征用于卷积,在最后把之前留下的那一部分特征(partial)拼接到输出上;
第二课.图卷积神经网络_第4张图片
上图(a)是标准的DenseNet,可看到每层卷积输出都拼接了前面卷积的输出张量,最后将输出张量传递到Transition Layer调整通道数,Transition Layer就是一个简单的 k e r n e l s i z e = 1 × 1 kernelsize=1\times 1 kernelsize=1×1 卷积层;图(b)是融入了CSP思想的DenseNet,可看出保留了一部分特征在最后拼接到DenseBlock的输出张量上,然后进行Transition操作;
CSP保留部分特征在最后进行拼接,这样做可以适当减少学习负担,让模型更易于在嵌入式设备上部署,另外,原始特征的融合加强了CNN的表达能力;

如果将CNN用于图像分类,对比一下,图神经网络GNN可以进行图分类,比如:人脑的各个区域可以由节点表示,节点之间不同的关系反映大脑的意识传递,不同时刻下,对人脑的图结构进行图分类,就可以获知该大脑想要执行什么动作(action);

图卷积神经网络

GNN数据集

在了解图卷积神经网络(GCN,Graph Convolution Networks)前,先认识GNN常用的数据集:

  • KarateClub:数据为无向图,来源于论文An Information Flow Model for Conflict and Fission in Small Groups
  • TUDataset:包括58个基础的分类数据集集合,数据都为无向图,如“IMDB-BINARY”,“PROTEINS”等,来源于TU Dortmund University
  • Planetoid:引文网络数据集,包括“Cora”, “CiteSeer” and “PubMed”,数据都为无向图,来源于论文Revisiting Semi-Supervised Learning with Graph Embeddings,节点代表文档,边代表引用关系
  • CoraFull:完整的“Cora”引文网络数据集,数据为无向图,来源于论文Deep Gaussian Embedding of Graphs: Unsupervised Inductive Learning via Ranking,节点代表文档,边代表引用关系
  • Coauthor:共同作者网络数据集,包括“CS”和“Physics”,数据都为无向图,来源于论文Pitfalls of Graph Neural Network Evaluation。节点代表作者,若是共同作者则被边相连。学习任务是将作者映射到各自的研究领域中
  • Amazon:亚马逊网络数据集,包括“Computers”和“Photo”,数据都为无向图,来源于论文Pitfalls of Graph Neural Network Evaluation。节点代表货物,边代表两种货物经常被同时购买。学习任务是将货物映射到各自的种类里
  • PPI:蛋白质-蛋白质反应网络,数据为无向图,来源于论文Predicting multicellular function through multilayer tissue networks
  • Entities:关系实体网络,包括“AIFB”, “MUTAG”, “BGS” 和“AM”,数据都为无向图,来源于论文Modeling Relational Data with Graph Convolutional Networks
  • BitcoinOTC:数据为有向图,包括138个“who-trusts-whom”网络,来源于论文EvolveGCN: Evolving Graph Convolutional Networks for Dynamic Graphs

GNN是一个广泛的概念,GCN是将卷积思想(邻域聚合)引入GNN,GCN常用于在图数据中解决节点分类问题;例如引文网络,只有部分节点具有已知标签,每个节点都有其属性(特征):
第二课.图卷积神经网络_第5张图片
CNN的邻域聚合对象是规则的张量,GCN的处理对象是当前节点以及其周围直接相连的节点,对比卷积网络,一个节点及其周围相连的节点就是整个图中的一个局部特征:
第二课.图卷积神经网络_第6张图片
上图(b)中看出,GCN正在处理一个红色节点,先获取到其邻居,然后将这些局部节点的特征融合,进行全连接网络一样的变换(与张量 W W W点积),得到当前节点的另一种特征表达,这种表达中包含了该节点的高层语义信息,从而完成节点的分类;

和卷积神经网络一样,GCN也有感受野,比如从一阶邻居节点逐步扩大至二阶邻居节点范围,下图(a)是CNN的感受野变化示意图,图(b)是GCN的感受野变化示意图:
第二课.图卷积神经网络_第7张图片

图的表示

图数据不同于图像张量的规则性,每个节点的邻居节点数量是不固定的,所以需要先用固定的数据形态表达图,首先了解邻接列表Adjacency List:
第二课.图卷积神经网络_第8张图片
如上图所示,存在一个有向图(无向图也是特殊的有向图),现在记录每个节点指向的邻居节点,从而获得该图的邻接列表,虽然邻接列表可以描述图,但依然不利于使用机器进行计算,所以考虑邻接矩阵Adjacency Matrix;

现存在一个图 G G G,共 n n n个节点,从 v 1 v_{1} v1 v n v_{n} vn,定义 A A A为该图的邻接矩阵, A A A的形状为 ( n , n ) (n,n) (n,n),其元素为 a i , j a_{i,j} ai,j,如果存在节点 v i v_{i} vi指向 v j v_{j} vj,则记录: a i , j = 1 a_{i,j}=1 ai,j=1;否则 a i , j = 0 a_{i,j}=0 ai,j=0;回顾第一课,无向图的边是无向边,即两个节点是互相指向,因此无向图的邻接矩阵应该关于对角线对称;比如以下两个图,一个是无向图,一个是有向图,其对应的邻接矩阵为:
第二课.图卷积神经网络_第9张图片
另外补充度矩阵Degree Matrix,度矩阵是对角阵,对角线上的元素为各个顶点的度,节点 v i v_{i} vi的度表示和该节点相关联的边的数量,对于有向图,节点 v i v_{i} vi的度分为节点 v i v_{i} vi的出度和入度,即从节点 v i v_{i} vi出去的有向边的数量和进入节点 v i v_{i} vi的有向边的数量;

对于无向图,节点的度直接记录其关联的边数量,如果一个节点存在自己关联自己情况,关联边数量应该为2,则度为2:
第二课.图卷积神经网络_第10张图片
度矩阵记为 D D D,形状同样是 ( n , n ) (n,n) (n,n),其对角线才有值 d i , i = d e g ( v i ) d_{i,i}=deg(v_{i}) di,i=deg(vi),其他位置值为0;比如以下无向图和其对应的度矩阵:
第二课.图卷积神经网络_第11张图片

GCN

为了在图数据上进行类似卷积一样的局部信息聚合,最简单的方式是:
Z = σ ( A X W + b ) Z=\sigma (AXW+b) Z=σ(AXW+b)
G G G n n n个节点, X X X是所有节点特征组成的张量( n , c n,c n,c), c c c是每个节点的特征维数, A A A是图的邻接矩阵( n , n n,n n,n), W , b W,b W,b是待学习的参数,参数 W W W的形状为 ( c , h ) (c,h) (c,h) h h h代表变换后输出特征的维数,经过 σ \sigma σ非线性变换得到各个节点组合的输出张量 Z Z Z Z Z Z的形状为 ( n , h ) (n,h) (n,h),通常 Z Z Z具有高层语义信息;

考虑以下图数据:
第二课.图卷积神经网络_第12张图片
直接使用邻接矩阵 A A A与特征张量 X X X表达为 A X AX AX,其形状为 ( n , c ) = ( 5 , 3 ) (n,c)=(5,3) (n,c)=(5,3) A X AX AX代表了融合图结构后的特征信息,第1行第1列的值由邻接矩阵第1行与特征矩阵第1列点积得到,同理,第1行第2列的值由邻接矩阵第1行与特征矩阵第2列点积得到,可见 A X AX AX的第1行为节点A的邻居(节点E)的特征信息, A X AX AX的第2行为节点B的邻居(节点E和节点D融合)的特征信息,后面的数据同理;

使用张量 W W W A X AX AX进行线性变换,由于 A X AX AX的每一行已经存储了节点的邻域信息,所以 A X W AXW AXW相当于在对局部信息进行操作,即实现了卷积的思想;

但当前的表达 A X AX AX存在问题,对于无自关联的节点,邻接矩阵的对角线值为0,于是 A X AX AX会丢失当前节点自身的特征信息,只剩下其邻居节点的特征信息;为了解决这个问题,对邻接矩阵进行操作:
A ~ = A + λ I \widetilde{A}=A+\lambda I A =A+λI
通常令 λ = 1 \lambda=1 λ=1,由于单位矩阵对角线值为1,其余值为0,与邻接矩阵相加后正好弥补了节点自身信息丢失的问题,系数 λ \lambda λ决定了节点自身信息的重要程度;

当使用 A ~ \widetilde{A} A 时,改变了图间节点的关系,所以根据新的图更新度矩阵 D D D,此处虽然节点自关联,度的增量可以是2,也可以是1,更新后的度矩阵记为 D ~ \widetilde{D} D
第二课.图卷积神经网络_第13张图片
使用到度矩阵是为了对数据的尺度进行缩放,可以表达为:
D ~ − 1 A ~ X \widetilde{D}^{-1}\widetilde{A}X D 1A X
A ~ \widetilde{A} A 的第 i i i 行将会被 D ~ − 1 \widetilde{D}^{-1} D 1的元素 d − 1 ~ i , i \widetilde{d^{-1}}_{i,i} d1 i,i缩放,度矩阵体现了节点被其他节点的关联程度,一个节点与其他节点的关联程度越强,度数越大,信息融合的值越大,通过值大小与之成反比的 D ~ − 1 \widetilde{D}^{-1} D 1,计算 D ~ − 1 A ~ X \widetilde{D}^{-1}\widetilde{A}X D 1A X时,可以平衡节点之间的特征尺度,从而得到数据尺度相差不大的特征矩阵,更有利于神经网络学习;

上面的形式 D ~ − 1 A ~ X \widetilde{D}^{-1}\widetilde{A}X D 1A X中, D ~ − 1 \widetilde{D}^{-1} D 1只缩放了 A ~ \widetilde{A} A 的行,忽略了缩放 A ~ \widetilde{A} A 的列,直观地,可以改成:
D ~ − 1 A ~ D ~ − 1 X \widetilde{D}^{-1}\widetilde{A}\widetilde{D}^{-1}X D 1A D 1X
这样之后,低度的节点将会对邻居产生相对更多的影响,高度的节点在众多邻居上分散影响,降低了对某个具体邻居的影响;以上过程相当于对 A ~ \widetilde{A} A 进行了两次缩放,一次对行进行,一次对列进行,为了将其缩放至一个合适的程度,改成:
D ~ − 1 2 A ~ D ~ − 1 2 X \widetilde{D}^{-\frac{1}{2}}\widetilde{A}\widetilde{D}^{-\frac{1}{2}}X D 21A D 21X
A ^ = D ~ − 1 2 A ~ D ~ − 1 2 \widehat{A}=\widetilde{D}^{-\frac{1}{2}}\widetilde{A}\widetilde{D}^{-\frac{1}{2}} A =D 21A D 21,由此可以得到一层图卷积神经网络:
Z = σ ( A ^ X W + b ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 X W + b ) Z=\sigma (\widehat{A}XW+b)=\sigma (\widetilde{D}^{-\frac{1}{2}}\widetilde{A}\widetilde{D}^{-\frac{1}{2}}XW+b) Z=σ(A XW+b)=σ(D 21A D 21XW+b)

  • 其中, D ~ − 1 2 \widetilde{D}^{-\frac{1}{2}} D 21 A ~ \widetilde{A} A 的形状均为 ( n , n ) (n,n) (n,n)
  • X X X是所有节点特征组成的张量,形状为 ( n , c ) (n,c) (n,c) c c c是每个节点的特征维数;
  • 参数 W W W的形状为 ( c , h ) (c,h) (c,h) h h h代表变换后输出特征的维数;
  • 经过 σ \sigma σ非线性变换得到各个节点组合的输出张量 Z Z Z Z Z Z的形状为 ( n , h ) (n,h) (n,h) Z Z Z具有高层语义信息;

直观地,图卷积神经网络的层数也可以加深,比如加深至两层,令 W ( 1 ) W^{(1)} W(1)形状为 ( c , h ) (c,h) (c,h) W ( 2 ) W^{(2)} W(2)形状为 ( h , f ) (h,f) (h,f),假设节点的类别数为 f f f
Z = s o f t m a x ( A ^ [ R e L U ( A ^ X W ( 1 ) + b ( 1 ) ) ] W ( 2 ) + b ( 2 ) ) Z=softmax(\widehat{A}[ReLU (\widehat{A}XW^{(1)}+b^{(1)})]W^{(2)}+b^{(2)}) Z=softmax(A [ReLU(A XW(1)+b(1))]W(2)+b(2))
节点的分类可以使用交叉熵计算损失:
l o s s = − ∑ l ∈ Y L ∑ i = 1 f t a r g e t l , i l o g ( Z l , i ) loss=-\sum_{l\in Y_{L}}\sum_{i=1}^{f}target_{l,i}log(Z_{l,i}) loss=lYLi=1ftargetl,ilog(Zl,i)

  • 其中, Y L Y_{L} YL代表所有具有已知类别(标签)的节点,图数据的节点共有 f f f类;
  • t a r g e t l , i target_{l,i} targetl,i即代表 Y L Y_{L} YL中第 l l l个节点,其类别为第 i i i类;
  • Z l , i Z_{l,i} Zl,i即图神经网络的输出,反映了预测 Y L Y_{L} YL中第 l l l个节点,并且其类别为第 i i i类的概率

GNN的基准化:Benchmarking Graph Neural Networks

GNN模型广泛,但缺乏一个标准的基准,以及在大型数据集上开展的一致性实验,Benchmarking Graph Neural Networks 一文在GNN的基准化上做出了贡献,作者提出了可重现的GNN基准框架,并为研究人员提供了方法以便利地添加新的数据集和模型,地址:Benchmarking Graph Neural Networks

基准框架可以应用于数学中的新型中等规模图形数据集建模,可在计算机视觉,化学,组合优化等问题上设计有效的图神经网络;实现了图卷积,各向异性扩散,残差连接和归一化等层,这些层是开发健壮且可扩展的GNN通用构建模块

你可能感兴趣的:(图神经网络,神经网络,人工智能,图论)