图神经网络(GNN)入门学习笔记(直观且简单)

文章目录

    • 图的定义和表示
    • 可以使用图数据结构的问题
    • 将图结构用于机器学习的挑战
    • 最基本的图神经网络概述
    • 汇聚操作
    • 基于信息传递的改进图神经网络
    • 全局向量信息的利用

本篇文章参考发表于Distill上的图神经网络入门博客: A Gentle Introduction to Graph Neural Networks。同时,所有的图片也都来源于该博客。本文主要是记录本人自己的学习体会与心得,帮助其他初学者能够更快入门图神经网络而无需看冗长的英文原文。

图的定义和表示

在这里插入图片描述
图可以用三个符号进行表示:

  • 顶点集(V):图中的所有顶点构成一个顶点集;
  • 边集(E):图中的所有边构成一个边集;
  • 图整体(U):完整考虑一个图的所有顶点和边以及对应的拓扑结构,图的整体被称为U。

在计算机中,无论是顶点集、边集或者图整体都可以使用向量进行表示。顶点向量中的各个值表示顶点的属性;边向量中的各个值表示边的属性;图向量同理。

另外,一张图也可以使用离散数学中的邻接矩阵进行表示,具体内容可以参见离散数学课程教材。

很多现实中的问题,都可以把问题中的实体转化为图的顶点,把实体之间的关系转换为图中的边,从而使用图来表示该现实问题。

可以使用图数据结构的问题

可以使用图数据结构的问题可以分为三个类型,分别是图层面的问题、顶点层面的问题和边层面的问题。

  • 图层面的问题:找出含有两个环的图;
    在这里插入图片描述

  • 顶点层面的问题:将图中的所有顶点划分为两类;
    在这里插入图片描述

  • 边层面的问题:给图中的所有边判定类型。
    在这里插入图片描述

将图结构用于机器学习的挑战

将图结构应用于机器学习领域的最大挑战是如何表示图结构,使得其能够与搭建的神经网络兼容,并被计算机计算和处理。

图结构中包含有四类信息:顶点集信息、边集信息、图整体信息和连接性信息。前面三种类型的信息都可以通过向量或矩阵的方式进行表示,但是连接性信息的表示会更加麻烦。

表示连接性的最直观方法就是使用邻接矩阵,但是很多情况下邻接矩阵都是稀疏的,因此会无意义地占用非常大的存储空间。即使通过稀疏化的方式表示邻接矩阵也会有计算机难以处理的问题。

为此,可以通过邻接表的形式表示邻接矩阵。邻接表的大小与边的数量成正比,其中的每一个元素记录了哪两个顶点之间存在一条边。

在这里插入图片描述
下面将正式开始介绍图神经网络。

最基本的图神经网络概述

图神经网络本质上就是一个特用于图模型的神经网络。

图神经网络的基本思路如下:由于上面我们已经提到,图中除了连通性信息外,其他的三个属性(顶点集、边集和整体)都可以用能够代入神经网络进行计算的向量来进行表示,因此,我们对于三类属性,分别构造一个神经网络。

也就是说,一个神经网络以顶点集向量作为输入,一个神经网络以边集向量作为输入,另一个神经网络以整体向量作为输入。这样的三个网络组合在一起,就构成了图神经网络的一个层。多个图神经网络层叠加在一起,就构成了完整的图神经网络。

需要注意的有两点:首先,是每一个图神经网络层中的神经网络的输出形状都与输入形状相同,也就是说,输入的向量长度和输出的向量长度相同;其次,对于图的连通性,图神经网络不会对其进行修改,也就是说,一张图经过了图神经网络,其连通性不会发生改变:原来相连的两个顶点仍然相互连接。

面对分类任务,只需要在最后一层输出加上全连接层和softmax分类即可。基本原理也如下图所示:

在这里插入图片描述

汇聚操作

有时在实际问题中会遇到一些特殊的情况,使得无法同时获得顶点集的向量、边集的向量和整体的向量,这个时候,就可以使用汇聚的思想来补充生成当前没有的向量。下面将以缺失顶点集为例进行说明,其他情况可以类比推理。

