循环图神经网络教程2——循环图神经网络

news2024/11/15 17:41:17

介绍

循环图神经网络(Recurrent Graph Neural Network,RGNN)。在标准神经网络中,连续的学习权重层用于从输入张量中逐步提取更高级别的特征。在用于计算机视觉的神经网络中,低级特征(如短直线和曲线)的存在是由较早的层识别的,而高级特征(如复合形状)的存在是由较晚的层识别的。在被这些顺序层处理之后,所产生的高级特征可以提供给softmax层或单个神经元,以进行分类、回归或一些其他的下游任务(downstream task)。

注:短直线等举例仅仅是为便于读者理解,在计算机的实际操作过程中,其识别的“特征”在人看来是完全无序且杂乱的。

同样地,最早的GNN通过使用一系列的特征提取操作来从图中提取高层次的特征表示,然后将这些高层次的特征路由到输出函数。换句话说:它们将输入处理为有用的嵌入,然后将嵌入处理为有用的输出,使用两个不同的处理阶段。这些早期技术存在局限性:一些算法只能处理有向无环图(DAGs),其他算法要求输入图具有“超源”(即有指向其他图中所有顶点的有向路径)的顶点,还有一些技术需要采用启发式方法来处理某些图的循环性。

通常,这些早期的递归方法依赖于将图的特殊情况“展开”为有限树(递归等价),然后可以通过递归神经网络将其处理为有用的嵌入。递归GNN对此进行了扩展,从而提供了一种可应用于泛型图的解决方案。RGNN不是通过递归的编码网络为整个输入图创建嵌入,而是通过消息传递这一信息传播框架在顶点级别创建嵌入,这将在本节定义。

循环计算嵌入

注:此处所说嵌入,一般指的是对于(节点、边、状态的)信息进行向量化表示,嵌入为取embedding的直译意。

RGNN使用称为转移函数的确定性共享函数计算输入图中每个顶点的嵌入。它被称为过渡函数,因为它可以解释为从邻域的当前表示计算邻域的下一个表示。该转换函数可以对称地应用于任何顶点,即使顶点的邻域大小可能是可变的。这个过程如图2所示,其中过渡函数𝑓为周围的邻域计算每个顶点的嵌入。

这样,对于任意一个所给节点v_i,其第k个嵌入h_i^{k}的值依赖于以下几个量:

  • 中心节点v_i^F的特征
  • 所有存在的邻接边e_{ij}^F的特征
  • 所有相邻顶点v_j^F的特征
  • 所有相邻节点上一次迭代的嵌入h_j^{k-1}

对于一个简单输入图G(V, E),具有|V| = 4, |E| = 4的RGNN正向传递。G经过𝑘层的处理。在每一层中,每个顶点的特征v_i^{F}(绿色),邻域特征N_{v_i}^F(黄色),以及前一个隐藏层(紫色)由状态转移函数𝑓处理并聚合,从而产生g的连续嵌入。注意,邻域特征必须聚合为固定的嵌入大小,否则𝑓将需要处理可变的输入大小。这将重复,直到嵌入收敛(即,连续嵌入之间的变化没有超过某个停止阈值)。在此阶段,嵌入被提供给执行某些下游任务的输出函数𝑔——在这种情况下,任务是顶点分类问题。请注意,𝑓和𝑔可以实现为神经网络,并通过展开的计算图通过监督误差信号的反向传播进行训练。请注意,在第𝑘层处理之后,每个顶点的嵌入包含了来自最大𝑘' hops '的信息。

 为了反复应用这个学习到的转换函数来计算连续的嵌入,𝑓必须具有固定数量的输入和输出变量。那么它怎么依赖于邻近邻域呢?邻近邻域的大小可能会根据我们在图中的位置而变化。有两个简单的解决方案,第一个是设置“最大邻域大小”,并在处理具有不存在邻域的顶点时使用null向量。第二种方法是以某种排列不变的方式聚合所有邻域特征,从而确保图中的任何邻域都由一个固定大小的特征向量表示。虽然这两种方法都是可行的,但第一种方法不能很好地扩展到“无标度图”,这种图的度分布遵循幂律。由于许多现实世界的图(例如社交网络)是无标度的,我们在这里将使用第二种解决方案。在数学上,这可以表述为方程(1)

我们可以看到,在这个公式方程1下,𝑓是很好的定义。它接受四个特征向量,它们都有定义的长度,无论考虑的是图中的哪个顶点或者是迭代重复计算的问题。这意味着过渡函数可以循环地应用,直到输入图中的所有顶点都达到稳定的嵌入。这个表达式可以被解释为在整个图中传递“消息”或特征;在每次迭代中,嵌入h_i^{k}依赖于其邻居的特征和嵌入。这意味着,通过足够多的循环迭代,信息将在整个图中传播:在第一次迭代之后,任何顶点的嵌入编码了单条边范围内的邻域特征。在折中中,任何顶点的嵌入都是对邻域内两条边的特征进行编码,以此类推。迭代传递“信息”来生成图的编码是这个消息传递框架名字的来源。

注意,显式地将单位矩阵I𝑛添加到邻接矩阵A中是一种典型的行为,从而确保所有顶点都与自己相连(自环),这意味着一个顶点v_i \in N_{v_i}, \forall i \in v。此外,这允许我们通过迭代邻接矩阵的单行直接访问邻域。通常对修改后的邻接矩阵进行归一化,以防止不必要的嵌入缩放。 

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

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

相关文章

Java类的卸载

类、类的加载器、类的实例之间的引用关系 类的生命周期 类的加载器如下:

进程部分相关概念

进程 进程是一个程序执行的过程,会去分配内存资源,cpu的调度 进程不仅仅是一个正在运行的程序,它包含了程序执行所需的所有资源和状态信息 资源分配:操作系统会为每个进程分配必要的资源,如内存空间、文件句柄等。这些…

