量化投资与机器学习微信公众号,是业内垂直于量化投资、对冲基金、Fintech、人工智能、大数据等领域的主流自媒体。公众号拥有来自公募、私募、券商、期货、银行、保险、高校等行业30W+关注者,荣获2021年度AMMA优秀品牌力、优秀洞察力大奖,连续2年被腾讯云+社区评选为“年度最佳作者”。

作者 | Rishabh Anand       编译 | QIML编辑部

前言

多年来,图深度学习(GDL)的发展步伐加快了。现实生活中许多网状结构的问题使的GDL成为一个通用的工具。该领域在社交媒体、药物发现、芯片植入、预测、生物信息学等方面显示出了很大的潜力。在本篇文章中,我们将使用最少的数学知识为大家介绍图深度学习(或图神经网络)。

图深度学习背后的思想是通过节点和边来学习图的结构和空间特征,这些节点和边代表不同的主体体及主体间的交互。

往期图神经网络文章推荐:

点击标题阅读

因子挖掘:基于图神经网络与公司主营(附代码)

深度动态因子模型、图神经网络

基于图神经网络、图谱型数据的收益预测模型(附代码)

白鹭女掌门张晨樱:打造反脆弱的量化多策略盈利武器

如何表示图?

在学习图神经网络之前,我们先弄清楚计算机如何表示一幅图。图 是一种包含一系列节点 和边 的数据结构。如果两个节点 和 相连,则 ,否则 。节点之间的连接关系可以用一个矩阵表示,这个矩阵称为邻接矩阵(Adjacency Matrix):

我们假设上文所说的图中的边是没有权重也没有方向,并且假设是同质图,也就是说图中的节点或边都是同类型的,反过来如果节点或边有不同的类型,则称之为异质图。

图与常规数据的不同之处在于,图具有神经网络必须遵守的结构;如果不好好利用它就太浪费了。这是一个社交媒体图的例子,节点是用户,边是他们的交互(如关注/喜欢/转发)。

图(Graph)与图像(Images)的关系

图像本身就是一个图,它是一种特殊的变体,称为“网格图”,其中一个节点的出边数对所有内部节点和角节点都是恒定的。在图像网格图中存在一些一致的结构,允许对其执行简单的卷积类操作

如下左图,一幅图像可以被认为是一个特殊的图,其中每个像素都是一个节点,并通过虚拟的边缘与周围的其他像素相连接。当然,现实情况下以这样的视角看图像是不现实的,因为这意味着有一个非常庞大的图。以CIFAR-10的图像为例, 的图像将有3072个节点和1984条边。更别说像ImageNet里 的图像了。

然而,正如你所观察到的,图并不是那么完美。不同的节点有不同的度(连接到其他节点的数量),并且分布在各个地方。图中没有固定的结构,但是这种不固定的结构为图增加了价值。因此,在这个图上学习的任何神经网络在学习节点(和边)之间的空间关系时必须尊重这个结构。

理解图神经网络

单个图神经网络(GNN)层对图中的每个节点上有以下操作:

1、消息传递(Message Passing)

2、聚合(Aggregation)

3、更新(Update)

这些操作组合在一起,形成了通过图深度学习的构建模块。GDL的创新主要涉及对这三个步骤的改变。

节点(Node)

请记住,节点代表一个实体或对象,就像社交媒体中的用户。因此,这个节点具有所表示实体的一系列属性特征。这些节点属性构成了节点的特征(即“节点特征”或“节点嵌入”)。通常,这些特征可以用向量 表示。这个向量要么是一个隐含的表征(embedding),要么是这个结点具体的属性特征。

例如,在社交媒体图中,用户节点具有可以用数字表示的年龄、性别、政治倾向、关系状态等属性。

同样,在分子图中,原子节点可能具有化学性质,如对水、力、能量等的亲和力,这些性质也可以用数字表示。

这些节点的特征可以作为GNN的输入。正式的,每个节点 的特征用 表示,并且用 表示标签:

边(Edges)

边也可以有属性或特征 。例如,原子之间的化学键,我们可以把下面的分子想象成一个图形,其中原子是节点,键是边。虽然原子节点本身有各自的特征向量,但边可以有不同的边特征,以编码不同类型的键(单键、双键、三键)。

