图神经网络

定义:

对图上所有的属性,包括顶点、边、全局、上下文进行的一个可以优化的变换,该变换可以保存住图的对称信息(将顶点进行另外一个顺序的排序后,结果不变)

Message passing neural network:使用一个信息传递的神经网络,会对顶点、边、全局等属性进行变换,但不会改变图的连接性

输入:图

输出:图

构造最简单的GNN:

对于顶点向量、边向量、全局向量分别构造MLP,MLP的输入输出大小一致,三个MLP就组成了一个GNN的层,输入和输出都为一个图;对于顶点向量、边向量、全局向量找到对应的MLP并分别放进去,把输出作为更新

结果:

  • 进去出来的过程属性得到了更新,但图的结构未发生变换
  • 每个MLP对属性独自作用,它不会考虑到所有的连接信息,不管对整个顶点做任何排序也不会改变结果

最后一层输出如何得到预测值:

分类问题:

若为n类,做一个输出大小为n的全连接层,再加一个softmax得到多类输出

回归问题:

得到一个值

结果:

最后一个输出为一张图,对于每个顶点进入全连接层,然后得到输出,最后将各个顶点做分类;不管有多少个顶点,都只有一个全连接层,所有的顶点共享一个全连接层里的参数;在一个GNN中,不管图的尺寸有多大,所有的顶点共享一个MLP,边共享一个MLP,全局信息共享一个MLP

若顶点没有向量:

情况:

  • 经典图理论中,节点不带属性
  • 数据不足或不需要特征表示
  • 特定任务中不需要节点特征

引入Pooling(汇聚):

将与这个点相邻的边全部取出来,同样把全局向量拿出来,得到五个向量;将五个向量全部相加,得到代表这一个点的向量(假设维度相同,若维度不同需要投影),得到这个向量后,可以做最后全连接层的输出

有边向量,无顶点向量:

通过汇聚层,从边到顶点,每个顶点得到自己的向量,送入顶点共享的MLP,全连接层得到顶点输出

有顶点向量,无边向量:

把顶点向量汇聚到边上,假设一条边连接两个顶点,把两个顶点相加得到边向量,送入边向量的输出层,边共享的MLP,最后得到边输出

有顶点向量,无全局向量:

把所有顶点向量相加,得到全局向量,进入MLP得到输出

常见的聚合方法:

求和、平均、最大值

GNN:

  • 进入一系列GNN层,每个层里有三个MLP,表示对应的顶点、边、全局三种属性
  • 输出得到保持整个结构的图,但属性发生了变换
  • 根据对希望做预测的属性,添加合适的输出层;若缺失信息,添加合适的汇聚层
  • 完成预测

局限性:

对GNN block并没有使用图信息,对每个属性做变换时,是单独的属性进入MLP,并没有看出该点是与哪些边相连的或该边与哪个顶点相连,因此GNN blocks并没有将整个图的信息更新到属性中,导致最后的结果与整个图的信息有差异

提升技术:

信息传递:

类似于标准意义的卷积;把该点的向量与该点邻居的向量提取,相加后得到一个汇聚的向量;将汇聚向量送入MLP得到该点向量的更新;最后将邻居的邻居等信息传递过来,完成了整个图的比较长距离的一个信息传递过程

过程:

聚合步 -> 更新步

用“黑色圆圈”记号表示有一个顶点,顶点之间会通过距离为“1”的邻居,也就是为一近邻把信息进行传递

如何将顶点信息传递给边,再把边的信息传递给顶点:

  • 把每个边连接的两个顶点的信息把它加到边自己的向量里,假设维度不一样做投影变换,做更新

  • 把更新过后的每个顶点连接的边的信息也加到点自己的向量里,维度不一样需投影,再做更新

  • 再各自进入各自的MLP做更新

并没有发现汇聚的次序谁比谁更好,提出了交替法

Master node/context vector:

背景:

每次汇聚都要观察自己的邻居,但当图特别大而且连接没那么紧密时,导致一个消息传递到一个很远的点需要走很长步

定义:

该点是一个虚拟点,该点可以与所有顶点相连,所有的边相连,为U;U与所有V,所有E相连;若想要将顶点信息汇聚给边或将边信息汇聚给点时,也同时会将U汇聚;更新U时,会将所有的顶点信息和边信息取出

模型对超参数的影响:

每一个属性的向量长度:

顶点、边、全局的影响不大

不同层数对精度影响:

