【深度学习】可交互讲解图神经网络GNN
在正式开始前,先找准图神经网络GNN(Graph Neural Network)的位置。

图神经网络GNN是深度学习的一个分支。
深度学习的四个分支对应了四种常见的数据格式,前馈神经网络FNN处理表格数据,表格数据可以是特征向量,卷积神经网络CNN处理图像数据,循环神经网络RNN处理时序数据,图神经网络GNN处理图数据。
这里的FNN指的是如下图所示的带有输入层,隐藏层,输出层的网络。

但这四种对应关系并不是一成不变。
如果将图像拉直成向量,同样可以用FNN来处理。
声音文本这类时序数据,用RNN类型的网络最适合,但如果你把一个句子当作一个1*N的矩阵,那就可以用CNN处理了,只不过,CNN需要堆叠多个层来抓取时序数据中的上下文信息,这在图像领域被称为感受野。
注意:虽然可以通过一定的技巧把句子表示成矩阵然后用CNN处理,但从本质上来说,CNN还是不如RNN更适合处理时序数据。
如果将图像划分成patch,这些pathces组成序列,同样也可以用Transformer处理,这就是Vision Transformer:ViT。
而今天要讲的GNN,既能处理表格数据,又能处理图像,文本。
更准确地说,只要能表示成GNN兼容的图数据结构就能用GNN处理。
今天的文章来自distill发布的一篇博文:A Gentle Introduction to Graph Neural Networks。
网址:https://distill.pub/2021/gnn-intro/
B站沐神视频讲解:https://www.bilibili.com/video/BV1iT4y1d7zP/?spm_id_from=333.999.0.0
这篇文章写的非常好,亮点是不光有交互式图表,还有PlayGround,可见作者是下了一番功夫的。
先科普一下什么是Playground?
Playground通常指在机器学习和人工智能领域用来交互式体验和可视化AI模型的一种系统或平台。
下面展示两个AI Playground。


NVIDIA NGC或者Hugging face上有更多好玩的AI Playground,大家可以亲自去体验一下。
https://huggingface.co/
https://catalog.ngc.nvidia.com/
A Gentle Introduction to Graph Neural Networks
https://distill.pub/2021/gnn-intro/
但我不会将上面的文章原样照搬过来,而是进行概括性的总结,大家一定一定去阅读原文,因为原文里有大量的交互式图表和Playground,能加速对GNN的理解。
今天的主角是GNN,而GNN处理的对象是图Graph。跟其它神经网络一样,在其出现之前,都有传统的方法来处理对应的数据结构。
但是在数据量和算力的加持下,为了完成更复杂的任务,对应的神经网络应运而生,GNN也是如此。
后续内容主要分为四部分
1.什么样的数据可以很自然的表示成图
2.图与其它类型数据的不同之处以及如何应对这种不同
3.构建一个GNN
4.构建一个Playground在真实数据上进行训练
什么是图?
图是由节点和边组成的,用于表示对象之间关系的数据结构。
图也分为有向图和无向图,例如,社交媒体中,如果互相关注了则是无向图,如果像B站这样,我关注了你,但你并没有关注我,则是有向图。


节点有自己的属性,边有自己的属性,整个图也有自己的属性,如上图,属性可以用标量或者向量表示。向量大小可以不一致。
前面已经透漏了GNN可以处理图像和文本,那么图像和文本就可以表示成图。
先透露一下计算机如何存储图,一种是邻接矩阵,一种是邻接表。
图像的每个像素即是一个节点,节点的属性自然就是RGB值,相邻像素之间用一条边来表示相邻关系,这里用邻接矩阵来表示连接性。

同理,一个句子中每个字符,每个单词,每个Token都可以看作是一个节点,相邻节点之间可以用一条有向边相连,这就构成了一个有向图。

除此之外,还有很多其它数据可以表示成图。
分子由两个或多个原子通过共用电子对构成化学键而连接成一个整体,分子之间不同的连接方式构成了不同的物质。

社会是一个大家庭,所有成员和之间的关系构成了一个复杂的社交网络。

如果能够充分利用这个网络,就能发挥巨大价值,例如,知识图谱,推荐系统。
引用关系也可以组织成图,例如,维基百科中每个网页都会列出引用资料。
好了,到此我们已经能够把很多事物表示成图的形式,这样就够用GNN来处理了,那到底能干什么呢?
GNN主要能处理三种类型的任务。
图层面任务
对图的整体进行预测,GNN输出对整个图的预测属性,例如,下图中分辨出具有两个环的图,这就是一个针对整个图的分类任务。

对于图像和文本而言,图层面的任务类似于MINIS数字分类,或者句子情感分析,例如。判断一个句子表达的是正向情绪还是负面情绪。
顶点层面任务
GNN预测图中每一个节点的属性,例如,下图,预测社交网络中的成员是否是诈骗分子。这就是一个节点分类任务。

