1. 图卷积网络

1.1. 为什么会出现图卷积网络

普通卷积神经网络研究的对象是具备Euclidean domains的数据,Euclidean domains data数据最显著的特征是他们具有规则的空间结构,如图片是规则的正方形,语音是规则的一维序列等,这些特征都可以用一维或二维的矩阵来表示,卷积神经网络处理起来比较高效。

然而,现实生活中很多数据不具备规则的空间结构,称为Non Euclidean data,如,推荐系统、电子交易、分子结构等抽象出来的图谱。这些图谱中的每个节点连接不尽相同,有的节点有三个连接,有的节点只有一个连接,是不规则的结构。对于这些不规则的数据对象,普通卷积网络的效果不尽人意。CNN卷积操作配合pooling等在结构规则的图像等数据上效果显著,但是如果作者考虑非欧氏空间比如图(即graph,流形也是典型的非欧结构,这里作者只考虑图),就难以选取固定的卷积核来适应整个图的不规则性,如邻居节点数量的不确定和节点顺序的不确定。4^44

这里的理解就是,数据的组织形式不同,催生出了图卷积神经网路。如果现实生活中都是规则的数据,普通的卷积神经网络就足够胜任。

总结一下,图数据中的空间特征具有以下特点:
1) 节点特征:每个节点有自己的特征;(体现在点上)
2) 结构特征:图数据中的每个节点具有结构特征,即节点与节点存在一定的联系。(体现在边上)
总地来说,图数据既要考虑节点信息,也要考虑结构信息,图卷积神经网络就可以自动化地既学习节点特征,又能学习节点与节点之间的关联信息。

综上所述,GCN是要为除CV、NLP之外的任务提供一种处理、研究的模型。
图卷积的核心思想是利用『边的信息』对『节点信息』进行『聚合』从而生成新的『节点表示』。

1.2. 图卷积网络的两个方向

  • vertex domain(spatial domain):顶点域(空间域)
  • spectral domain:频域方法(谱方法)

2. 图卷积网络的推导

已有很多优秀的博客对图卷积神经网络的理论进行了严密的推导,在这里我就作为一个学习记录,记录自己的疑问的地方,想要读详细推导的,请移步参考文献。

以下是对一阶ChebNet(1stChebNet)-GCN的记录:

H(l+1)=f(H(l),A)=σ(D~−12A~D~−12H(l)W(l))(1)\mathbf{H}^{(l+1)} = f(\mathbf{H}^{(l)},\mathbf{A}) = \sigma(\mathbf{\widetilde{D}}^{-\frac{1}{2}}\mathbf{\widetilde{A}}\mathbf{\widetilde{D}}^{-\frac{1}{2}}\mathbf{H}^{(l)}\mathbf{W}^{(l)}) \tag{1}H(l+1)=f(H(l),A)=σ(D−21​AD−21​H(l)W(l))(1)

  • H(l),H(l+1)\mathbf{H}^{(l)}, \mathbf{H}^{(l+1)}H(l),H(l+1) 分别表示第lll层网络的输入和输出。
  • fff 相当于lll层拟合的函数,函数的输入参数是H(l),A\mathbf{H}^{(l)},\mathbf{A}H(l),A,其中A\mathbf{A}A表示图的邻接矩阵。
  • σ\sigmaσ指任意一种激活函数,一般来说表示的是sigmod\text{sigmod}sigmod。
  • A~=A+λIN\mathbf{\widetilde{A}} = \mathbf{{A}} + \lambda\mathbf{I}_{N}A=A+λIN​, 相当于加上了自环,λ\lambdaλ表示一个权重分配,一般情况下默认λ=1\lambda = 1λ=1。
  • D~ij=∑jA~ij\mathbf{\widetilde{D}}_{ij} = \sum_j\mathbf{\widetilde{A}}_{ij}Dij​=∑j​Aij​,相当于对新的邻接矩阵A~\mathbf{\widetilde{A}}A重新计算度矩阵(degree matrix)。
  • D~−12A~D~−12\mathbf{\widetilde{D}}^{-\frac{1}{2}}\mathbf{\widetilde{A}}\mathbf{\widetilde{D}}^{-\frac{1}{2}}D−21​AD−21​ 这整个部分其实就是对行以及列的平均。
  • W(l)\mathbf{W}^{(l)}W(l) 表示的是lll层的网络参数,训练网络本质上就是反向传播更新网络参数。

3. 图卷积网络代码实现

代码Github地址
本次阅读的代码使用的是pytorch。
代码入口是pygcn/train.py

3.1. argparse

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--no-cuda', action='store_true', default=False,help='Disables CUDA training.')
parser.add_argument('--fastmode', action='store_true', default=False,help='Validate during training pass.')
parser.add_argument('--seed', type=int, default=42, help='Random seed.')
parser.add_argument('--epochs', type=int, default=200,help='Number of epochs to train.')
parser.add_argument('--lr', type=float, default=0.01,help='Initial learning rate.')
parser.add_argument('--weight_decay', type=float, default=5e-4,help='Weight decay (L2 loss on parameters).')
parser.add_argument('--hidden', type=int, default=16,help='Number of hidden units.')
parser.add_argument('--dropout', type=float, default=0.5,help='Dropout rate (1 - keep probability).')args = parser.parse_args()

argparse参考
这整段代码表示的是可以从命令行窗口获取超参数,可以注意的是都是可选参数,而且有默认值,所以是可以直接运行的。

3.1. Cora数据集

  • cora.content
    每行代表一个样本,一行由三部分组成,论文编号,论文单词向量(1433个独特的单词,0代表否,1代表是),论文类别(7类)。[2708,1435],表示有2708个样本,每个样本有1435个特征。
  • cora.cites
    cora.cites 共有 5429 行,每一行有两个论文编号,表示第一个论文先写,第二个论文引用第一个论文。如果将论文看做图中的点,那么这5429行便是点之间的5429条边。

