图卷积神经网络发展

1. 图神经网络(GNN)

图神经网络的概念最早在2005年提出。2009年Franco博士在其论文 [2]中定义了图神经网络的理论基础。

本文中所提到的图均指图论中的图(Graph)。它是一种由若干个结点(Node)及连接两个结点的(Edge)所构成的图形,用于刻画不同结点之间的关系。

1.1 状态更新与输出

最早的图神经网络起源于Franco博士的论文[2], 它的理论基础是不动点理论。给定一张图 G,每个结点都有其自己的特征(feature), 本文中用xv表示结点v的特征;连接两个结点的边也有自己的特征,本文中用x(v,u)表示结点v与结点u之间边的特征;GNN的学习目标是获得每个结点的图感知的隐藏状态 ℎv(state embedding),这就意味着:对于每个节点,它的隐藏状态包含了来自邻居节点的信息。那么,如何让每个结点都感知到图上其他的结点呢?GNN通过迭代式更新所有结点的隐藏状态来实现,在t+1时刻,结点v的隐藏状态按照如下方式更新:

上面这个公式中的 f 就是隐藏状态的状态更新函数,在论文中也被称为局部转移函数(local transaction function)。公式中的𝐱𝑐𝑜[𝑣]指的是与结点v相邻的边的特征,𝐱𝑛𝑒[𝑣]指的是结点v的邻居结点的特征,h_{n}^{t}e[v]则指邻居结点在t时刻的隐藏状态。注意 f 是对所有结点都成立的,是一个全局共享的函数。那么怎么把它跟深度学习结合在一起呢?聪明的读者应该想到了,那就是利用神经网络(Neural Network)来拟合这个复杂函数 f。值得一提的是,虽然看起来 f的输入是不定长参数,但在 f内部我们可以先将不定长的参数通过一定操作变成一个固定的参数,比如说用所有隐藏状态的加和来代表所有隐藏状态。我们举个例子来说明一下:

假设结点5为中心结点,其隐藏状态的更新函数如图所示。这个更新公式表达的思想自然又贴切:不断地利用当前时刻邻居结点的隐藏状态作为部分输入来生成下一时刻中心结点的隐藏状态,直到每个结点的隐藏状态变化幅度很小,整个图的信息流动趋于平稳。至此,每个结点都“知晓”了其邻居的信息。状态更新公式仅描述了如何获取每个结点的隐藏状态,除它以外,我们还需要另外一个函数 g 来描述如何适应下游任务。举个例子,给定一个社交网络,一个可能的下游任务是判断各个结点是否为水军账号。

在原论文中,g又被称为局部输出函数(local output function),与 f 类似,g也可以由一个神经网络来表达,它也是一个全局共享的函数。那么,整个流程可以用下面这张图表达:

仔细观察两个时刻之间的连线,它与图的连线密切相关。比如说在 T1 时刻,结点 1 的状态接受来自结点 3 的上一时刻的隐藏状态,因为结点 1 与结点 3相邻。直到 Tn 时刻,各个结点隐藏状态收敛,每个结点后面接一个 g即可得到该结点的输出 o。

对于不同的图来说,收敛的时刻可能不同,因为收敛是通过两个时刻p-范数的差值是否小于某个阈值 ϵ来判定的,比如:

1.2 不动点理论