对于图像和文本而言,顶点层面的任务类似于图像分割,图像分割不就是对每个像素分类嘛,对于文本,就是预测句子中每个单词的词性(例如名词、动词、副词等)。
边层面任务
边的存在与否是一种结构属性,也就是连接性,GNN也可以预测图中边的非结构属性,什么是非结构属性?对于一个社交网络而言,边代表节点之间有关系,但如何度量亲疏程度呢?这就涉及边的非结构属性了。
预测亲疏程度是一个回归任务,下图则是一个分类任务,每一条边只能是watching,fighting,standing on中的一种。


后面我们会看到,这三类任务可以用一个统一的GNN网络解决。
GNN所面对的挑战
前面对于节点,边,图的属性预测GNN都能处理,但对于节点之间的连接性预测却是一种挑战,前面说过用邻接矩阵来表示连接性,当节点数增加,矩阵会变得非常稀疏,内存利用率很低,
例如,下图,仅有四个节点的随机组合对应的邻接矩阵就非常庞大了。
何况更多节点呢?

另外,当你将矩阵转置后,GNN输出结果不应该改变,因为转置没有改变节点之间的关系。


为了解决邻接矩阵带来的挑战,邻接列表应运而生。

到此我们已经扫清了所有障碍,接下来我们就构建一个简单的分类网络,来看看GNN是如何做预测的?

前面我们说过节点,边,图的属性就是一堆向量,也就是前面说的表格数据,处理向量用MLP就可以了,当然你也可以用其他网络,如上图,节点,边,图各有一个MLP,所有点参数共享,也就是所有点共用一个MLP,所有边共用一个MLP。
另外,Layner n+1与上一层相比,图的连接性没变,只改变了属性。也就是可以继续使用初始的邻接链表。
上图构成了一个GNN block,也叫做GNN层,类似CNN中的卷积层,多个GNN 层可以进行累加形成更复杂的网络。
有了GNN block,如果要构建一个节点二分类任务,那么用下面这个网络就够了。

但是,如果一个图只有边有信息,而节点没有存储信息,又要对节点进行分类,该怎么办?
此时就需要把边的信息利用起来了,这被称为信息聚合。

如上图,当对一个节点进行预测时,将所有与其相连的边的信息聚合起来作为节点的属性。
聚合操作可以时平均值,最大值,总和。
所以,有了信息聚合后,如果只有边的属性,要对节点分类,网络结构如下:

同理,有了信息聚合后,如果只有节点信息,要对边分类,网络结构如下:

有了信息聚合后,只有节点信息,对图分类:

最终的GNN结构如下:

有了信息聚合,就能构建更复杂的GNN网络,这个网络不仅能二分类同样适用于多分类问题。
但是你发现没,上面这个简单的GNN网络并没有利用连接性信息,每个节点以及每条边和全局上下文都是独立处理的。只有在聚合信息进行预测时才使用连接性。
所以,我们可以更进一步的利用聚合信息操作,这样就能进行更复杂的预测。
那么该怎么做呢?
我们可以使用消息传递的方法来实现这一点,即相邻节点或边之间交换信息并影响彼此更新的嵌入。

如上图,也就是在处理当前节点时,把相邻节点的信息聚合过来。
这跟卷积操作有点像,一个特征图的像素对应上一层的一个相邻区域。

有了信息传播操作后,我们的GNN网络更新如下:
节点层面任务:

边层面任务:

图层面任务:

最后,展示了一个Playground,可以改变网络的层数,聚合操作类型,以及各个属性向量的长度,可以通过最终的模型性能来展示各个参数的影响。

