【GNN】第一章:知识体系架构概览

图神经网络GNN

图神经网络, Graph Neural Networks, 是图数据+神经网络架构, 是一种处理图结构数据的深度学习方法,就是将神经网络模型拓展到图数据计算领域
由于图神经网络仅仅图数据挖掘领域的一个重点子领域,所以本系列会站在图挖掘角度来讲解相关知识点。

【GNN】第一章:知识体系架构概览

一、图神经网络是干什么的?

数据角度看,我们之前学的MLP、CNN、RNN、Transformer等深度学习架构,处理的都是结构化数据,比如下图这些数据:

这些结构化数据都是规则数据。比如上图的鸢尾花数据集就是一个二维表格数据,这个数据集中的所有样本都是独立同分布的,就是样本和样本之间是没有关系的。再比如上图的图像数据、音频数据、文本数据,这些数据的样本和样本之间仅仅隐含着一个位置序列关系或者时间序列关系。像上面这些表格数据、序列数据,我们都是可以将每个样本表示成矩阵、张量、序列(sequence) 等规则数据,然后喂入我们之前学的MLP、CNN、RNN、Transformer等深度学习架构中训练的。

但是在现实世界中,并不是所有的事物都可以用结构化数据来表示的,相反有更多的事物只能抽象成图问题,然后图数据来表示。比如社交网络、交通路网、知识图谱、电商购物、文件系统、检测异常节点、蛋白质相互作用关系、分子结构、识别与疾病相关的基因、药物推荐等,这些事情就没法用结构化数据来表示,只能以图(Graph)的形式来表示实体之间的复杂关系,如下图所示:

上图就是图结构数据,是一个由节点组成的复杂关系网络,其中节点代表实体边代表实体之间的关系

所以,图数据是非规则的、非结构化的数据,具体表现下面这些特征:

任意的大小和复杂的拓扑结构;
没有固定的节点排序或参考点;
节点是无序的,节点可以有不同的邻居节点;
通常是动态的,并具有多模态的特征;
图的信息并非只蕴含在节点信息和边的信息中,图的信息还包括了图的拓扑结构。

针对这样的数据,我们之前学的架构是无能为力的。随着深度学习的突飞猛进,人们开始尝试用深度学习理念来解决图数据问题,于是图神经网络诞生了。所以图神经网络是专门用来处理图数据的深度学习网络架构
或者更广义的说,不管你的数据是啥,只要你的数据可以抽象成图结构的形式,你的数据就适合用图神经网络跑一跑。比如小图片数据、序列数据,也可以抽象成图数据:

由此也可见,图神经网络适用的数据格式是非常随意的,它不像MLP、CNN、RNN、Transformer那样,必须要数据规整、要resize、要截断填补等,图神经网络要求的数据只要有点有边就行,至于几个点几条边都随意。

在我们生活中图数据无处不在,不管是互联网、社交、推荐、搜索,还是法律、历史、生物、医学,都充斥着海量的图数据。因为只要有关联,这些关联就可以被抽象成图数据嘛。那对这些图数据进行识别、处理、挖掘、应用就是自然而然的现实需求了,也所以对应的图算法也是五花八门各种各样。

现在只要你看到像"图机器学习、图数据挖掘、图神经网络、知识图谱、知识计算、对话问答、推荐系统、社会计算、媒体计算、网络智能、搜索引擎、社交网络、情感计算"等技术名词,你就要知道这些技术背后都是图。可见图数据挖掘现在已经是IT界的一个必备的通用技能了,各行各业都需要。

二、学习路径

目前图神经网络使用最广泛的一个框架就是PyG,当然还有DGL库也是非常流行的,李沐老师推荐的就是DGL。但是我们现在不讲这个话题。
这是PyG的官网地址:PyG Documentation — pytorch_geometric documentation 。PyG是斯坦福大学自建的PyTorch扩展库,是斯坦福大学专门为开发和实施图神经网络而开发的专用库。从官网上我们可以找到斯坦福CS224W图机器学习、图神经网络公开课 : CS224W | Home ,让大家看这个公开课是目的,呵呵。

从这个公开课我们可以窥视一下这个领域涵盖的内容,下面简单介绍一下这个公开课的内容:

从课程内容上看,课程是先讲深度学习之前的图数据处理算法,也就是图数据的机器学习算法:图机器学习算法,也是我们经常说的传统图机器学习,对应的学习领域就是图论部分,经典的算法主要有Node2Vec、DeepWalk、PageRank等(2-4)。这些基础知识你都打扎实后,才开始学习图深度学习网络(6-9,当然这个是重点),然后是知识图谱的算法(10、11),然后是子图检测(12、13),然后是图生成算法(14、15),最后是这个领域的一些高阶算法(16、17)。

这个课程基本也就是图数据挖掘涉及到的所有相关的知识点了。从中我们也可以看到,其实图神经网络只是其中的一个重点部分。所以后面我写的内容基本也是按照这个课程的脉络来写。

三、实际问题和学习内容的对应关系

下图是我在bilibili上看斯坦福大学CS224W图机器学习公开课-同济子豪兄中文精讲的视频总结的,如果觉得看不明白,自行到哔哩哔哩上搜索原视频观看。原视频作者实力太强了,他的视频价值非常非常高!在此表示深深的感谢!

