《图机器学习》-Graph Neural Network

news/2024/5/3 19:52:44/文章来源:https://blog.csdn.net/GuoShao_/article/details/128685635

前言

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

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

在这里插入图片描述

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

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

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

该方法的缺点:

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

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

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

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

在这里插入图片描述


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

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

二、Deep Learning for Graphs

假设我们有一张图GGG

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

什么是顶点的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应该做些什么
在这里插入图片描述

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

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

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

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

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

矩阵化(向量化)

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

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

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

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

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

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

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

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



第二个问题:Training the Model

如何训练GCN去生成embeddings?

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

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

这里需要训练的权重参数是:WkW_kWkBkB_kBk

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

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

无监督学习:

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

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

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

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

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

相关文章

CSCode 配置一条龙 CPP/CC

下载 官⽹下载地址:Download Visual Studio Code - Mac, Linux, Windows 下载太慢,推荐⽂章:解决VsCode下载慢问题_wang13679201813的博客-CSDN博客_vscode下载慢 安装 无脑下一步 推荐插件 免配置: 1. Remote - SSH - 远程…

骨传导耳机是怎么传声的,选择骨传导耳机的时候需要注意什么?

​骨传导耳机之所以能够成为当下最火的耳机,骨传导技术将声音转化为震动感,通过骨头进行传播,不会堵塞耳朵,就不会影响到周围环境音。这种技术也让骨传导耳机比传统入耳式耳机更安全,无需入耳式设计,避免了…

Interview系列 - 07 Java | 集合的快速失败和安全失败机制 | 迭代器类源码 | CopyOnWriteArrayList

文章目录1. 集合的快速失败 (fail-fast)1. 使用增强for遍历集合并使用ArrayList的 remove() 方法删除集合元素2. 使用 forEach 遍历集合并使用ArrayList的 remove() 方法删除集合元素3. 使用迭代器遍历集合并使用ArrayList的 remove() 方法删除集合元素4. 使用迭代器遍历集合并…

【离线数仓-6-数据仓库开发ODS层设计要点】

离线数仓-6-数据仓库开发ODS层设计要点离线数仓-6-数据仓库开发ODS层1.数据仓库开发ODS层设计要点2.ODS层用户行为日志表1.hive中复杂结构体复习1.array2.map3.struct 复杂结构4.嵌套格式2.hive中针对复杂结构字符串的练习1.针对ods层为json格式数据的练习2.用户行为日志表的设…

详解数据库基本概念

数据库(DataBase 简称 DB):是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合数据库管理系统(DataBase Management System 简称 DBMS):是一种操纵和管理数据库的大型软件&#xf…

获取Windows11开发环境及VirtualBox配置指南

今天我们来讲一讲Windows11开发环境的快速搭建,主要是通过Virtualbox虚拟机安装微软官方预先配置好的Windows11环境包,配置简单,开箱即用。 获取虚拟机打包镜像 微软官方提供了多个系统平台的Windows11虚拟机镜打包镜像,只需要导…

python--排序总结

1.快速排序 a.原理 快速排序的基本思想是在待排序的 n 个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放人最终位置后,整个数据序列被基准分割成两个子序列,所有小于基准的元素放置在前子序列中&#xff0…

代码随想录算法训练营day40 | 动态规划 343. 整数拆分 96.不同的二叉搜索树

day40343. 整数拆分1、确定dp数组以及下标的含义2、确定递推公式3、dp数组如何初始化4、确定遍历顺序5、举例推导dp数组96.不同的二叉搜索树1、确定dp数组(dp table)以及下标的含义2、确定递推公式3、dp数组如何初始化4、确定遍历顺序5、举例推导dp数组3…

[译文] 基于PostGIS3.1 生成格网数据

根据格网进行数据统计与分析是一种常用的方法,相比自然地理边界与行政管理边界而言,使用格网有如下特点:每个格网之间地位相等,没有上下级之分。每个格网的面积都相等。相邻两个格网单元中心点之间距离相等。适用于将数据从“空间…

【Kubernetes 企业项目实战】09、Rancher 2.6 管理 k8s-v1.23 及以上版本高可用集群

目录 一、Rancher 介绍 1.1Rancher简介 1.2 Rancher 和 k8s 的区别 1.3 Rancher 企业使用案例 二、安装 Rancher 2.1 初始化环境 2.2 安装 Rancher 2.3 登录 Rancher 平台 三、通过 Rancher 管理已存在的 k8s 集群 3.1 配置 rancher 3.2 导入 k8s ​四、通过 Ranc…

【MySQL】5.7版本解压安装配置

前言 之所以使用解压版本,而不使用exe安装,因为exe的安装方式删除过于麻烦!!! 如果安装MySQL过程中,出错了或者想重新在来一把,删除mysql服务即可 sc delete mysql # 删除已经安装好的Mysql&a…

ICASSP2023录用率有可靠度还不错的消息了

点击文末公众号卡片,找对地方,轻松参会 由于录用邮件没说录用率,导致大家都不知道录用率是多少。 据一位群友的反馈,其小老板是meta review。该群友原话“接受率应该是42%”。 ICASSP2023投稿量6000,在投稿量大涨的…

可怕,chatGPT用3小时教会我数据

chatGPT这玩意真的是我的救星,用它作为我的Python教练,我用三个小时学会了数据处理(Pandas)和绘图(matplotlib)。 这两个库的学习,在之前已经困扰了我7个月。之前卡壳的原因,是我一直没有耐心从零开始,按照教材设置的教程去学习Python——我擅长在项目中学习,一点一点…

数字人文中的可视化

数字人文中的可视化罗煜楚1,吴昊1,郭宇涵1,谭绍聪1,刘灿1,蒋瑞珂1,袁晓如1,21北京大学智能学院机器感知与智能教育部重点实验室,北京 1008712北京大学大数据分析与应用技术国家工程实验室&#…

白帽黑客入行应该怎么学?零基础小白也能轻松上手!

这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地,网络安全行业地位、薪资随之水涨船高。 1为什么网络安全行业是IT行业最后的红利? 根据腾讯安全发布的《互联网安全报告》,…

【架构师】零基础到精通——网关策略

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名退役Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小…

月薪没到30K的测试员必须要会的技能,我先啃为敬

最近感慨面试难的人越来越多了,一方面是市场环境,更重要的一方面是企业对软件测试的人才要求越来越高了。 基本上这样感慨的分为两类人 第一,虽然挂着3、5年经验,但肚子里货少,也没啥拿得出手的项目,自己还…

整数保序的离散化(C/C++)

目录 1. 离散化的概念 1.1 离散化的运用思路 1.2 离散化的方法 1.2.1 排序 1.2.2 确定一个元素离散化后的结果 1.3 案例分析 1.3.1 1.3.2 区间和 (来源:Acwing) 1. 离散化的概念 离散化,把无限空间中有限的个体映射到有限的…

用kinectv2运行orbslam2

前提 vim 、 cmake 、 git 、 gcc 、 g 这些一般都装了 主要是Pangolin 、 OpenCV 、 Eigen的安装 18.04建议Pangolin0.5 orbslam2安装、测试: git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 cd ORB_SLAM2 chmod x build.sh ./build.sh 编译…

归并排序及其应用

归并排序算法基于分而治之的概念,具体来说就是遍历一棵树,归并的过程是一个后序执行的动作。 由于我们知道每个子部分在合并后都是有序的,我们可以利用这个特性来解决一些问题。 上图可视化了merge sort algorithm的过程,我们很容…