参考资料:
[1]https://distill.pub/2021/gnn-intro/
[2]https://www.bilibili.com/video/BV1iT4y1d7zP/?spm_id_from=333.999.0.0
相关文章:
【深度学习】可交互讲解图神经网络GNN
在正式开始前,先找准图神经网络GNN(Graph Neural Network)的位置。 图神经网络GNN是深度学习的一个分支。 深度学习的四个分支对应了四种常见的数据格式,前馈神经网络FNN处理表格数据,表格数据可以是特征向量,卷积神经网络CNN处理…...
网工内推 | 运维工程师,软考认证优先,全额社保
01 北京中科网威信息技术有限公司 招聘岗位:运维工程师 职责描述: 1 熟悉网络安全标准,等级保护管理制度 2 负责等级保护管理制度的的企业管理要求编写; 3 熟系网络组网和相关安全产品; 4 负责用户需求挖掘、分析和…...
查找或替换excel换行符ctrl+j和word中的换行符^p,^l
一、excel中 直接上图。使用ctrlh调出替换,查找内容里按ctrlj(会出现一个闪的小点),即为换行符。 二、word中 在word中,^p和^l分别代表换行符(enter)和手动换行符(使用shiftenter&…...
pytorch_神经网络构建5
文章目录 生成对抗网络自动编码器变分自动编码器重参数GANS自动编码器变分自动编码器gans网络Least Squares GANDeep Convolutional GANs 生成对抗网络 这起源于一种思想,假如有一个生成器,从原始图片那里学习东西,一个判别器来判别图片是真实的还是生成的, 假如生成的东西能以…...
安卓常见设计模式5------桥接模式(Kotlin版)
1. W1 是什么,什么是桥接模式? 桥接模式是一种结构性模式。 桥接模式旨在将抽象与实现解耦,使它们可以独立地变化。可以这么理解,面向对象编程是单继承多实现的,如果我们有一个可扩展类,和多个相关的可扩展…...
tomcat web.xml文件中的session-config
<session-config>这个元素为该应用中创建的所有session定义默认超时时间,单位是分钟。这个值必须是整数。如果是0或者负数,表示不超时。如果该元素没有设置,容器设置一个默认值。 例如: <session-config><session…...
Hadoop知识点全面总结
文章目录 什么是HadoopHadoop发行版介绍Hadoop版本演变历史Hadoop3.x的细节优化Hadoop三大核心组件介绍HDFS体系结构NameNode介绍总结 SecondaryNameNode介绍DataNode介绍DataNode总结 MapReduce介绍分布式计算介绍MapReduce原理剖析MapReduce之Map阶段MapReduce之Reduce阶段 实…...
MSVCP140_CODECVT_IDS.dll丢失怎么办?推荐三个解决方法帮你解决
MSVCP140_CODECVT_IDS.dll是Microsoft Visual C 2015 Redistributable的一个组件,它包含了一些运行时库文件。当您在运行某些程序时,可能会遇到“msvcp140_codecvt_ids.dll丢失”的错误提示。为了解决这个问题,您可以尝试以下三种方法&#x…...
问题描述:64位计算机的寻址能力是多少TB
问题描述:64位计算机的寻址能力是多少TB 我在看到一个32位电脑的寻址能力计算时,看到是这么计算的。 虚拟内存的大小受到计算机地址位数的限制, 那么32位电脑的寻址能力计算应该是这样 为什么网上百度到的是16TB呢,如下图所示 中…...
【算法 | 数论 No.1】AcWing1246. 等差数列
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…...
竞赛 目标检测-行人车辆检测流量计数
文章目录 前言1\. 目标检测概况1.1 什么是目标检测?1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 🔥 优质竞赛项目系列,今天要分享的是 行人车辆目标检测计数系统 …...
秋招进入尾声了,还有哪些公司和岗位可以投递?
24届秋招基本已经进入尾声了,接下来就是秋招补录了,最近在微信群看到一些同学再问哪些公司还在招人的。 在这里跟大家分享一份2024届秋招信息汇总表,目前已更新2000家,不仅有互联网公司,还有外企、国企、各类研究所&am…...
CSS 文字溢出省略号显示
1. 单行文本溢出显示省略号 需要满足三个条件,添加对应的代码: (1)先强制一行内显示文本; (2)超出的部分隐藏; (3)文字用省略号来替代省略的部分…...
POD创建与删除简单描述
创建一个 Pod 的过程可以分为以下几个步骤: 用户使用 kubectl create 命令或 YAML 文件向 API 服务器发送创建 Pod 的请求。API 服务器将请求转换为 Kubernetes 的内部对象,并将 Pod 的状态设置为 Pending。调度器根据 Pod 的资源需求和节点的资源情况&…...
AndroidStudio打包报错记录(commons-logging,keystore password was incorrect)
场景: AndroidStudio2022打包APK的时报错 1.commons-logging依赖冲突 报错主要信息如下 Error: commons-logging defines classes that conflict with classes now provided by Android. 通过报错信息可以看出,项目中的commons-logging与Android系统自带…...
如何构建企业数据资产?数据资产如何入资产负债表 ?
一、构建企业数据资产 1. 数据收集 需要从多渠道收集数据,包括企业内部系统、市场调研、社交媒体、客户反馈等。在收集数据时,需要注意数据的真实性、完整性和可靠性。同时,需要考虑如何将不同渠道的数据进行整合和标准化,以便后…...
代码随想录算法训练营Day 47 || 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III
198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系…...
(论文阅读24/100)Visual Tracking with Fully Convolutional Networks
文献阅读笔记(sel - CNN) 简介 题目 Visual Tracking with Fully Convolutional Networks 作者 Lijun Wang, Wanli Ouyang, Xiaogang Wang, and Huchuan Lu 原文链接 http://202.118.75.4/lu/Paper/ICCV2015/iccv15_lijun.pdf 【DeepLearning】…...
第10章 文件和异常
目录 1. 从文件中读取数据1.1 读取整个文件1.2 逐行读取1.3 创建一个包含文件各行内容的列表 2. 写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 3. 异常使用try-except-else代码块 4. 存储数据使用json.dump()和json.load() 1. 从文件中读取数据 1.1 读取整个文件 with …...
【云栖2023】张治国:MaxCompute架构升级及开放性解读
简介: 本文根据2023云栖大会演讲实录整理而成,演讲信息如下 演讲人:张治国|阿里云智能计算平台研究员、阿里云MaxCompute负责人 演讲主题:MaxCompute架构升级及开放性解读 活动:2023云栖大会 MaxCompute发展经历了…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...