nginx重定向与防盗链

重定向 由于网站的扩容,负荷较大,需要将一部分内容迁移到其他服务器上。但是这个时候又不能更改用户常访问的域名,因此对其进行重定向。 1. 域名重定向 www.sxl1.com/aaa的站点需要重定向到aaa.sxl1.com rewrite ^/aaa$ aaa.sxl1.com/…

letcode 分类练习 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树

letcode 分类练习 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树 513.找树左下角的值112. 路径总和106.从中序与后序遍历序列构造二叉树 513.找树左下角的值 遍历二叉树,并记录当前的深度,如果深度大于最大深度,那么…

关于 Vivado HLS 的三大误读

【转载】关于 Vivado HLS 的三大误读 目前,在高层次综合(HLS, High Level Synthesis)领域,Vivado HLS可谓独树一帜。它有效地拉近了软件工程师与FPGA之间的距离,加速了算法开发的进程,缩短了产品上市时间。…

leetcode_52. N 皇后 II

52. N 皇后 II 题目描述:n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 示例 1: 输入:n 4 输出:2…

C++:病毒系列回归记2/3 (Doge智能系统已上线)

上一期:C:病毒系列回归记1/3 (Doge智能系统已上线) 这一步真的非常爽哦 void Crazy(int n) {if(n 0)system("start ラム.vbs");if(n 1)system("start 今年のトラック.vbs");if(n 2)system("start ロシアのスートン焼却発電.vbs")…

安装并配置开发环境

安装并配置开发环境 获取虚拟机系统 下载vmware虚拟机工具 使用浏览器打开网址 https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 参考下图箭头所示,点击下载安装 Windows版本的VMware Workstation ,点击 DOWNLOAD …

java基础--day10字符串

视频网址:字符串-01-API和API帮助文档_哔哩哔哩_bilibili 1.API 1.1API概述 什么是PAI API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来&am…

MySQL笔记01: MySQL入门_1.3 MySQL启动停止与登录

1.3 MySQL启动停止与登录 1.3.1 MySQL启动与停止 MySQL数据库分为客户端和服务器端,只有服务器端服务开启以后,才可以通过客户端登录MySQL服务端。 首先,以管理员身份运行“命令提示符”: (1)启动MySQL服务…

AArch64中的寄存器

目录 通用寄存器 其他寄存器 系统寄存器 通用寄存器 大多数A64指令在寄存器上操作。该架构提供了31个通用寄存器。 每个寄存器可以作为64位的X寄存器(X0..X30)使用,或者作为32位的W寄存器(W0..W30)使用。这两种是查…

PyTorch——transforms

接着上一篇,我们这一篇讲transforms 1、什么是transform 首先transform是来自PyTorch的一个扩展库——【torchvision】,【torchvision】这个库提供了许多计算机视觉相关的工具和功能,能够在神经网络中,将图像、数据集、预处理模型…

[Winform] Chart获得当前点的X和Y值

在利用C#控件绘制曲线图后,有时我们需要通过鼠标查看数据点的值信息,常用的方法就是利用chart控件的chart1_GetToolTipText(object sender, ToolTipEventArgs e)事件来获取数据点的信息,如下我用两个label来显示获取的数据点的值 相关代码如下…

【手撕数据结构】链式二叉树

目录 链式二叉树的结构及其声明链式二叉树的四种遍历方式前序遍历中序遍历(中根遍历)后序遍历层序遍历概念思路分析详细代码 求树的节点个数变量累加法(错误)分治递归法 求树的叶子节点个数警惕空指针正确代码 求第k层节点个树思路分析及规则明细代码详细…

POK´ELLMON:在宝可梦战斗中实现人类水平的人工智能

人工智能咨询培训老师叶梓 转载标明出处 最近,由美国乔治亚理工学院的Sihao Hu、Tiansheng Huang和Ling Liu发表的论文介绍了POKELLMON,这是一个开创性的基于大模型(LLM)的具身智能体,它在战术战斗游戏中,特…

【Android 笔记】Android APK编译打包流程

前言 本文将介绍Android从一个项目打包成APK的过程,其中涉及Android Java和Kotlin文件、资源文件、清单文件、依赖jar包和so库等在打包过程中处理。 步骤 总体的打包流程如下图,下面就介绍下详细的打包步骤。 1、将aidl文件编译成java文件 在构建过程中…

2024音频剪辑指南:探索四大高效工具!

音频剪辑不仅仅是技术活,更是一种艺术创作,它能够让声音更加生动、更具感染力。今天,我们就来探索几款优秀的音频剪辑工具。 福昕音频剪辑 链接:www.pdf365.cn/foxit-clip/ 福昕音频剪辑是一款界面简洁、操作直观的音频编辑软件…

详解安卓辅助功能服务AccessibilityService(无障碍服务,微信抢红包助手原理)

前言 在手机的更多设置或者高级设置中,我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的,包括我们开发也很少接触这部分功能,以至于对这块不甚了解。前段时间在同事的安利下去了解了下这部分功能。在这里和大家浅谈下…

scikit-learn特征预处理

特征预处理 什么是特征预处理 通过一些转换函数,将特征数据转换成更适合算法模型的特征数据的过程 数值数据的无量纲化: 归一化标准化 特征预处理API sklearn.preprocessing为什么进行无量纲化 通过欧式距离公式计算两个约会对象是否属于同一类别 …

使用HTML和cgi实现网页登录功能

0.HTML文件结构 一.HTML文件 1.test.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>菜鸟教程(runoob.com)</title></head><body><!-- 将结果提交给/cgi-bin/test.cgi下 --><form actio…