现在我们知道了如何表示图中的节点和边,下面让我们从一个简单的图开始,图中有一些节点(具有节点特征)和边。

消息传递(Message Passing)

GNN以其学习结构信息的能力而闻名。通常情况下,具有相似特征或属性的节点是相互连接的(在社交媒体中是这样的)。GNN利用这一特点,学习特定的节点如何以及为什么会相互连接,而有些节点则不会。为此,GNN会观察节点的邻域。

定义节点 邻域 为与节点 连接的一系列节点 ,表示为

GNN可以通过查看邻近的节点 来了解节点 的很多信息。为了在源节点 和它的邻居 之间共享信息,GNN使用消息传递的机制。

对于GNN层,Message Passing定义为获取邻居的节点特征,对其进行转换,并将其“传递”给源节点的过程。对图中的所有节点并行地重复这个过程。

如下图,节点6的邻域 。我们用 分别表示三个邻节点的特征,并用函数 表示消息转换的过程。那么,一条“消息”就是从一个邻节点经函数 转换过来的特征。

聚合(Aggregation)

节点节点6有了从邻节点 传来的消息 ,我们需要把这些消息聚合(Aggregation)。有许多方法可以对消息进行聚合,比如:

402 Payment Required

我们用函数 表示聚合函数,最终聚合后的消息如下:

更新(Update)

使用这些聚合的消息,GNN层现在必须更新源节点 的特性。在这个更新步骤里,节点 不仅应该知道它自己,还应该知道它的邻居。这个过程可以通过获取节点 的特征向量并将其与聚合的消息相结合。

比如使用加法对自身的特征和邻节点传递过来的聚合后的消息进行结合:

其中 是激活函数(比如ReLU,ELU,Tanh), 和 都是一个简单的MLP层,用于改变向量的维度。

当然也可以简单的讲节点本身的特质与消息进行拼接:

更通用的,我们用函数 表示对节点本身的特质与消息进行转换的过程:

注意,上式中 为原节点的特征,经过一层GNN的前向传播计算后的结果用 表示。如果有多层GNN,则使用 表示经第 层GNN计算后的结果,也就是说 = 。

所有以上三个过程整合到一起,可以用下式表示(使用加法进行消息的聚合):

402 Payment Required

如果边也有特征,用 表示边的特征,那么在第 层,我们可以使用一个简单的MLP层来更这一层边的表征:

402 Payment Required

邻接矩阵(Adjacency Matrices)

目前为止,我们都是考虑图中某个节点的前向传播过程。如果有邻接矩阵 我们就可以在整个图上进行前向传播计算。

在传统神经网络中,对于一个样本 一个前向传播是:

其中 , 。如果需要对所有样本同时进行前向传播,可以用矩阵的形式:

在邻接矩阵中,每一行 表示与节点 连接的所有节点 ,其中如果 表示 相连,如果 表示 无连接。比如 ,表示节点2与节点1,3和4相连。所以当 与 相乘时,第2和5列就会忽略。

所以基于矩阵,对图上所有节点进行前向计算时可以使用邻接矩阵:

但是邻居矩阵数学公式: 中并没有考虑节点自身的信息,所以可以给邻接矩阵加上一个单位矩阵:

叠加GNN层

上文我们介绍了一层GNN的结构,我们可以叠加多个GNN层构建一个图神经网络模型:

1、第一层的输入是节点的原始特征 ,输出为隐藏状态 其中 为第一层表征的维度。

2、然后 作为第二层的输入,输出 。

3、多层之后,在第 层的输出为

以上 作为模型的超参数,需要我们自行设定。

有了最后一层的输出数学公式: ,我们可以做很多事情:

1、我们可以在 的维度计算 的和,得到一个维度 的向量作为整个图的表征,可以使用这个表征对图进行分类。(图分类任务)

2、我们也可以将 传入一个Graph Auytoencodr进行图结构的清洗与重建。

3、我们还可以把每个节点的表征 传入一个分类器,进行节点分类。

4、把两个节点的表征一起传入一个 MLP 层,去判断两个节点之间是否存在连接。