层数越低可学习参数越小;可以将层数调高,但耦合度较紧密,要把剩下参数调好

信息传递:

在顶点、边、全局都传递信息的效果最好;传递边的帮助最小

相关技术:

Multigraph:

顶点之间有多条边

分层图:

有一些顶点里含有子图

如何对图采样和做batch:

假设图的连通性足够,那么最后一个顶点可以看到整张图的全部信息;在对最后一个顶点算梯度时,将整张图之间的计算过程结果全部存起来,因此计算量较大无法承受,采取了采样的措施。

将图一次采用一个小图,在小图上做信息的汇聚,算梯度时只需要保存小图的过程

方法:

  • Random node sampling:
  • 随机采样一些点,将点的最近邻居筛选,在做计算时旨在子图上做计算,控制每次采样的点个数来避免图不要过大

  • Random walk sampling:
  • 随机游走,从某一个顶点开始,在里面随机找一条边,沿着这条边走到下一个节点,沿着该图随机走,规定最多随机走多少步,就会得到一个子图

  • Random walk with neighborhood:
  • 结合上述两种,先随机走三步,把这三步的每个点的邻居寻找出来

  • Diffusion sampling:
  • 取一个点,将其一近邻、二近邻、三近邻往前走k步把他做一个宽度遍历,得到一个字图

Inductive biases:

GNN假设:保持图的不变性和对称性;不管怎么交换图的顶点顺序,GNN对它的作用都是保持不变的

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

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

相关文章

Java爬虫API:获取商品详情数据的利器

为什么选择Java爬虫API 强大的库支持:Java拥有丰富的网络编程库,如Apache HttpClient、OkHttp等,这些库提供了强大的HTTP请求功能,使得发送请求和处理响应变得简单。高效的数据处理:Java的数据处理能力,结…

使用Yolov10和Ollama增强OCR

1. 训练自定义 Yolov10 数据集 利用物体检测增强 OCR 的第一步是在数据集上训练自定义 YOLO 模型。YOLO(只看一遍)是一种功能强大的实时对象检测模型,它将图像划分为网格,使其能够在一次前向传递中识别多个对象。这种方法非常适合…

【某农业大学计算机网络实验报告】实验二 交换机的自学习算法

实验目的: (1)理解交换机通过逆向自学习算法建立地址转发表的过程。 (2)理解交换机转发数据帧的规则。 (3)理解交换机的工作原理。 实验器材: 一台Windows操作系统的PC机。 实…

Python|基于Kimi大模型,实现上传文档并进行“多轮”对话(7)

前言 本文是该专栏的第7篇,后面会持续分享AI大模型干货知识,记得关注。 假设有这样的需求,需要你通过python基于kimi大模型,上传对应的文档并根据对应的prompt提示词,进行多轮对话。此外,还需要将kimi大模型生成的内容进行存储。具体场景,如下图所示: 也就是说,当我们…

Kamailio-Sngrep 短小精悍的利器

一个sip的抓包小工具,在GitHub上竟然能够积累1K的star,看来还是有点东西,当然官方的友链也是发挥了重要作用 首先送上项目地址,有能力的宝子可以自行查看 经典的网络抓包工具有很多,比如: Wireshark&…

KASan部署、使用与原理分析