当顶点集缺失时,每一个顶点连接了多条边,因此可以把每个顶点连接的多条边的向量进行叠加,最后再加上整体的向量,即可替代该顶点的向量。

在这里插入图片描述

基于信息传递的改进图神经网络

上面所提到的基本图神经网络存在一个问题,那就是没有利用图的连通性,从而损失了图中的一部分信息。

为了能够利用连通性,下面将给出一种基于信息传递的改进的图神经网络。

以顶点集为例。在改进的网络中,当一个顶点的向量需要准备待入顶点对应的神经网络进行更新时,并不是直接将该点的结果代入,而是将该顶点以及与该顶点直接相连的顶点的向量相加后进行代入,从而利用上之前未被利用的连通性信息。

边集的信息传递改进图神经网络原理类似。

全局向量信息的利用

之前的介绍中,我们只是说了全局向量是需要计算的以及其计算方法,但是并没有介绍其使用过程,下面将进行介绍。

全局向量可以抽象为一个虚拟的顶点(被称为master node),该顶点与图中的所有顶点相连,同时与图中的所有边相连(点如何与边相连?这是因为这个顶点是抽象的,也可以把这个虚拟顶点想象为一个又是顶点又是边的东西)。

基于上面介绍的信息传递的原理,每次该虚拟顶点在经过全局神经网络更新之前,需要叠加图中当前状态其他所有顶点和边的向量信息。通过这样的方式,就成功利用了图的全局信息。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2050. Parallel Courses III【记忆化搜索,动态规划,拓扑排序】困难

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

多线程之GCD应用

一些套话 GCD全称是Grand Central Dispatch,它是纯 C 语言,并且提供了非常多强大的函数 GCD的优势: GCD 是苹果公司为多核的并行运算提出的解决方案GCD 会自动利用更多的CPU内核(比如双核、四核)GCD 会自动管理线程的…

SpringBoot+Prometheus+Grafana实现系统可视化监控

场景 SpringBoot中集成Actuator实现监控系统运行状态: SpringBoot中集成Actuator实现监控系统运行状态_springboot actuator 获取系统运行时长_霸道流氓气质的博客-CSDN博客 基于以上Actuator实现系统监控,还可采用如下方案。 Prometheus Prometheu…

Selenium基础篇之屏幕截图方法

文章目录 前言一、用途1.捕获页面错误2.调试测试用例3.展示测试结果4.记录页面状态 二、方法1. save_screenshot2. get_screenshot_as_file3. get_screenshot_as_png4. get_screenshot_as_base64 总结 前言 大家好,我是空空star,本篇给大家分享一下Selen…

CMU 15-445 -- Logging Schemes - 17

CMU 15-445 -- Logging Schemes - 17 引言IndexFailure ClassificationTransaction FailuresSystem FailuresStorage Media Failures Buffer Pool PoliciesShadow Paging: No-Steal ForceWrite-Ahead Log (WAL): Steal No-ForceLogging SchemesCheckpoints小结 引言 本系列为…

IDEA配置远程docker解释器及无编码提示/关联不到python依赖问题

文章目录 1. 修改docker默认配置以支持远程连接2. 配置docker远程解释器3 .IDE配置project SDK4. 本地代码与Linux目录映射5.运行配置 1. 修改docker默认配置以支持远程连接 vim /lib/systemd/system/docker.service,修改docker启动参数 #ExecStart/usr/bin/dockerd -H fd://…

c++学习(c++11)[24]

c11 列表初始化 #include"iostream" using namepace std;int main() {int x1 1;int x2 { 2 };int x3 { 2 };vector<int> v1 {1,2,3,4,5,6};vector<int> v1 {1,2,3,4,5,6};list<int> lt1 {1,2,3,4,5,6};list<int> lt1 {1,2,3,4,5,6};au…

Python(四十九)获取列表指定元素的索引

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

汇编调用C语言定义的全局变量