在本节的开头我们就提到了,GNN的理论基础是不动点(the fixed point)理论,这里的不动点理论专指巴拿赫不动点定理(Banach's Fixed Point Theorem)。首先我们用 F 表示若干个 f 堆叠得到的一个函数,也称为全局更新函数,那么图上所有结点的状态更新公式可以写成:

不动点定理指的就是,不论H0是什么,只要 F 是个压缩映射(contraction map),H0经过不断迭代都会收敛到某一个固定的点,我们称之为不动点。那压缩映射又是什么呢,一张图可以解释得明明白白:

上图的实线箭头就是指映射 F, 任意两个点 x,y 在经过 F 这个映射后,分别变成了 F(x),F(y)。压缩映射就是指,经过 F变换后的新空间一定比原先的空间要小,原先的空间被压缩了。想象这种压缩的过程不断进行,最终就会把原空间中的所有点映射到一个点上。

那么既然 f是由神经网络实现的,我们该如何实现它才能保证它是一个压缩映射呢?我们下面来谈谈 f的具体实现。

1.3 具体实现

在具体实现中, f其实通过一个简单的前馈神经网络(Feed-forward Neural Network)即可实现。比如说,一种实现方法可以是把每个邻居结点的特征、隐藏状态、每条相连边的特征以及结点本身的特征简单拼接在一起,在经过前馈神经网络后做一次简单的加和。

那我们如何保证 f是个压缩映射呢,其实是通过限制 f 对 H 的偏导数矩阵的大小,这是通过一个对雅可比矩阵(Jacobian Matrix)的惩罚项(Penalty)来实现的。在代数中,有一个定理是: f 为压缩映射的等价条件是 f 的梯度/导数要小于1。这个等价定理可以从压缩映射的形式化定义导出,我们这里使用 ||x|| 表示 x 在空间中的范数(norm)。范数是一个标量,它是向量的长度或者模,||x|| 是 x 在有限空间中坐标的连续函数。这里把 x 简化成1维的,坐标之间的差值可以看作向量在空间中的距离,根据压缩映射的定义,可以导出:

\left \| F'(x) \right \| - \left \| \frac{\partial F(x)}{\partial x} \right \|\leq c (?)

推广一下,即得到雅可比矩阵的罚项需要满足其范数小于等于c等价于压缩映射的条件。根据拉格朗日乘子法,将有约束问题变成带罚项的无约束优化问题,训练的目标可表示成如下形式:

其中λ是超参数,与其相乘的项即为雅可比矩阵的罚项。

1.4 模型学习

上面我们花一定的篇幅搞懂了如何让 f 接近压缩映射,下面我们来具体叙述一下图神经网络中的损失 Loss是如何定义,以及模型是如何学习的。

仍然以社交网络举例,虽然每个结点都会有隐藏状态以及输出,但并不是每个结点都会有监督信号(Supervision)。比如说,社交网络中只有部分用户被明确标记了是否为水军账号,这就构成了一个典型的结点二分类问题。

那么很自然地,模型的损失即通过这些有监督信号的结点得到。假设监督结点一共有 p 个,模型损失可以形式化为:

那么,模型如何学习呢?根据前向传播计算损失的过程,不难推出反向传播计算梯度的过程。在前向传播中,模型:

  1. 调用 f若干次,比如 Tn次,直到 h_{v}^{T_{n}}收敛。
  2. 此时每个结点的隐藏状态接近不动点的解。
  3. 对于有监督信号的结点,将其隐藏状态通过 g得到输出,进而算出模型的损失。

根据上面的过程,在反向传播时,我们可以直接求出 f和 g 对最终的隐藏状态h_{v}^{T_{n}}的梯度。然而,因为模型递归调用了 f若干次,为计算 f和 g对最初的隐藏状态 h_{v}^{0} 的梯度,我们需要同样递归式/迭代式地计算 Tn次梯度。最终得到的梯度即为 f 和 g 对 h_{v}^{0}  的梯度,然后该梯度用于更新模型的参数。这个算法就是 Almeida-Pineda 算法[9]。

1.5 GNN与RNN

相信熟悉 RNN/LSTM/GRU 等循环神经网络的同学看到这里会有一点小困惑,因为图神经网络不论是前向传播的方式,还是反向传播的优化算法,与循环神经网络都有点相像。这并不是你的错觉,实际上,图神经网络与到循环神经网络确实很相似。为了清楚地显示出它们之间的不同,我们用一张图片来解释这两者设计上的不同:

假设在GNN中存在三个结点x1,x2,x3,相应地,在RNN中有一个序列(x1,x2,x3)。笔者认为,GNN与RNN的区别主要在于4点:

  • GNN的基础理论是不动点理论,这就意味着GNN沿时间展开的长度是动态的,是根据收敛条件确定的,而RNN沿时间展开的长度就等于序列本身的长度
  • GNN每次时间步的输入都是所有结点 v的特征,而RNN每次时间步的输入是该时刻对应的输入。同时,时间步之间的信息流也不相同,前者由边决定,后者则由序列的读入顺序决定。
  • GNN采用 AP 算法反向传播优化,而RNN使用BPTT(Back Propogation Through Time)优化。前者对收敛性有要求,而后者对收敛性是没有要求的。
  • GNN循环调用 f 的目标是得到每个结点稳定的隐藏状态,所以只有在隐藏状态收敛后才能输出;而RNN的每个时间步上都可以输出,比如语言模型。

不过鉴于初代GNN与RNN结构上的相似性,一些文章中也喜欢把它称之为 Recurrent-based GNN,也有一些文章会把它归纳到 Recurrent-based GCN中。之后读者在了解 GCN后会理解为什么人们要如此命名。

1.6 GNN的局限

初代GNN,也就是基于循环结构的图神经网络的核心是不动点理论。它的核心观点是通过结点信息的传播使整张图达到收敛,在其基础上再进行预测。收敛作为GNN的内核,同样局限了其更广泛的使用,其中最突出的是两个问题:

  • GNN只将边作为一种传播手段,但并未区分不同边的功能。虽然我们可以在特征构造阶段x(u,v)为不同类型的边赋予不同的特征,但相比于其他输入,边对结点隐藏状态的影响实在有限。并且GNN没有为边设置独立的可学习参数,也就意味着无法通过模型学习到边的某些特性。
  • 如果把GNN应用在图表示的场景中,使用不动点理论并不合适。这主要是因为基于不动点的收敛会导致结点之间的隐藏状态间存在较多信息共享,从而导致结点的状态太过光滑(Over Smooth),并且属于结点自身的特征信息匮乏(Less Informative)。

下面这张来自维基百科[13]的图可以形象地解释什么是 Over Smooth,其中我们把整个布局视作一张图,每个像素点与其上下左右以及斜上下左右8个像素点相邻,这决定了信息在图上的流动路径。初始时,蓝色表示没有信息量,如果用向量的概念表达即为空向量;绿色,黄色与红色各自有一部分信息量,表达为非空的特征向量。在图上,信息主要从三块有明显特征的区域向其邻接的像素点流动。一开始不同像素点的区分非常明显,但在向不动点过渡的过程中,所有像素点都取向一致,最终整个系统形成均匀分布。这样,虽然每个像素点都感知到了全局的信息,但我们无法根据它们最终的隐藏状态区分它们。比如说,根据最终的状态,我们是无法得知哪些像素点最开始时在绿色区域。

事实上,上面这个图与GNN中的信息流动并不完全等价。从笔者来看,如果我们用物理模型来描述它,上面这个图代表的是初始时有3个热源在散发热量,而后就让它们自由演化;但实际上,GNN在每个时间步都会将结点的特征作为输入来更新隐藏状态,这就好像是放置了若干个永远不灭的热源,热源之间会有互相干扰,但最终不会完全一致。

2. 门控图神经网络(Gated Graph Neural Network)

我们上面细致比较了GNN与RNN,可以发现它们有诸多相通之处。那么,我们能不能直接用类似RNN的方法来定义GNN呢? 于是乎,门控图神经网络(Gated Graph Neural Network, GGNN) [10]就出现了。虽然在这里它们看起来类似,但实际上,它们的区别非常大,其中最核心的不同即是门控神经网络不以不动点理论为基础。这意味着:f不再需要是一个压缩映射;迭代不需要到收敛才能输出,可以迭代固定步长;优化算法也从 AP 算法转向 BPTT。

2.1 状态更新

与图神经网络定义的范式一致,GGNN也有两个过程:状态更新与输出。相比GNN而言,它主要的区别来源于状态更新阶段。具体地,GGNN参考了GRU的设计,把邻居结点的信息视作输入,结点本身的状态视作隐藏状态,其状态更新函数如下:

如果读者对GRU的更新公式熟悉的话,对上式应该很好理解。仔细观察上面这个公式,除了GRU式的设计外,GGNN还针对不同类型的边引入了可学习的参数W。每一种 edge 对应一个 W_{edge},这样它就可以处理异构图。

但是,仔细对比GNN的GGNN的状态更新公式,细心的读者可能会发现:在GNN里需要作为输入的结点特征 xv 没有出现在GGNN的公式中! 但实际上,这些结点特征对我们的预测至关重要,因为它才是各个结点的根本所在。

为了处理这个问题,GGNN将结点特征作为隐藏状态初始化的一部分。那么重新回顾一下GGNN的流程,其实就是这样:

  • 用结点特征初始化各个结点的(部分)隐藏状态。
  • 对整张图,按照上述状态更新公式固定迭代若干步。
  • 对部分有监督信号的结点求得模型损失,利用BPTT算法反向传播求得 W_{edge}和GRU参数的梯度。

https://www.cnblogs.com/siviltaram/p/graph_neural_network_1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/260340.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从源码到实践:深入了解鸿鹄电子招投标系统与电子招投标

在数字化采购领域,企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术,我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力,通过待办消息、招标公告、中标公告和信息发布等功能模块…

eslint严格规则检测问题报错

由于eslint严格规则检测问题报错时,更改两个文件package.json和vue.config.js package.json "no-unused-components": "off" vue.config.js lintOnSave: false 更改完成之后,重新run一下就OK了

DC电源模块在工业自动化中的关键应用案例分析

BOSHIDA DC电源模块在工业自动化中的关键应用案例分析 DC电源模块在工业自动化中有许多关键应用案例,以下是其中的一些: 1. 电机控制系统:在工业自动化中,电机控制是非常常见的应用。DC电源模块用于为电机提供稳定的直流电源&…

25考研指导规划建议(内含宝典级资料)

句句肺腑💪 📌1.没有导师不喜欢要英语好的学生。四六级报名咨询查询链接 普通大学生至少要拿到四级证书四级真题和资料,有解析包括听力 📌2.政治开始越早,离上岸越远 📌3.每年7、8月是弃考高峰、11月再弃…

聪明高效能力广,AGI如何赋能内容管理?

文 | 智能相对论 作者 | 叶远风 毫无疑问,现在的大模型在技术比拼之外,如何通过产品化的方式走入到实际业务,是各厂商的着力点。 而一些一贯与数字化场景紧密融合的服务厂商,在大模型浪潮一开始就已经走在落地一线。 大数据基…

mysql使用全文索引+ngram全文解析器进行全文检索

表结构:表名 gamedb 主键 id 问题类型 type 问题 issue 答案 answer 需求 现在有个游戏资料库储存在mysql中,客户端进行搜索,需要对三个字段进行匹配,得到三个字段的相关性,选出三个字段中相关性最大的值进…

基于alibaba druid的血缘解析工具

基于alibaba druid的血缘解析 1、前言 仅仅对mysql数据库的select查询语句进行了血缘解析,该血缘解析包含了原始表字段、临时表字段和目标表字段的关联关系。 2、涉及到技术 主要使用了druid的如下接口对语法树进行解析: (1)…

Linux笔记---系统信息

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 前言 命令 1. uname - 显示系统信息 2. hostname - 显示或设置系统主机名 3. top - 显示系统资源使用情况 4. df - 显示磁盘空间使用情…

HTTP协议 -JavaWeb基础必知

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 本…

2010-2020年中国1km陆地生态系统碳汇

2010-2020年中国1km陆地生态系统碳汇数据 引用地址: 赵俊芳.2010-2020年中国1km陆地生态系统碳汇产品数据集,北京:中国科学院地理科学与资源研究所,2023.doi:10.12237/casearth.6538842e819aec0f26f42cb0 数据作者 作者:赵俊芳 版权机构:中…

YoloV8的一个缓存问题

摘要 如果尝使用YoloV8,我们一定遇到这个问题:明明都配置正确了,但是还是报错,数据的类别一直匹配不上,数据集指向上一个YoloV8的数据集,这时候你就要检查一下缓存了! 解决方法 如果是Win电脑…

ChatGPT助力Excel数据分析:让你的工作事半功倍!

文章目录 一、ChatGPT简介二、ChatGPT在Excel数据分析中的应用1. 数据清洗2. 数据处理3. 数据分析4. 数据可视化 三、如何使用ChatGPT进行Excel数据分析1. 安装ChatGPT插件2. 输入问题或命令3. 查看结果并调整参数4. 导出结果并分享四、总结与展望 《巧用ChatGPT高效搞定Excel数…

Keil编译STM32工程,提示__align(4)处语法错误

好久没有用Keil编程,因为别人的代码是用Keil写的,所以又得安装起来,编译时遇到__align(4)的错误提示。 这个问题主要是编译器版本的问题,默认使用的是v6.19版本的编译器,而工程原来使用的是v5版本的,两个编…

Android: Ubuntu下交叉环境编译常用调试工具demo for lspci命令(ARM设备)

lspci命令交叉环境编译(ARM设备) 交叉编译工具下载: https://releases.linaro.org/components/toolchain/binaries https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/ lspci命令交叉环境编译(ARM设备): 1&a…

本地文件内容搜索神器AnyTXT Searcher如何搭建与远程访问

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况,异地办公或者不在公司,想找…

爬虫实战案例 -- 爬取豆瓣读书网页内容

进入网站检查信息 , 确定请求方式以及相关数据 找到爬取目标位置 开始敲代码 # 链接网站 def url_link(url):res requests.get(url,headers headers)response res.textparse_data(response)# 爬取信息 def parse_data(data):msg <li\sclass"media\sclearfix…

从安全性角度,看“可信数字底座”有何价值

文章目录 每日一句正能量前言概念对比安全技术对比思考与建议 每日一句正能量 不管现在有多么艰辛&#xff0c;我们也要做个生活的舞者。 前言 万向区块链此前提出“可信数字底座”这一概念和技术&#xff0c;即将区块链与物联网、人工智能、隐私计算等数字化技术相融合&#…

Java开发手册

扫一扫二维码关注公众号 1、每日推送人工智能、数据科学等行业最新重磅报告&#xff1b;2、回复“干货” &#xff0c;获取海量个性化推荐相关技术文档&#xff1b;3、最大最全的个性化推荐技术与产品社区&#xff0c;欢迎来撩&#xff1b; 个性化推荐技术与产品社区 前 言 …

解决:AttributeError: module ‘scipy.misc’ has no attribute ‘imresize’

解决&#xff1a;AttributeError: module ‘scipy.misc’ has no attribute ‘imresize’ 文章目录 解决&#xff1a;AttributeError: module scipy.misc has no attribute imresize背景报错问题报错翻译报错位置代码报错原因解决方法方法一 scipy版本回退&#xff08;不推荐&a…

2023最新最全【MYSQL】8.0.11下载,零基础入门到精通

1、下载安装&#xff1a; MySQL8下载地址&#xff1a;点击No thanks 点击底部“No thanks, just start my download.”直接下载就行。 然后将压缩包解压到电脑&#xff0c;直接抄我的 D:\Program Files (x86)\mysql\mysql-8.0.11-winx64 2、配置环境&#xff08;win10&#x…