GNN教程:第六篇Spectral算法细节详解!
↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:秦州,算法工程师,Datawhale成员
引言
图神经网络的逐层Spectral更新公式简单优雅而高效,以GCN为例,节点Embedding是由自身和邻居节点Embedding的聚合之后再进行非线性变换而得到。如此简单优雅的更新规则是怎么推导出来的呢,背后有没有什么理论依据?在GCN的论文中,作者介绍了两种启发GCN逐层线性传播法则的方法,分别是从谱图卷积的角度和Weisfeiler-Lehman算法的角度。本篇博文将详细介绍如何从图拉普拉斯矩阵出发,通过定义图上的傅里叶变换和傅里叶逆变换而定义图上卷积公式,最后推导出优雅的GCN逐层更新公式。至于Weisfeiler-Lehman算法,因为涉及到图神经网络的表示能力的问题,后面我们会出一个专题详细的介绍它。
本文为GNN教程的第五篇文章 【Spectral Gragh】,博文的结构是这样的:(下面这段文字对快速理解这篇文章很重要,之后还会出现一次作为小结)
图神经网络的核心工作是对空间域(Spatial Domain)中节点的Embedding进行卷积操作(即聚合邻居Embedding信息),然而图数据和图像数据的差别在于节点邻居个数、次序都是不定的,因此传统用于图像上的CNN模型中的卷积操作(Convolution Operator)不能直接用在图上,因此需要从频谱域(Spectral Domain)上重新定义这样的卷积操作再通过卷积定理转换回空间域上。
为了在频谱域和空间域中转换,我们借助了傅里叶公式,并且定义了图上傅里叶变换(从空间域变换到频谱域)和图上傅里叶逆变换(从频谱域回到空间域)的变换公式。具体操作是我们将节点的Embedding
通过傅里叶正变换从空间域变换到了频谱域,在频谱域上和卷积核进行卷积操作,再将变换后的节点Embedding通过傅里叶逆变换回到空间域,参与后续的分类等任务。
后台回复【GNN】进图神经网络交流群。
本篇博文是按照上面的思路组织的,下面首先我们来介绍一下什么是空间域和频谱域。
一、Spatial Domain 和Spectral Domain
Spatial domain,翻译过来就是空间域,是最直观感受GCN逐层传播算法的域,即:节点
的Embedding是其所有邻居节点Embedding(包括自己的Embedding)的聚合结果。因此在一些文献上spatial domain又被称做"vertex domain"。但是与CNN所应用的图像不同,空间域中图节点邻居的数目不是一定的,而且节点之间没有相对的次序性。这就产生了一个问题,对于不同邻居个数的节点,卷积怎么定义呢?这就引出了spectral domain的概念。spectral domain,即频谱域,借助卷积定理,我们可以通过定义频谱域上的卷积操作来得到空间域图上的卷积操作。
那么图在频谱域上是如何表示的呢,这就引出了我们第二个概念:谱图理论,谱图理论主要研究的是图的拉普拉斯(Lapalacian)矩阵的特征值和所对应的特征向量对于图拓扑性质的影响,是对图空间拓扑的数学描述。下面先来介绍什么是拉普拉斯矩阵。
二、拉普拉斯矩阵
2.1 定义
对于无向图
,其Laplacian矩阵定义为,其中是节点的度矩阵(只在对角线上有元素),是图的邻接矩阵。拉普拉斯矩阵还有几种扩展定义:
-
称为对称正规拉普拉斯矩阵(Symmetric Normalized Laplacian),论文中一般用的是这种Laplacian的定义。 -
称为随机游走正规拉普拉斯矩阵(Random Walk Normalized Laplacian)。
由于
,且无向图中为对称矩阵,因此拉普拉斯矩阵是对称矩阵,可以进行特征分解(谱分解),谱分解对于图从空间域到频谱域的变换至关重要,因为我们用来变换的工具傅里叶变换(Fourier Transform)需要利用Laplacian矩阵的特征值和特征向量,通过变换,从拓扑结构的图(spatial domain)到拉普拉斯矩阵再到谱图(spectral domain)这条链路就形成了。下面就先来介绍拉普拉斯矩阵的谱分解。
2.2 谱分解
矩阵的特征分解,对角化,谱分解都是同一个概念,是指将矩阵分解为由其特征值和特征向量表示的矩阵乘积的方法。只有含有n个线性无关的特征向量的n维方阵才可以进行特征分解。
拉普拉斯矩阵是半正定矩阵,有如下三个性质:
是实对称矩阵,有n个线性无关的特征向量。
这些特征向量都可以正交单位化而得到一组正交且模为 1 的向量。
所有的特征值非负。
性质1告诉我们拉普拉斯矩阵一定能进行特征分解(谱分解),且有如下形式:
其中
为列向量组成的单位特征向量矩阵,
是
个特征值组成的对角阵。
由性质2可知,
是正交矩阵,即 ,故 所以特征分解又可以写成:
这种写法是大部分文献中的写法。
三、图上的傅里叶变换
3.1 傅里叶正变换:从Spatial域到Spectral域
介绍了Laplacian矩阵,我们将图从Spatial domain变换到Spectral domain的准备工作就完成了。下面我们来介绍一下傅里叶变换。
连续域的傅里叶变换定义为:
即信号
与基函数的积分,其中基函数满足:
是拉普拉斯算子,即n维欧式空间中的一个二阶微分算子,拉普拉斯算子是对函数的一种变换。
联想到广义特征值方程的定义:
,其中是矩阵(在线性代数上矩阵左乘表示对向量进行线性变换),是特征向量或者特征函数(无穷维的向量),是对应的特征值。由类比可知是的特征函数,和对应的特征值密切相关。
因此,若要将傅里叶变换迁移到图上,我们有了拉普拉斯矩阵(拉普拉斯矩阵是离散的拉普拉斯算子),下一步自然就是去找拉普拉斯矩阵的特征向量了(相当于我们有了
,下一步是要找相应的)。
小结一下:
傅里叶变换迁移到图上核心的工作就是把拉普拉斯算子的特征函数
对应到图拉普拉斯矩阵的特征向量上。因此求解图拉普拉斯矩阵的特征向量是至关重要的。而根据上文的介绍,图拉普拉斯矩阵是半正定矩阵,可以通过特征分解(谱分解)求得特征向量,即。
更加详细的内容可以参考 The Emerging Field of Signal Processing on Graphs: Extending High-Dimensional Data Analysis to Networks and Other Irregular Domains
有了特征向量
之后,我们就可以定义图上的傅里叶变换了,将连续的傅里叶变换写成离散积分(求和)的形式,仿上定义可得图上的傅里叶变换为:
其中
是对图上节点的变换,比如说返回节点Embedding,和图上的节点一一对应,表示第个特征向量的第个分量。那么节点Embedding在特征值下的图傅里叶变换就是与对应的特征向量进行內积运算。
利用矩阵乘法将图上的傅里叶变换推广到矩阵形式:
即
在图上的傅里叶变换的矩阵形式为:
简而言之,给定输入节点Embedding
, 左乘 即可以得到 经图上傅里叶变换的输出Embedding 。
3.2 傅里叶逆变换:从spectral域到spatial域
那么,我们将节点从空间域变换到频率域之后,怎么变换回空间域呢?传统的傅里叶逆变换是对频率
积分:
类比到离散域(图上)则为对特征值
求和:
利用矩阵乘法将图上的傅里叶逆变换推广到矩阵形式:
即
在图上的傅里叶逆变换的矩阵形式为:
简而言之,给定节点Embedding的在频率域上的表示
,左乘 即可得到节点Embedding在空间域上的表示。
四、图上的卷积
上面我们介绍了作用于图上的傅里叶变换和傅里叶逆变换的定义,在上面的基础上,下面我们利用卷积定理推导图上进行卷积运算的形式:
卷积定理是函数卷积的傅里叶变换是函数傅里叶变换的乘积,即对于函数
与两者的卷积是其傅里叶变换乘积的逆变换。
其中
表示卷积运算,因此与卷积核(卷积核即是一个函数,在CNN上,卷积核通常是一个矩阵,表示对输入的线性变换)在图上的卷积操作可按照如下步骤求得:
计算
的傅里叶变换:卷积核
的在图上的傅里叶变换为:,写成对角矩阵形式为:-
其中
两者傅里叶变换的乘积为
再乘以
求两者傅里叶变换乘积的逆变换,则求出卷积:
讲到这里,我从宏观的角度总结一下以上我们做了什么。下面这几段话对理解全文有很大帮助,不妨多读几遍领会全意。
我们的目的是对空间域中节点的Embedding进行卷积操作(即聚合邻居Embedding信息),然而图数据和图像数据的差别在于节点邻居个数、次序都是不定的,因此传统用于图像上的CNN模型中的卷积操作(Convolution Operator)不能直接用在图上,因此需要从频谱域上重新定义这样的卷积操作再转换回空间域上(通过卷积定理)。
为了在频谱域和空间域中转换,我们借助了傅里叶公式,并且定义了图上傅里叶变换(从空间域变换到频谱域)和图上傅里叶逆变换(从频谱域回到空间域)的变换公式。具体操作是我们将节点的Embedding
通过傅里叶正变换从空间域变换到了频谱域,在频谱域上和卷积核进行卷积操作,再将变换后的节点Embedding通过傅里叶逆变换回到空间域,参与后续的分类等任务。
卷积核
通俗来讲可以看做为空间域上的一个矩阵,在频谱域上和节点Embedding进行卷积之前,我们同样要通过傅里叶变换将变换到频谱域,卷积核和节点Embedding在频谱域上的卷积定义为,最后在通过傅里叶逆变换将更新节点的Embedding变回空间域。
到这里为止,图上的卷积就介绍完了,下面我们看看各种图神经网络模型是怎么利用它的。
五、GCN 结构的演进
5.1 演进 1 - naive method
上文中定义的图卷积操作
是对节点Embedding
在图中做的一次变换,其中图结构信息蕴含在了中,那么对于图上的学习任务比如分类任务,我们需要找到一个合适的卷积核,使得经过卷积核的卷积变换后能够降低分类任务定义的损失。因此图上的机器学习任务的核心就是找出可以降低损失(loss)的卷积核,更直接得说,找到上式中适合的
(它们是
中的自由参数)。
将
看做是模型的参数,我们可以利用梯度下降法使模型自动学习这些参数,即根据任务的loss,学习适合的卷积核。Spectral Networks and Locally Connected Networks on Graphs 用的就是这样的思路,它简单粗暴地将当做是参数:
这个式子可以看做是"第一代"的GCN中的一层(layer),
和神经网络中的weights一样是任意的参数,可以通过反向传播算法进行学习,即,对应于节点的Feature Embedding
这种模型固然简单,但是存在着一些问题:
-
是拉普拉斯矩阵的特征矩阵,而特征分解的复杂度为,当节点个数很多的时候这个方法不适用 每一次前向传播(每计算一次
),都要计算, 和三者的矩阵乘积,计算量很大卷积核是由
这样个参数构成的,其中是图中的节点数,对于非常大的图,模型的自由度过高
5.2 演进 2 - 减少参数数量
上面提到卷积核由
个自由的参数构成,在一些情况下,我们不希望模型的参数过多,否则在数据量不够的情况下,模型可能陷入欠拟合的情况,因此在Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering中作者提出了一种多项式近似方法:
其中
表示的 次幂,即
这样做带来了另一个优点,经过推导不难发现,我们可以进一步简化计算:
上式中省略了
的证明,举个例子:,因为,可以利用数学归纳法证明该式,在此不赘述。
因此,最终
其中
是模型的参数,可以通过反向传播学习得到。
那么相比于演进1,演进2有几个明显的优点:
模型参数由
变到了,由于,模型的自由度大大降低,减少了欠拟合的风险不再需要对拉普拉斯矩阵
进行特征分解了,因为输出可以直接写成关于的表达式,特征分解的时间节约了(其复杂度为)通过对卷积核的多项式近似,我们引入了所谓的空间局部性(spatial localization),
被称为感知野(receptive field),表示对每个节点的Embedding更新只会涉及到它K-hop以内邻居Embedding的聚合,Hop k所有节点的加权聚合系数都为
但是,这种方法仍然没有从根本上解决计算复杂度的问题,因为仍需要求解
,其复杂度为。
5.2 演进 3 - 降低计算复杂度
演进2中使用多项式近似的方式避免对
进行谱分解,且降低了模型的自由度,但是并没有降低卷积计算的复杂度,论文Wavelets on graphs via spectral graph theory中提出了一种用Chebyshev多项式近似卷积核的方法,可以用来降低卷积运算的复杂度。因为这篇文章的作者借鉴了他们的思路,利用Chebyshev多项式近似,定义为:
其中
是Chebyshev多项式的系数,是取的Chebyshev多项式,对进行变换的原因是Chebyshev多项式的输入要求在之间。
Chebyshev多项式是由如下公式递归定义的:
其中,
是节点的embedding。
相比于演进 2,我们可以看到,计算
不再需要矩阵相乘了,因为的计算可以使用递推的方式实现,递推中的每一步都是线性复杂度的,计算的复杂度为,因此计算的复杂度为
将Chebyshev近似带入到谱图卷积的公式里:
其中
可由数学归纳法推导而来,即证明
当
或时,结论显然成立,当时,假设成立,那么当时,有
得证。同理,
也可以通过递推的方式计算,避免了与矩阵的乘法运算,复杂度为。因此根据以上推导,使用Chebyshev近似降低了卷积核计算的复杂度。
5.4 演进 4 - GCN
通过使用Chebyshev多项式近似,我们已经成功得降低了卷积核计算的复杂度。Semi-Supervised Classification with Graph Convolutional Networks 这篇文章中进一步对卷积核的计算做了近似,产生了我们所熟知的GCN逐层传播公式。
在GCN模型中,作者首先做了额外的两个假设:
, 这两个假设可以大大简化模型。而作者希望假设造成的误差可以通过神经网络参数训练过程来自动适应。在这两个假设的条件下:
上式有两个参数
和。这两个参数可以在整个图所有节点的计算中共享。在实践中,进一步限制参数的个数能够一定程度上避免过拟合的问题,并且减少计算量。因此作者又引入了另一个假设:做进一步的近似:
注意
的特征值被限制在了中。由于这一步生成的可能作为下一层的输入, 会再次与$相乘重复这样的操作将会导致数值不稳定、梯度弥散/爆炸等问题。为了缓解这样的问题,作者引入了这样的再正则化(renormalization)技巧:
其中
最后得到了大家耳熟能详的GCN逐层更新公式:输入节点矩阵
, 每个输入节点有个通道(channels, 即每个图节点有维特征),卷积操作包含个滤波器(filters)或特征映射(feature maps), 如下:
其中
是filters的参数矩阵, 是卷积之后的节点矩阵。
后话
本文详细介绍了GCN的逐层传播公式是如何由谱图卷积一步步推导而来的,我们定义了图上的傅里叶变换和傅里叶逆变换,并通过卷积定理将频谱域上的卷积转换到空间域上,最后通过一系列的近似操作得到了GCN的逐层传播公式,这个简单优雅的公式背后蕴藏着复杂的数学推导,很有启发意义。在GCN的论文中,作者还提到了另一种得出GCN逐层传播公式的方式—从Weisfeiler-Lehman算法的角度,接下来我们将会利用一个专栏的文章介绍Weisfeiler-Lehman算法,并且分析图神经网络的表达能力。
“干货学习,点赞三连↓
GNN教程:第六篇Spectral算法细节详解!相关推荐
- Paxos算法细节详解(一)--通过现实世界描述算法
Paxos算法细节详解(一)--通过现实世界描述算法 Paxos分析 最近研究paxos算法,看了许多相关的文章,概念还是很模糊,觉得还是没有掌握paxos算法的精髓,所以花了3天时间分析了libpa ...
- GNN教程:GraghSAGE算法细节详解!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:秦州,算法工程师,Datawhale成员 引言 本文为GNN教程的 ...
- QCC51XX-QCC30XX系列开发教程(实战篇) 之 9.14-DTS详解
查看全部教程开发请点击:全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中) ========================================= ...
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
转:https://blog.csdn.net/forezp/article/details/70037291 最新版本: 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spr ...
- EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换
目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...
- MVC教程第六篇:拦截器
MVC教程第六篇:拦截器 摘要 本文将对"MVC公告发布系统"的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题 ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)
论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...
- [转]数据结构KMP算法配图详解(超详细)
KMP算法配图详解 前言 KMP算法是我们数据结构串中最难也是最重要的算法.难是因为KMP算法的代码很优美简洁干练,但里面包含着非常深的思维.真正理解代码的人可以说对KMP算法的了解已经相当深入了.而 ...
- html的细节优化,网站页面优化细节详解
原标题:网站页面优化细节详解 SEO页面优化是继SEO结构优化之后,另一个重要优化地方; 页面标题 在每个页面中的关键位置,出现目标关键词,这是我们做页面优化的基础思路,关键词位置,都有哪些呢? 第一 ...
最新文章
- 计算机三级网络技术题库第15套,计算机等级考试理论试题第二十五套
- C++用并查集Disjoint union实现connected component连通分量(附完整源码)
- 贾跃亭“站台”!乐视高调宣布回归:60余款新品发布,还将发布超级手机
- 交换机短路_交换机日常怎么运行维护?一文告诉你
- [转载] python numpy矩阵运算加速器 NumExpr
- android中Sqlite数据库存储
- ubuntu服务器系统管理软件,安装 Webmin 来管理你的 Ubuntu 主机
- windows下7z文件解压
- python题库大一_1000道Python题库系列分享三
- CSS中 dispaly属性详解
- 机器学习------结构因果机制(SCM)、因果关系、因果推断
- 网站点击量太大崩溃怎么办_网站崩溃时该怎么办
- 西工大机考《劳动与社会保障法》大作业网考
- 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t
- Java根据日利率计算等额本息每月还款
- ubuntu16.04更新系统后桌面出错的解决办法
- java中给对象的List集合去重的几种方法(Lambda)
- 微信小程序富文本渲染(rich-text)换行失效
- 上海国际能源交易中心大户持仓报告制度 操作指南
- 线程sta模式_C# 设置为单线程单元(STA)模式
热门文章
- shell脚本俄罗斯方块游戏
- Apache Tomcat 7.x 概述
- 【转】Visual Studio 2010 架构图之用例图(UML Use Case Diagram)
- 【ACM】杭电OJ 1009 (FatMouse' Trade)。
- C语言中regex_error,为什么这个C 11 std :: regex示例抛出一个regex_error异常?
- Python 多进程、协程异步抓取英雄联盟皮肤并保存在本地
- 用Python轻松搞定Excel中的20个常用操作
- 肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁
- 送书 | 2020年新一天,用这本书开启你的NLP学习之路!
- 刷爆了!这项技术BAT力捧!程序员:我彻底慌了...