在threadx移植中&#xff0c;系统的systick通过了宏定义的方式定义&#xff0c;很难对接库函数的时钟频率&#xff0c;不太利于进行维护 所以在C文件中自己定义了一个systick_Div的变量&#xff0c;通过宏定义方式设定systick的时钟频率 在汇编下要加载这个systick分频系数 …

UDS诊断协议

UDS本质上是一系列服务的集合&#xff0c;包含6大类&#xff0c;共26种。每种服务都有独立的ID&#xff0c;即SID。 请求 SID(1Byte) 参数 SID(1Byte) Sub-function(1Byte) 参数 SID DID(2Bytes) 响应 肯定响应 SID0x40(1Byte) Sub-function(根据请求是否存在) 参数…

Windows数据类型LPSTR学习

Windows在C语言的基础之上又定义了一些Windows下的数据类型&#xff1b;下面学习一下LPSTR&#xff1b; LPSTR和LPWSTR是Win32和VC所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的32位ANSI字符数组指针&#xff0c;而LPWSTR是一个指向以NULL结尾的64…

2023年基准Kubernetes报告:6个K8s可靠性失误

云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面&#xff0c;但大多数组织预计今年的云使用和支出将与计划的相同&#xff08;45%&#xff09;&#xff0c;或高于计划的&#xff08;45%&#xff09;…

大数据Flink(五十三):Flink流处理特性、发展历史以及Flink的优势

文章目录 Flink流处理特性、发展历史以及Flink的优势 一、Flink流处理特性 二、发展历史

opencv-28 自适应阈值处理-cv2.adaptiveThreshold()

什么是自适应阈值处理? 对于色彩均衡的图像&#xff0c;直接使用一个阈值就能完成对图像的阈值化处理。但是&#xff0c;有时图像的色彩是不均衡的&#xff0c;此时如果只使用一个阈值&#xff0c;就无法得到清晰有效的阈值分割结果图像。 有一种改进的阈值处理技术&#xff…

五、控制流(2)

本章概要 returnbreak 和 continue臭名昭著的 gotoswitchswitch 字符串 return 在 Java 中有几个关键字代表无条件分支&#xff0c;这意味无需任何测试即可发生。这些关键字包括 return&#xff0c;break&#xff0c;continue 和跳转到带标签语句的方法&#xff0c;类似于其…

不管如何吐槽,购买iPhone的用户依然义无反顾,苹果继续增长

市调机构IDC公布的二季度数据显示&#xff0c;苹果成为前五名之中除华为之外第二家取得增长的手机品牌&#xff0c;而其他国产手机品牌的出货量都在下滑&#xff0c;显示出国内的消费者仍然在热烈追捧iPhone。 二季度苹果在国内市场的手机出货量同比增长6%&#xff0c;虽然增速…

Android Studio下载及安装和Gradle的配置

文章目录 下载安装修改Sdk的位置创建项目修改Gradle的位置查看AS版本工具栏--View项工具栏--Build下的功能说明Build Variants视图说明下载模拟器&#xff08;avd&#xff09;/安卓虚拟设备屏幕熄灭功能关闭虚拟设备功能删除自己开发的应用软件将开发的应用运行到虚拟设备上。 …

从分片传输到并行传输之大文件传输加速技术

随着大文件的传输需求越来越多&#xff0c;传输过程中也会遇到很多困难&#xff0c;比如传输速度慢、文件安全性低等。为了克服这些困难&#xff0c;探讨各种大文件传输加速技术。其中&#xff0c;分片传输和并行传输是两种比较常见的技术&#xff0c;下面将对它们进行详细说明…

Java版知识付费源码 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含&#xff1a;录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署&#xff0c;免费售后&#xff0c;专业技术指导&#xff0c;支持PC、APP、H5、小程序多终端同步&#xff0c;支持二次开发…

【Java】Java多线程编程基础

文章目录 1. 进程与线程1.1 进程与线程的基本认识1.1.1 进程&#xff08;Process&#xff09;1.1.2 线程&#xff08;Thread&#xff09; 1.2 为什么会有线程1.2.1 以看视频为例 2. 多线程实现2.1 Thread类实现多线程2.2 Runnable接口实现多线程2.3 Callable接口实现多线程2.3 …