《图机器学习》-Graph Neural Network

news2025/7/15 12:19:13

前言

回顾之前的Node Embedding:
将图中的节点嵌入到d维空间,并确保图中相似的节点能够嵌在一起。

在这里插入图片描述
即学习一个编码器 E N C ENC ENC确保图的节点嵌入到embedding space依然能够描述原空间节点之间的相似性。

在这里插入图片描述

在Node Embedding中,我们需要设计:

  • Encoder:将每个节点映射到一个低维向量
    在这里插入图片描述

  • Similarity function:指定向量空间中的关系如何映射到原始网络中的关系
    在这里插入图片描述

该方法的缺点:

  • O ( ∣ V ∣ ) O(|V|) O(V)的参数
    • 节点之间不共享参数
    • 每个节点都有自己独特的嵌入
  • 不能为训练期间未看到的节点生成嵌入
  • 不合并节点特性

本文将讨论基于图神经网络(GNNs)的深度学习方法,用于节点的嵌入。

通过 G N N s GNNs GNNs,可以基于图结构的多层非线性转换来学习到一个Deep Graph Encoders,完成节点到嵌入向量的映射。

如下图,我们的输入是一张复杂的图,通过多次图卷积层、激活函数后,有GNNs自动完成节点、或者子图的嵌入。

在这里插入图片描述


完成嵌入后,我们可以完成以下任务:

  • 节点分类:
    • 预测给定节点的类型
  • 链接预测:
    • 预测两个节点是否相连
  • 社区检测:
    • 识别紧密相连的节点集群
  • 网络相似度:
    • 两个(子)网络的相似度

二、Deep Learning for Graphs

假设我们有一张图 G G G

  • V V V是顶点集
  • A A A是邻接矩阵
  • 节点特征矩阵 X ∈ R m × ∣ V ∣ X∈R^{m\times |V|} XRm×V
  • v v v:顶点集 V V V中的一个顶点;
  • N ( v ) N(v) N(v) v v v的邻居节点集

什么是顶点的feature?
就是描述顶点的一组向量

  • 对于社交网络,node feature可以是用户配置文件,用户图像
  • 对于生物网络,node feature可以是基因表达谱,基因功能信息
  • 如果数据中没有feature,可以使用one-hot向量或者全为1的常数向量。

如何将feature输入到神经网络中?
一个简单的想法:连接邻接矩阵和特征,把它们一起输入深层神经网络:
在这里插入图片描述

该想法的缺点:

  • 参数个数过多, O ( ∣ V ∣ ) O(|V|) O(V)数量级;训练不稳定且容易过拟合
  • 不适用于不同大小的图,因为神经网络的输入节点是固定的
  • 对节点排序敏感,同一张图有多种表示方式,不同表示方式对应不同的输入,从而导致不同的输入,对结果有影响。

想法:
将网格上的卷积神经网络泛化到图上,并应用到节点特征数据。

在这里插入图片描述

但是在现实世界中,CNN中所谓的卷积窗口在图上难以定义:
在这里插入图片描述

  • 图上没有固定的局部或滑动窗口的概念
  • 节点的顺序不是固定的

在CNN的卷积中,可以看作中间的节点和上下左右八个方向的邻居作为一个集合进行卷积操作。

类似的,在图中可以将一个节点和它的邻居作为一个集合进行卷积操作。

在这里插入图片描述

因此,在图中,根据节点的邻域定义一个计算图;即一个节点的信息由其邻居的feature和自身的feature聚合而来:

图卷积神经网络如何工作?
想法是节点的领域定义了神经网络架构,即感兴趣节点的周围节点定义了神经网络的结构。

在这里插入图片描述

如想对上图的红色节点进行预测,想法是从它的邻居那里获取信息,邻居将从邻居那里获取信息。

接下来需要考虑如何沿着边传播这些信息,如何沿着网络边缘转换它,如何聚合信息。

可以认为图神经网络的方式是一个两步过程:
1、确定节点计算图
2、传播节点信息,在计算图上传播和转换它