文章目录 前言1、概述2、使用方法3、测试用例3.1、检测加载的内核模块3.2、检测调用的内核模块3.3、通过系统调用检测3.4、检测编译到Linux内核中的内核模块 4、工作原理4.1、影子内存(Shadow Memory)4.2、内存状态(Memory States&#xff09…

Go小技巧易错点100例(十八)

正文: 使用下划线增加数字可读性 有时候我们代码里会定义很长的数字,虽然计算机程序能支持很大的数据的计算,但是对我们来说,可读性是一个需要考虑的点,特别是1后面全是0的时候。 但是这个问题在Go语言中是可以通过…

使用js和canvas实现简单的网页打砖块小游戏

玩法介绍 点击开始游戏后,使用键盘上的←→控制移动,小球会不停移动,板子触碰小球时会反弹,碰撞到砖块时会摧毁砖块,如果没有用板子接住小球就游戏失败 代码实现 代码比较简单,直接阅读注释即可&#x…

Leetcode—1226. 哲学家进餐【中等】(多线程)

2024每日刷题&#xff08;185&#xff09; Leetcode—1226. 哲学家进餐 C实现代码 class DiningPhilosophers { public:mutex mx;DiningPhilosophers() {}void wantsToEat(int philosopher,function<void()> pickLeftFork,function<void()> pickRightFork,functi…

云快充1.5协议+云快充1.6协议通讯框架

云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 介绍 云快充协议云快充1.5协议云快充1.6云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充电桩协议云快充源码 软件架构 1、提供云快充底层桩直连协…

Java【多线程】阻塞队列

目录 阻塞队列 阻塞队列是什么&#xff1f; 生产者消费者模型 生产者消费者模型的两个重要优势 1.解耦合&#xff08;不一定是两个线程之间&#xff0c;也可以是两个服务器之间&#xff09; 2.阻塞队列就相当于一个缓冲区&#xff0c;平衡了生产者和消费者的处理能力&…

【Web前端概述】

HTML 是用来描述网页的一种语言&#xff0c;全称是 Hyper-Text Markup Language&#xff0c;即超文本标记语言。我们浏览网页时看到的文字、按钮、图片、视频等元素&#xff0c;它们都是通过 HTML 书写并通过浏览器来呈现的。 一、HTML简史 1991年10月&#xff1a;一个非正式…

深度学习(一)基础:神经网络、训练过程与激活函数(1/10)

深度学习基础&#xff1a;神经网络、训练过程与激活函数 引言&#xff1a; 深度学习作为机器学习的一个子领域&#xff0c;近年来在人工智能的发展中扮演了举足轻重的角色。它通过模仿人脑的神经网络结构&#xff0c;使得计算机能够从数据中学习复杂的模式和特征&#xff0c;…

当小程序学会‘读心术’:表单处理的神秘法则

哈喽&#xff0c;我是阿佑&#xff0c;今天将给大家给咱们的小程序赋能——“读心术”&#xff01; 文章目录 微信小程序的表单处理表单元素&#xff1a;小程序的“语言”表单事件&#xff1a;小程序的“听觉”表单提交&#xff1a;小程序的“表达”总结 微信小程序的表单处理 …

1 -《本地部署开源大模型》如何选择合适的硬件配置

如何选择合适的硬件配置 为了在本地有效部署和使用开源大模型&#xff0c;深入理解硬件与软件的需求至关重要。在硬件需求方面&#xff0c;关键是配置一台或多台高性能的个人计算机系统或租用配备了先进GPU的在线服务器&#xff0c;确保有足够的内存和存储空间来处理大数据和复…

设置了超时时间但是不起作用,浏览器里的setTimeout有 bug?

你可能也遇到过这样的问题:写个setTimeout定时器,结果时间一长,浏览器就开始捣乱。比如你想要设置一个几小时甚至几天的延时,突然发现浏览器不听话了!这时候你就会想,难道浏览器的定时器是有上限的?没错,你没看错,setTimeout其实有个最大值限制,时间一超过这个值,就…

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解

Python Numpy 实现神经网络自动训练&#xff1a;反向传播与激活函数的应用详解 这篇文章介绍了如何使用 Python 的 Numpy 库来实现神经网络的自动训练&#xff0c;重点展示了反向传播算法和激活函数的应用。反向传播是神经网络训练的核心&#xff0c;能够通过计算梯度来优化模…

嵌入式入门学习——7Protues导入Arduino IDE生成的固件和Arduino使用库文件开发

0 系列文章入口 嵌入式入门学习——0快速入门&#xff0c;Let‘s Do It&#xff01; 1 Arduino IDE 请自行下载安装&#xff0c;点击标题链接即可&#xff0c;下载完成后 1新建工程并保存&#xff0c;注意工程名和工程所在的文件夹必须同名。 2新建工程的时候注意选择板子型…

循环移位的学习

循环移位&#xff08;Rotational Shift&#xff09;&#xff0c;也称为循环位移&#xff0c;是一种特殊的位移操作。在循环移位中&#xff0c;移出的位会被重新放入到另一端&#xff0c;从而实现循环效果。与逻辑移位和算术移位不同&#xff0c;循环移位不丢失任何位&#xff0…

php中的错误和异常捕获

目录 一&#xff1a; 异常&#xff08;Exceptions&#xff09; 二&#xff1a; 错误&#xff08;Errors&#xff09; 三&#xff1a;实际项目的异常和错误处理 在PHP中&#xff0c;异常&#xff08;Exceptions&#xff09;和错误&#xff08;Errors&#xff09;是两个不同的…