3.2. numpy

# 返回指定长度的标识数组
#  >>> np.identity(3)
#    array([[1.,  0.,  0.],
#           [0.,  1.,  0.],
#           [0.,  0.,  1.]])
np.identity(num)
# 构造对称的邻接矩阵
adj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)

不得不说大佬的代码写的是真滴优雅。对称矩阵的逆矩阵与自身相等,上述代码就是利用这个原理实现构建堆成矩阵。
疑问:引文网络按理来说应该是个有向图,即两篇文章不一定会相互应用,这里强行表示为无向图是否有问题。

参考文献:

  1. GCN图卷积网络入门详解
  2. 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导
  3. StellaGraph
  4. 图卷积网络 Graph Convolutional Network(GCN)的理解和详细推导
  5. pygcn

【图卷积网络】Graph Convolutional Network相关推荐

  1. 图卷积网络(Graph Convolutional Networks, GCN)详细介绍

    本文翻译自博客. 在这篇博文中会为大家详细地介绍目前使用广泛的图神经网络--图卷积网络(Graph Convolutional Networks, GCN)的相关知识.首先将带领大家直觉上感受其工作原 ...

  2. 【GCN】图卷积网络 Graph Convolutional Networks

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 作者 | Frank Cao 专栏 | 深度学习 地址 | https://zhuanlan. ...

  3. 一文秒懂图卷积神经网络Graph Convolutional Network(GCN)——从图信号处理(GSP)到图卷积神经网络详细推导

    图卷积神经网络详解 1 为什么会出现图卷积神经网络? 2 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral do ...

  4. DeepLearning | 图注意力网络Graph Attention Network(GAT)论文、模型、代码解析

    本篇博客是对论文 Velikovi, Petar, Cucurull, Guillem, Casanova, Arantxa,et al. Graph Attention Networks, 2018 ...

  5. 图卷积神经网络--Graph Convolutional Networks for Hyperspectral Image Classification

    一.文章摘要 卷积神经网络(CNN)由于能够捕捉空间-光谱特征表示,在高光谱(HS)图像分类中受到越来越多的关注.然而,他们对样本之间关系建模的能力仍然有限.除了网格采样的局限性,最近提出了图卷积网络 ...

  6. 图注意力网络(Graph Attention Network, GAT) 模型解读与代码实现(tensorflow2.0)

    前面的文章,我们讲解了图神经网络三剑客GCN.GraphSAGE.GAT中的两个: 图卷积神经网络(GCN)理解与tensorflow2.0代码实现 GraphSAGE 模型解读与tensorflow ...

  7. 基于注意力机制的图卷积网络预测药物-疾病关联

    BIB | 基于注意力机制的图卷积网络预测药物-疾病关联 智能生信 人工智能×生物医药 ​关注 科学求真 赢 10 万奖金 · 院士面对面 9 人赞同了该文章 今天给大家介绍华中农业大学章文教授团队在 ...

  8. DeepLearning | 图卷积网络基于拓扑结构的分类(T-GCN)

    最近看了些图神经网络方面的论文,发现这几年这方面的文章虽然很多,但是各类方法在几个benchmark数据集上的准确率并没有很明显的提升.看了10来篇论文后,找了一个实现相对简单,性能还算可以的方法介绍 ...

  9. 【图神经网络】SGC:简化图卷积网络

    SGC:简化图卷积网络 <Simplifying Graph Convolutional Networks> 论文地址:https://arxiv.org/abs/1902.07153 一 ...

  10. 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导

    文章目录 1. 为什么会出现图卷积神经网络? 2. 图卷积网络的两种理解方式 2.1 vertex domain(spatial domain):顶点域(空间域) 2.2 spectral domai ...

最新文章

  1. AI发展格局正从“数据”演变为“知识”
  2. ITK:用高斯核计算平滑
  3. C++题解-Leecode 520. 检测大写字母——Leecode每日一题系列
  4. 跟我一起使用electron搭建一个文件浏览器吧
  5. cdi 2.7.5_看一下CDI 2.0 EDR1
  6. 《PHP和MySQL Web开发从新手到高手(第5版)》一一1.7 万事俱备,摩拳擦掌
  7. smarty模板基础2 缓存文件
  8. 彷徨了两天,天慢慢晴朗了,心也爽朗了……
  9. (转载) AT指令详解
  10. Kafka从上手到实践 - 庖丁解牛:Producer | 凌云时刻
  11. 嵌入式linux ucgui,四、嵌入式之图形界面 (3) uCGui
  12. VS2010 SP1安装失败
  13. JavaScript详细版
  14. Netflix Conductor流程系统(二):官方样例搭建
  15. 84行C++代码教你实现洛谷占卜功能
  16. SAP BAPI_EXCHANGERATE_GETDETAIL计算货币转换汇率
  17. 【题解】P3939数颜色
  18. Java调用被子类重写的方法
  19. test题目:袋鼠过河
  20. BarChart 柱状图 实例

热门文章

  1. MIT操作系统实验-XV6项目环境搭建
  2. echarts地图省市坐标
  3. SVM多分类原理学习
  4. 【杂谈】蓝屏修复杂谈
  5. 开源多语言商城 CMS 企业建站系统,MyCms v3.9 发布
  6. Adobe illustrator如何修改默认字体
  7. Fontmin字体生成,网站开发字体生成,@font-face字体格式生成,html网站字体引入,html网站字体格式转换器
  8. 一行代码实现微信电脑多开
  9. Protues 仿真器件
  10. 深度学习之LSTM完全图解