常见的图神经网络

Graph Convolution Network(GCN)

详细介绍参考以下论文:

https://arxiv.org/abs/1609.02907

GCN中,对于邻节点的消息,只是一个简单的加总,再加上一个非线性激活的过程:

但是,在论文中,作者还对邻接矩阵根据每个节点的度进行了标准化,即:

最后:

Graph Attention Network(GAT)

详细介绍参考以下论文:

https://arxiv.org/abs/1710.10903

不同的邻节点的重要性应该是不一样的,GAT考虑到了这一点并引入了自注意力机制。

关于自注意力机制可以参考以下论文:

https://arxiv.org/abs/1706.03762

每条边的权重,使用以下方法进行计算:

在GAT中,消息的传递可以看作是一个加权平均的过程,而权重是通过以上自注意力机制并进行Softmax权重归一后计算得出:

402 Payment Required

GraphSAGE

详细介绍参考以下论文:

https://arxiv.org/abs/1706.02216

GraphSAGE的全称是Graph SAmple and AggreGatE,主要用于非常大的密集的图计算。该模型在节点的邻域上引入了学习聚合器。与考虑邻居中的所有节点的传统GAT或GCNs不同,GraphSAGE统一地对邻居进行采样,并在它们上使用学习到的聚合器。

假设模型一共有 层,每一层 。假设我们要聚合K次,则需要有K个聚合函数(aggregator),可以认为是N层。每一次聚合,都是把上一层得到的各个node的特征聚合一次,在假设该node自己在上一层的特征,得到该层的特征。如此反复聚合K次,得到该node最后的特征。最下面一层的node特征就是输入的node features。

402 Payment Required

Temporal Graph Network

详细介绍参考:

https://arxiv.org/abs/2006.10637

到目前为止所描述的网络都是在静态图上工作的。现实生活中的大多数情况都是在动态图上工作的,其中节点和边在一段时间内被添加、删除或更新。时态图网络(TGN)研究连续时间动态图(CTDG),它可以表示为按时间顺序排序的事件列表。

参考论文中将事件分为两种类型:节点级事件和交互事件。节点级事件涉及一个孤立的节点(例如用户更新他们的个人简介),而交互事件涉及两个可能连接或不连接的节点(例如:用户a转发/关注用户B)。

TGN通过以下组件提供了一种模块化的CTDG处理方法:

1、消息传递函数:消息在独立节点或交互节点之间传递(对于任何类型的事件)。

2、消息聚合函数:使用GAT的聚合,通过多个时间步来确定“邻居节点”,而不是在给定的时间步上查看“邻居节点”。

3、更新:这个模块根据在一段时间内发生的交互来更新节点的内存。

4、时间嵌入:一种表示节点的方法,同时也捕捉了时间的本质。

5、链接预测:通过某种神经网络对事件中涉及的节点的时间嵌入进行反馈,计算边的概率(即该边缘是否会在未来发生?)当然,在训练过程中,我们知道边的存在所以边标签是1。我们需要训练基于sigmoid的网络来预测这一点。

总结

当处理具有类似网络结构的问题时,Graph Deep Learning是一个很好的工具。它们很容易理解和实现,当前流行的库包括“PyTorch geometry”、“Spektral”、“Deep Graph Library”,以及最近发布的“TensorFlow-gnn”。