这个计算图定义了底层神经网络的架构和结构


以下图六个节点的小图为例子:
在这里插入图片描述

目标节点是A,基于A节点的本地网络邻域生成一个计算图用于学习节点嵌入。计算图如上图右侧所示,计算图就是一个Neural networks。

在计算图中,需要去学习如何沿着边缘的消息转换符(如何将节点嵌入沿着边进行传播)和聚合运算符(如何将从不同边收到的信息进行聚合)。

网络邻域定义了各节点的计算图,所以每个节点都有不一样的计算图。如下所示;
在这里插入图片描述

还需要定义计算图的层数,而不是像之前的PageRank一样一直运行直到收敛。这里的层数可以理解为跳数(hop),以几跳的邻居构成各节点的计算图。下图是以2跳作为计算图的层数,生成节点的嵌入;
在这里插入图片描述

Layer-k embedding可以理解成从k跳之外的节点获取信息。观察上图还能发现,计算图中每个节点在每一层的嵌入向量都不一样。

Layer-0表示的是各节点的feature,Layer-1是各节点转化汇聚邻域节点所得到的信息,不同于Layer-0的feature。


第一个问题:Neighborhood aggregation

如何聚合来自不同边的节点的信息?即下图中的box应该做些什么
在这里插入图片描述

其实就是确定聚合函数,聚合函数需要满足排列不变性。即函数输出的结果不会因为输入节点的次序改变而改变。

基本方法:平均邻居信息并应用神经网络
在这里插入图片描述
计算公式如下:
在这里插入图片描述

  • W k : W_k: Wk对邻居节点的信息进行转化的矩阵
  • B k : B_k: Bk对本节点的信息进行转化的矩阵
  • W k 、 B k W_k、B_k WkBk是所有节点都共享的参数

上面的公式做了两件事情:

  1. 信息转换
    W k W_k Wk将上一层的邻居节点的信息进行线性转换, B k B_k Bk将上一层的本届点信息进行线性转换。
  2. 信息聚合
    ∑ \sum 表示将邻居节点以求平均的方式进行聚合

矩阵化(向量化)

对各节点单独使用上面的聚合函数,工作量很大。向量化使用矩阵乘法可以加快运算速度。

在GNN中,许多聚合函数可以通过(稀疏)矩阵运算有效地执行:

  • H ( K ) = [ h 1 ( k ) ⋯ h ∣ V ∣ ( k ) ] T H^{(K)}=[h_1^{(k)}\cdots h_{|V|}^{(k)}]^T H(K)=[h1(k)hV(k)]T
    在这里插入图片描述

  • A表示邻接矩阵, A v , : A_{v,:} Av,:表示第 v v v行的所有列

  • 然后: ∑ u ∈ N v h u ( k ) = A v , : H ( k ) \sum _{u∈N_v}h^{(k)}_u=A_{v,:}H^{(k)} uNvhu(k)=Av,:H(k)

  • 令D表示一个对角矩阵: D v , v = D e g ( v ) = ∣ N ( v ) ∣ D_{v,v}=Deg(v)=|N(v)| Dv,v=Deg(v)=N(v)

  • 因此,在这里插入图片描述

在这里插入图片描述
上图向量化表示为:
在这里插入图片描述



第二个问题:Training the Model

如何训练GCN去生成embeddings?

首先需要确定一个损失函数:

  1. 将最后一层的输出 z v = h v ( K ) z_v=h_v^{(K)} zv=hv(K)作为节点的最终的embedding
  2. 可以将这些嵌入到任何损失函数中,并运行SGD来训练权重参数

这里需要训练的权重参数是: W k W_k Wk B k B_k Bk

监督学习:
在监督学习中,我们想要最小化损失函数 L L L
在这里插入图片描述

  • y y y:节点的真实标签
  • f ( z v ) f(z_v) f(zv):根据节点embedding预测的标签
  • L L L:损失函数可以定义为L2范式,在分类任务中可以是交叉熵;
    交叉熵损失函数形式如下:
    在这里插入图片描述

