图卷积神经网络GCN大白话解读!
何时能懂你的心——图卷积神经网络(GCN)
已关注
、
等 1,370 人赞同了该文章
作者:郭必扬
2019.6.25
GCN问世已经有几年了(2016年就诞生了),但是这两年尤为火爆。本人愚钝,一直没能搞懂这个GCN为何物,最开始是看清华写的一篇三四十页的综述,读了几页就没读了;后来直接拜读GCN的开山之作,也是读到中间的数学部分就跪了;再后来在知乎上看大神们的讲解,直接被排山倒海般的公式——什么傅里叶变换、什么拉普拉斯算子等等,给搞蒙了,越读越觉得:“哇这些大佬好厉害,哎我怎么这么菜!”。
就这么反反复复,尝试一次放弃一次,终于慢慢有点理解了,慢慢从那些公式的里跳了出来,看到了全局,也就慢慢明白了GCN的原理。今天,我就记录一下我对GCN“阶段性”的理解。
GCN的概念首次提出于ICLR2017(成文于2016年):https://zhuanlan.zhihu.com/p/71200936
一、GCN是做什么的
在扎进GCN的汪洋大海前,我们先搞清楚这个玩意儿是做什么的,有什么用。
深度学习一直都是被几大经典模型给统治着,如CNN、RNN等等,它们无论再CV还是NLP领域都取得了优异的效果,那这个GCN是怎么跑出来的?是因为我们发现了很多CNN、RNN无法解决或者效果不好的问题——图结构的数据。
回忆一下,我们做图像识别,对象是图片,是一个二维的结构,于是人们发明了CNN这种神奇的模型来提取图片的特征。CNN的核心在于它的kernel,kernel是一个个小窗口,在图片上平移,通过卷积的方式来提取特征。这里的关键在于图片结构上的平移不变性:一个小窗口无论移动到图片的哪一个位置,其内部的结构都是一模一样的,因此CNN可以实现参数共享。这就是CNN的精髓所在。
再回忆一下RNN系列,它的对象是自然语言这样的序列信息,是一个一维的结构,RNN就是专门针对这些序列的结构而设计的,通过各种门的操作,使得序列前后的信息互相影响,从而很好地捕捉序列的特征。
上面讲的图片或者语言,都属于欧式空间的数据,因此才有维度的概念,欧式空间的数据的特点就是结构很规则。但是现实生活中,其实有很多很多不规则的数据结构,典型的就是图结构,或称拓扑结构,如社交网络、化学分子结构、知识图谱等等;即使是语言,实际上其内部也是复杂的树形结构,也是一种图结构;而像图片,在做目标识别的时候,我们关注的实际上只是二维图片上的部分关键点,这些点组成的也是一个图的结构。
图的结构一般来说是十分不规则的,可以认为是无限维的一种数据,所以它没有平移不变性。每一个节点的周围结构可能都是独一无二的,这种结构的数据,就让传统的CNN、RNN瞬间失效。所以很多学者从上个世纪就开始研究怎么处理这类数据了。这里涌现出了很多方法,例如GNN、DeepWalk、node2vec等等,GCN只是其中一种,这里只讲GCN,其他的后面有空再讨论。
GCN,图卷积神经网络,实际上跟CNN的作用一样,就是一个特征提取器,只不过它的对象是图数据。GCN精妙地设计了一种从图数据中提取特征的方法,从而让我们可以使用这些特征去对图数据进行节点分类(node classification)、图分类(graph classification)、边预测(link prediction),还可以顺便得到图的嵌入表示(graph embedding),可见用途广泛。因此现在人们脑洞大开,让GCN到各个领域中发光发热。
二、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来解决实际问题的人来说,你只用知道:哦,这个GCN设计了一个牛逼的公式,用这个公式就可以很好地提取图的特征。这就够了,毕竟不是什么事情都需要知道内部原理,这是根据需求决定的。
为了直观理解,我们用论文中的一幅图:
上图中的GCN输入一个图,通过若干层GCN每个node的特征从X变成了Z,但是,无论中间有多少层,node之间的连接关系,即A,都是共享的。
假设我们构造一个两层的GCN,激活函数分别采用ReLU和Softmax,则整体的正向传播的公式为:
最后,我们针对所有带标签的节点计算cross entropy损失函数:
就可以训练一个node classification的模型了。由于即使只有很少的node有标签也能训练,作者称他们的方法为半监督分类。
当然,你也可以用这个方法去做graph classification、link prediction,只是把损失函数给变化一下即可。
三、GCN为什么是这个亚子
我前后翻看了很多人的解读,但是读了一圈,最让我清楚明白为什么GCN的公式是这样子的居然是作者Kipf自己的博客:http://tkipf.github.io/graph-convolutional-networks/ 推荐大家一读。
作者给出了一个由简入繁的过程来解释:
我们的每一层GCN的输入都是邻接矩阵A和node的特征H,那么我们直接做一个内积,再乘一个参数矩阵W,然后激活一下,就相当于一个简单的神经网络层嘛,是不是也可以呢?
实验证明,即使就这么简单的神经网络层,就已经很强大了。这个简单模型应该大家都能理解吧,这就是正常的神经网络操作。
但是这个简单模型有几个局限性:
- 只使用A的话,由于A的对角线上都是0,所以在和特征矩阵H相乘的时候,只会计算一个node的所有邻居的特征的加权和,该node自己的特征却被忽略了。因此,我们可以做一个小小的改动,给A加上一个单位矩阵I,这样就让对角线元素变成1了。
- A是没有经过归一化的矩阵,这样与特征矩阵相乘会改变特征原本的分布,产生一些不可预测的问题。所以我们对A做一个标准化处理。首先让A的每一行加起来为1,我们可以乘以一个 ,D就是度矩阵。我们可以进一步把 拆开与A相乘,得到一个对称且归一化的矩阵: 。
通过对上面两个局限的改进,我们便得到了最终的层特征传播公式:
其中 , 为 的degree matrix。
公式中的 与对称归一化拉普拉斯矩阵十分类似,而在谱图卷积的核心就是使用对称归一化拉普拉斯矩阵,这也是GCN的卷积叫法的来历。原论文中给出了完整的从谱卷积到GCN的一步步推导,我是看不下去的,大家有兴趣可以自行阅读。
四、GCN有多牛
在看了上面的公式以及训练方法之后,我并没有觉得GCN有多么特别,无非就是一个设计巧妙的公式嘛,也许我不用这么复杂的公式,多加一点训练数据或者把模型做深,也可能达到媲美的效果呢。
但是一直到我读到了论文的附录部分,我才顿时发现:GCN原来这么牛啊!
为啥呢?
因为即使不训练,完全使用随机初始化的参数W,GCN提取出来的特征就以及十分优秀了!这跟CNN不训练是完全不一样的,后者不训练是根本得不到什么有效特征的。
我们看论文原文:
然后作者做了一个实验,使用一个俱乐部会员的关系网络,使用随机初始化的GCN进行特征提取,得到各个node的embedding,然后可视化:
可以发现,在原数据中同类别的node,经过GCN的提取出的embedding,已经在空间上自动聚类了。
而这种聚类结果,可以和DeepWalk、node2vec这种经过复杂训练得到的node embedding的效果媲美了。
说的夸张一点,比赛还没开始,GCN就已经在终点了。看到这里我不禁猛拍大腿打呼:“NB!”
还没训练就已经效果这么好,那给少量的标注信息,GCN的效果就会更加出色。
作者接着给每一类的node,提供仅仅一个标注样本,然后去训练,得到的可视化效果如下:
这是整片论文让我印象最深刻的地方。
看到这里,我觉得,以后有机会,确实得详细地吧GCN背后的数学琢磨琢磨,其中的玄妙之处究竟为何,其物理本质为何。这个时候,回忆起在知乎上看到的各路大神从各种角度解读GCN,例如从热量传播的角度,从一个群体中每个人的工资的角度,生动形象地解释。这一刻,历来痛恨数学的我,我感受到了一丝数学之美,于是凌晨两点的我,打开了天猫,下单了一本正版《数学之美》。哦,数学啊,你真如一朵美丽的玫瑰,每次被你的美所吸引,都要深深受到刺痛,我何时才能懂得你、拥有你?
其他关于GCN的点滴:
- 对于很多网络,我们可能没有节点的特征,这个时候可以使用GCN吗?答案是可以的,如论文中作者对那个俱乐部网络,采用的方法就是用单位矩阵 I 替换特征矩阵 X。
- 我没有任何的节点类别的标注,或者什么其他的标注信息,可以使用GCN吗?当然,就如前面讲的,不训练的GCN,也可以用来提取graph embedding,而且效果还不错。
- GCN网络的层数多少比较好?论文的作者做过GCN网络深度的对比研究,在他们的实验中发现,GCN层数不宜多,2-3层的效果就很好了。
这么强大的玩意儿,赶紧去试试吧!
喜欢我的文章?来逛逛我的专栏吧!
我拍着胸脯告诉你绝对不会后悔(*❦ω❦)
另外,我的微信公众号(SimpleAI)好久没人关注了呜呜呜~~~
其实上面的排版更好看呢~
走过路过关注一guo吧φ(>ω<*)
赞赏
相关文章:
- 基于Travis CI实现 Hexo 在 Github 和 Coding 的同步部署
- 计算机网络-2020年期末复习提纲-概念类
- ①网络爬虫基础知识
- 用Netty开发中间件:网络编程基础
- layoutGAN是如何实现自动排版布局的
- idea全局搜索快捷键
- pycharm搜索快捷键
- IDEA设置全局搜索快捷键为Alt+F
- idea设置全局搜索快捷键
- Pycharm搜索快捷键和搜狗快捷键冲突
- vs全局搜索快捷键搜索失效
- 你知道哪些常用快捷键?电脑快捷键大全,打工人必备!
- IDE使用技巧
- npm install报错code128
- 【node】 npm install 报错:code 128
- PB 生成条形码(Code39+Code128+EAN128源码+规则)
- Excel 生成Code128条码
- code 128 ....command git --no-replace-objects ls-remote ssh://git@github.com/nhn/raphael.git解决方案
- 四、CODE128
- Code128码识别
- Code128一维码(解码)
- Blink SQL去重语句
- SQL去重 SELECT DISTINCT 语句(distinct)
- sql去重 ,4种查询数量方法
- 华为服务器修改为1核2G,1核2g服务器
- 微星R7850 Hawk 2GB独显修改并注入FrameBuffer并在黑苹果macOS Mojave下完美驱动
- windows7系统,NVIDIA GeForce GTX 750 Ti 2G显卡搭建caffe、TensorFlow、Keras深度学习GPU环境
- gta5怎么设置画质最好_GTA5 PC版2G显卡设置最高画质心得 GTA5怎么设置画质
- [2G显卡]使用darknet/YOLO训练自己的数据
- 橙光古风背景素材下载
图卷积神经网络GCN大白话解读!相关推荐
- (21) 出行需求预测新视角---基于图卷积神经网络GCN的出租车OD需求预测
交通预见未来(21): 出行需求预测新视角---基于图卷积神经网络GCN的出租车OD需求预测 1.文章信息 <Origin-Destination Matrix Prediction via G ...
- 图卷积神经网络(GCN)综述与实现(PyTorch版)
图卷积神经网络(GCN)综述与实现(PyTorch版) 本文的实验环境为PyTorch = 1.11.0 + cu113,PyG = 2.0.4,相关依赖库和数据集的下载请见链接. 一.图卷积神经网络 ...
- 深入理解图卷积神经网络(GCN)原理
深入理解图卷积神经网络(GCN)原理 文章目录 深入理解图卷积神经网络(GCN)原理 前言 一.为什么需要GCN 二.GCN的原理 1.图的定义 2.GCN来了 2.1 矩阵计算公式 2.2 以小规模 ...
- DeepLearning | 图卷积神经网络(GCN)解析(论文、算法、代码)
本篇博客主要讲述三种图卷积网络(Graph Convolutional Network, GCN)的算法原理及python实现,全文阅读时间约10分钟. 博主关于图神经网络的文章 DeepLearni ...
- 图卷积神经网络(GCN)入门
GCN是从CNN来的 CNN成功在欧式数据上:图像,文本,音频,视频 图像分类,对象检测,机器翻译 CNN基本能力:能学到一些局部的.稳定的结构,通过局部化的卷积核,再通过层级堆叠,将这些局部的结构变 ...
- tensorflow lstm 预测_图卷积神经网络GCN与递归结构RNN相结合的时间序列预测
时间序列预测任务可以按照不同的方法执行.最经典的是基于统计和自回归的方法.更准确的是基于增强和集成的算法,我们必须使用滚动周期生成大量有用的手工特性.另一方面,我们可以使用在开发过程中提供更多自由的神 ...
- 图卷积神经网络(GCN)理解与tensorflow2.0代码实现
图(Graph),一般用 G=(V,E)G=(V,E)G=(V,E) 表示,这里的VVV是图中节点的集合,EEE 为边的集合,节点的个数用NNN表示.在一个图中,有三个比较重要的矩阵: 特征矩阵XXX ...
- 【深度学习理论】(5) 图卷积神经网络 GCN
尽管在过去的几年中,神经网络的兴起与成功应用使得许多目标检测.自然语言处理.语音识别等领域都有了飞跃发展,但是将 RNN 或者GCN这样的深度学习模型拓展到任意结构的图上是一个有挑战性的问题.受限于传 ...
- 图卷积神经网络GCN中的关键公式推导---干货
GCN推导(比较关键的部分) GCN公式推导的时候,需要用到线性代数和傅里叶变换的一些定理, 比如拉普拉斯矩阵是实对称矩阵,其标准化都的数值分布在[0,2]之间 比如傅里叶变换的原理就是多个正弦余弦函 ...
最新文章
- Oracle 性能相关常用脚本(SQL)
- post install error,please remove node_moules before retry
- Android插件化原理解析——广播的管理
- 触发器初接触-同步两个表的指定字段
- javascript之预编译
- linux 高级i o函数,高级I/O函数
- 腾讯又“撒钱”了!奖励2.28万员工800万股,人均16.6万港元 网友:福利界天花板...
- Visual Stdio 注册表相关路径
- 多乐融依托大数据锻造五重风控防线
- python判断_Python中判断一个字符串是否以特定字符前缀开始的函数:startswith()
- Revit二次开发之TaskDialog
- 服务器虚拟化基础hcna,华为云计算全新大纲课程 乾颐堂HCNA-Cloud服务器虚拟化云计算实战课程 HCNA认证课程...
- 035 浅谈WebGame
- 基于OP放大器的有源模拟滤波器设计--一阶有源滤波器
- hacking 麦步手表之(3)制作一个英文表盘xzy-reborn
- UEBA架构设计之路4:异常、威胁指标和威胁
- BACnet安全连接(BACnet/SC) 介绍
- Linux 静态链接库与动态链接库之一:静态链接库生成及使用
- 给GIS初学者的建议
- 软件工程-软件的本质特征
热门文章
- 生育相关政策解答(转)
- 华为在北京:数字赋能医疗健康,打造转型升级的“北京样板”
- 百度网页打不开的解决方法之一
- [python]...
- 2022年全球与中国笔记本电脑支架散热器行业发展趋势及投资战略分析报告
- java抽象类实现接口_Java——抽象类实现接口
- NFD开发指南-2.Face系统
- 3D模型的加载与使用
- 如何为前端项目一键自动添加eslint和prettier的支持
- [日语二级词汇]日语二级必会汉字总结11