上图是宏观角度。从上图我们可以看到一些现实中的实际项目需求对应的学术研究方向,以及这些学术研究方向下经典的算法,这些算法就是你实际项目的解决方案。

下图是微观角度。从实操层面来明确你实际项目的实现路径:

这其实就是我们之前深度学习中的学习任务概念,就是你拿到一个项目后第一步要思考和确定的事情:你这个项目的学习任务是什么:

对于图学习任务来说,它又是分层的,分节点层面的任务、边层面的任务、子图层面任务、整图级层面的任务:

(1)节点层面的任务(Node level)
就是对节点进行分类或者回归,比如推断节点属性、检测异常节点,比如预测是否是垃圾邮件发送者、预测节点是否是信用卡欺诈用户等场景对应的就是节点分类任务。
如果所有节点都有标签,那就是监督学习任务,由已知的节点类别推推出未知的节点类别;
如果只有部分节点有标签,那就是半监督学习任务,由少部分已知节点类别推断出其他无标签节点的类别。

(2)边层面的任务(Edge-level)
就是对边进行分类和回归,由已知的链接推出未知的链接、预测两个节点之间是否有连接,比如道路交通的动态流量预测、推荐系统、药物副作用预测、药物与目标的相互作用识别、知识图谱的完成(knowledge graph completion)等任务,本质上都是边预测问题 link prediction。

(3)子图层面任务(subgraph level)
就是对节点进行聚类、或者相似度计算任务,比如社群检测、用户聚类、异常检测等需求对应的就是子图层面的任务。

(4)整图级层面的任务(Graph-level/Graph generation)
graph level可分为整图预测和图生成任务。
整图预测就是对整张图进行分类或归回,比如预测分子是否有毒,对整个分子属性进行预测等任务;
图生成比如生成新药物,生成分子结构。如果是动态生成的话,就是graph evolution,图演化,物理模拟,粒子位置变化的模拟。

学习任务确定后,第二步就是确定你的学习任务要分哪几个子环节,每个子环节的任务又是什么
第三步就是明确各个子任务对应的实现模型和算法,就是如何把你的子任务抽象成模型或者某个算法,比如节点、边、整图的嵌入问题,你是打算是用传统的图机器学习Pipeline来提取特征,还是用深度学习端到端end2end来自动完成?比如你的预测任务是打算直接用深度学习还是用知识图谱还是微调大模型?这些问题你都确定后,也就是你的大目标的实现路径基本就确定了。

下面第四步就是研究各个子任务对应的模型或者算法的输入输出,一是判断是否可以达到效果,二是根据模型要求的输入开始整理的数据,比如数据预处理、特征工程、数据增强等实现细节。

但是,这些从前往后、从宏观到细节的步骤,都不是一锤定音的,是还得从细节实操到宏观任务、从后往前不断反馈和微调前面的大方向的。比如如果数据不好,你得加强你的特征工程;如果特征工程做得不好,你可能得反过来调整你的模型;如果模型效果不好,你还得回头再调整数据或者改模型架构或者直接更换模型或者改进模型训练等环节。

总之一个完整的项目一定是:任务-数据-架构-训练-硬件相互匹配、环环相扣。比如你的数据处理一定要符合你的任务目标;你的架构设计一方面要匹配你的任务,另一方面还要匹配你的训练;模型的复杂度一方面要匹配数据,另一方面要匹配你的电脑硬件资源;模型的训练一方面要追求效果,另一方还追求效率,就是降低训练的时间成本和硬件成本,此时恰当的数据增强手段、或者更加高效的训练技术都可以降低你的训练成本。

总之,我想要表达的是,要完成一个实际项目除了根据上面两张图,对号入座你的解决方案、算法模型选择这种大方向,还要通盘考虑其他各个实操环节的细节。

四、图机器学习、图神经网络的相关工具

五、搭建环境:配置PyG

配置图神经网络库PyG,PyTorch Geometric,面向几何深度学习的PyTorch扩展库。几何深度学习指的是应用于图和其他不规则、非结构化数据的深度学习。从数据到架构到训练到可视化,PyG提供了一整套全面的工具,可以帮助我们实现基于图的深度学习任务。

配置PyG前你的电脑里面至少要有python、pytorch环境,所以我建议你最好在anaconda环境下配置。如果你觉得anaconda太重,你可以下载一个mini版的anaconda,然后再安装,就比较顺利。PyG不太好安装主要就是因为它有几个依赖,这几个依赖必须要安装对,才能顺利安装PyG。

我使用的是Anaconda + jupyter lab + pytorch配置图神经网络的运行环境。如果你的基础环境和我不一样,你再找找其他适合你的配置方式。PyG不是傻瓜式pip一键就安装了的,简单pip安装90%概率是失败的。

下面展示一下我的安装过程:


小结:
一是,你的python、pytorch都先安装好并可顺利运行。
二是,安装PyG的依赖库:torch-spares、torch-scatter、torch-spline_conv、torch-cluster、torch-lib。
三是,上官网https://github.com/pyg-team/pytorch_geometric 找到上面的依赖包并安装。
四是,pip 安装torch-geometric。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宝贝儿好

6元以上者可私信获PDF原文档

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值