无监督学习:

在无监督学习中没有节点标签可用,但使用图形结构作为监督

  • 如节点的相似性(“相似”节点具有相似的嵌入)
    在这里插入图片描述

    • 这里就是前面设定随机游走策略,然后处于同一游走路径上的节点内积要大一些

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

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

相关文章

DEXTUpload .NET增强的上传速度和可靠性

DEXTUpload .NET增强的上传速度和可靠性 DEXTUpload.NET Pro托管在Windows操作系统上的Internet Information Server(IIS)上,服务器端组件基于HTTP协议,支持从web浏览器到web服务器的文件上载。它也可以在ASP.NET服务器应用程序平台开发的任何网站上使用…

记一次攻防演练溯源实例

缘起 在今年的攻防期间,通过安全设备告警分析,需要对某个源攻击IP进行溯源反制,并且需要记录整个溯源过程和提交溯源报告。 开展溯源 研判 在溯源之前,首先应该判断是否真的存在攻击行为,攻击的特征,攻…

Linux学习(7.5)linux目录配置与重点回顾

鸟哥的 Linux 私房菜 -- Linux 的文件权限与目录配置 (vbird.org) 怎么记啊,直接点进去看吧 目录 Linux目录配置的依据--FHS 绝对路径与相对路径 重点回顾 以下内容转载自鸟哥的Linux私房菜 Linux目录配置的依据--FHS 是希望让使用者可以了解到已安装软件通常…

ARouter::Compiler The user has configuration the module name, it was