Quant进阶:用『最少』的数学,学『最全』的图神经网络相关推荐

  1. 冠军出炉!2022『猛犸杯』国际组学数据创新大赛圆满收官

    2022 MICOS 2月26日,由中国生物信息学学会(筹).广东省科技基础条件平台中心指导,深圳国家基因库.鹏城实验室.深圳华大生命科学研究院主办的2022『猛犸杯』国际组学数据创新大赛(2022 ...

  2. 建议收藏!早期人类驯服『图神经网络』的珍贵资料

    大家好,我是kaiyuan????‍???? 五一有空复盘了最近一年的项目,除了常规的NLP项目之外,还有几个之前没有涉及过的领域.今天这篇文章整理分享了我从零开始图网络之旅的一些有帮助的学习资源,希 ...

  3. python如何攻击网站_GitHub - wuhuanyan/buy_pig_plan_python: 用Python写的『电话攻击,电话轰炸,电话炸弹』...

    买猪计划(buy_pig_plan) Python版 用Python写的『电话攻击,电话轰炸,电话炸弹』,其攻击流程参考了『aqiongbei/buy_pig_plan』 为什么开发这个东西? 为了对 ...

  4. 『大牛公司机构近期研究报告大合集』第二版

    免费『大牛公司机构近期研究报告大合集』第二版(阿里.腾讯.麦肯锡.毕马威.德勤.普华永道等几十家倾情巨献!) 2016-03-04 数据局http://mp.weixin.qq.com/s?__biz ...

  5. 『中级篇』docker导学(一)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker导学(一) 这两年容器技术及其相关工具,平台异常火爆.在各大技术论坛或云计算峰会议题中,都会占很大比重, ...

  6. 收割10W大奖+大厂面试+成果发表 | 2022『猛犸杯』国际组学数据创新大赛开放报名

    由中国生物信息学学会(筹).广东省科技基础条件平台中心指导,深圳国家基因库.鹏城实验室.深圳华大生命科学研究院主办的2022『猛犸杯』国际组学数据创新大赛开放报名. 点击下方链接参与报名 022『猛犸 ...

  7. 【深度学习的数学】“2×4×1层带sigmoid激活函数的神经网络感知机对三角形平面的分类训练预测”,输出层加偏置b(实时绘制损失函数曲线)(对输入数据归一化)(奇迹出现了!)

    文章目录 前言 代码 修改之前错误的代码 知道为何Z的结果不能拟合到预期的5了 解决办法1:取消输出层神经单元的a和b(直接将z作为输出)(这个办法不行,影响神经单元的完整性,没法计算出输出层神经单元 ...

  8. 数学学得好,才可以发现别人发现不了的挣钱良机

    全世界有3.14 % 的人已经关注了 数据与算法之美 2011年,美国波士顿地区的一种彩票 "Cash WinFal"爆出了一个存在已久的漏洞.让人惊奇的是,一对 73 岁的夫妇已 ...

  9. 数学学得好是一种怎样的体验?

    数学学得好是一种怎样的体验? >>>> 01 你会觉得 整个世界都被你踩在脚下 02 当你以你认为最trivial的方式 跟其他人解释问题时 他们还是不知道你在说什么 03 聚 ...

最新文章

  1. 设计一款编程语言有多难?
  2. 亿级流量架构之分布式事务思路及方法
  3. 关于Windows系统virtualenv环境安装MySQL-Python的解决方案
  4. 2020.12.17
  5. Cuda编程学习(一)
  6. 011——数组(十一)array_merge array_merge_recursive array_change_key_case
  7. Liferay MinifierFilter的研究
  8. python学习机器学习_机器学习Python技巧,令人毛骨悚然的Linux命令,Thelio,Podman等
  9. python网络爬虫学习笔记(九):Beautiful Soup的使用
  10. SQl SGA 整理
  11. 我们要不要上线「个人app」 ?
  12. java 抽样算法_java生成抽样随机数的多种算法
  13. 腾讯程序员月薪7万,小编感觉自己像码畜...
  14. CTF训练 web安全SSI注入
  15. 金山云发布感知评价指标KPA 拨开遮挡高清视频技术的迷雾
  16. 牛客网 石家庄铁道大学新生选拔赛
  17. 电商网站爬虫案例(1)
  18. 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)
  19. Javascript对圆角div的实现
  20. 曙光服务器如何重新设置u盘启动_曙光服务器u盘安装linux系统

热门文章

  1. mysql 8.0版本 error 3516 ;error 3618
  2. vue使用svg画拓扑图(关系图) 拖拽 缩放
  3. 吐血整理!万字原创读书笔记,数据分析的知识点全在这里了
  4. UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98 in position 1093: illegal multibyte sequence
  5. [健康]巧用药茶疗慢性咽炎
  6. 原生实现鼠标右键点击显示菜单
  7. 牛客竞赛每日俩题 - Day1
  8. 设计模式中的结构类模式
  9. Chu序列的特性及仿真说明(2020_11_3更新)
  10. 怎么做能防止B站再崩?