学习组件化使用的是阿里的ARouter,我是照着案例敲的,在编译的时候报了这么一个错。 我查了好多资料,大部分都是说build.gradle 配置出现了问题,比如没有配置 javaCompileOptions {annotationProcessorOptions {arguments [AROUTE…

shader(光栅化)

1.定义将模型经过mvp得到的标准立方体映射到屏幕。屏幕是像素数组组成,像素是一个颜色均匀的小方块。2.屏幕变换矩阵3.直接采样(锯齿严重)4.先模糊再采样(抗锯齿有好转)5.傅里叶变换6.高通滤波(图像边界&am…

robot remote server用这个server去远程获取ip

server端配置: 1、安装python环境 2、下载robot remote server 下载地址:https://pypi.python.org/pypi/robotremoteserver/(不要用pip下载,把robotremoteserver.py文件下载下来) 3、首先创建一个目录E:\rfremote\ &a…

canvas初学2

一、碰撞检测 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

Linux下java服务占用cpu过高如何处理

Linux下java服务占用cpu过高如何处理 top命令查看进程信息 top按下shiftp,按cpu使用率排行,可见进程1932占用最高,并且是一个java服务 使用jps命令确认java服务 [rootVM-16-16-centos ~]# jps 1011 Jps 9462 yuan_back-0.0.1-SNAPSHOT.jar 1932 spigot-1.18.jar查找异常进程中…

在windows11上安装openssh服务端并修改端口号

在windows11上安装openssh服务端并修改端口号 目录1.软件下载地址2.修改端口3.启动ssh原文链接&#xff1a;https://blog.csdn.net/qq_62129885/article/details/1268467751.软件下载地址 Release v9.2.0.0p1-Beta PowerShell/Win32-OpenSSH (github.com) https://github.co…

【BBuf的CUDA笔记】八,对比学习OneFlow 和 FasterTransformer 的 Softmax Cuda实现

0x1. OneFlow/FasterTransformer SoftMax CUDA Kernel 实现学习 这篇文章主要学习了oneflow的softmax kernel实现以及Faster Transformer softmax kernel的实现&#xff0c;并以个人的角度分别解析了原理和代码实现&#xff0c;最后对性能做一个对比方便大家直观的感受到onefl…

光伏行业规模“狂飙”至87.41GW,机器视觉检测成保量提质“王牌”?

在产业政策引导和市场需求驱动的双重作用下&#xff0c;我国光伏产业已成为具备国际竞争优势的产业&#xff0c;在制造规模、技术水平和市场份额等方面均位居全球前列。近日&#xff0c;国家能源局公布了2022年光伏新增装机规模&#xff1a;87.41GW&#xff0c;增长率59.27%。行…

一文带你了解MySQL的Server层和引擎层是如何交互的?

对于很多开发小伙伴来说&#xff0c;每天写SQL是必不可少的一项工作。 那不知道大家有没有深入了解过&#xff0c;当我们的一条SQL命令被执行时&#xff0c;MySQL是如何把数据从硬盘/内存中查出来并展示到用户面前的呢&#xff1f; 其实&#xff0c;MySQL也没有大家想象的那么…

DateTimeParseException

前端请求为字符串的时间格式2023-02-16 19:19:51&#xff0c;服务端用LocalDateTime类型接收时报解析异常java.time.format.DateTimeParseException: Text 2023-02-16 19:19:51 could not be parsed at index 10方法一&#xff1a;JsonFormat(shape Shape.STRING, pattern &q…

第四章.神经网络—BP神经网络

第四章.神经网络 4.3 BP神经网络 BP神经网络(误差反向传播算法)是整个人工神经网络体系中的精华&#xff0c;广泛应用于分类识别&#xff0c;逼近&#xff0c;回归&#xff0c;压缩等领域&#xff0c;在实际应用中&#xff0c;大约80%的神经网络模型都采用BP网络或BP网络的变化…

详解Ubuntu1804安装Anaconda(附网盘极速下载链接)

2022版的anaconda下载如下 百度网盘链接链接&#xff1a;https://pan.baidu.com/s/1RZICFpR_MYVxOxHzEbStRg 提取码&#xff1a;z864 下面是具体的安装过程 1、进入下载文件存放的位置打开终端运行.sh文件&#xff1a;&#xff08;我本人的下载位置就在“下载”里面&#x…

【ROS学习笔记3】ROS的架构

【ROS学习笔记3】ROS的架构 文章目录【ROS学习笔记3】ROS的架构零、前言一、ROS系统文件二、ROS文件系统相关命令三、ROS计算图四、Reference写在前面&#xff0c;本系列笔记参考的是AutoLabor的教程&#xff0c;具体项目地址在 这里 零、前言 从系统架构方面来看&#xff0c;…

jwt,accesstoken、refresh token详解

jwt&#xff0c;accesstoken、refresh token详解 JWT(json web token) 概念 JWT定义了一种紧凑的&#xff0c;自包含的形式&#xff0c;被用作在网络中安全的传输信息 格式 例如&#xff1a;xxxx.yyyyyyy.zzz 根据.分割&#xff0c;可以得到三部分&#xff0c;header&#x…

git创建自模块submodule

一、git仓库创建并拉取主项目 1、创建project项目和submodule项目 2、拉取主项目project1和project2 二、主模块增加子模块 1、进入主项目project1并初始化子模块 A、初始化 git submodule add http://ip:port/path/submodule.git aa B、 查看状态 git status C、添加到主项…

Leetcode.1801 积压订单中的订单总数

题目链接 Leetcode.1801 积压订单中的订单总数 Rating &#xff1a; 1711 题目描述 给你一个二维整数数组 orders&#xff0c;其中每个 orders[i] [pricei, amounti, orderTypei]表示有 amounti笔类型为 orderTypei、价格为 pricei的订单。 订单类型 orderTypei 可以分为两种…

c++类对象数据成员和虚函数的内存布局

一直想搞清楚类对象的数据成员和虚函数的内存布局&#xff0c;今天刚好有时间&#xff0c;所以就写了个demo查看了一下具体的内存布局情况&#xff08;使用的编译器为微软的&#xff09;。下面是自己demo的代码&#xff1a;#include <iostream> #include <windows.h&g…