【斯坦福大学公开课CS224W——图机器学习】七、图神经网络2:GNN设计空间

本文主要是介绍【斯坦福大学公开课CS224W——图机器学习】七、图神经网络2:GNN设计空间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【斯坦福大学公开课CS224W——图机器学习】七、图神经网络2:GNN设计空间

文章目录

  • 【斯坦福大学公开课CS224W——图机器学习】七、图神经网络2:GNN设计空间
    • 1. A General Perspective on Graph Neural Networks
      • 1.1 通用GNN框架
    • 2. A Single Layerof GNN
    • 3. 经典GNN层
      • 3.1 图卷积网络GCN
      • 3.2 GraphSAGE
      • 3.3 GAT
      • 3.4 实践应用中的GNN网络层
    • 4. Stacking Layers of a GNN

本章主要内容
本章主要介绍了GNN的设计空间design space,也就是设计一个GNN模型中的各种选择条件。(下一章继续讲这个)

本章首先讲了GNN单层的设计选择。
一层GNN包含信息转换和信息聚合两个部分。
讲了三种典型实例GCN、GraphSAGE、GAT。
GCN相当于用权重矩阵和节点度数归一化实现信息转换,用邻居节点求平均的方式实现聚合。
GraphSAGE可选用多种聚合方式来聚合邻居信息,然后聚合邻居信息和节点本身信息。在GraphSAGE中可以选用L2正则化。
GAT使用注意力机制为邻居对节点的信息影响程度加权,用线性转换后的邻居信息加权求和来实现节点嵌入的计算。注意力权重用一个可训练的模型attention mechanism计算出两节点间的attention coefficient,归一化得到权重值。此外可以应用多头机制增加鲁棒性。
在GNN层中还可以添加传统神经网络模块,如Batch Normalization、Dropout、非线性函数(激活函数)等。

然后讲了GNN多层堆叠方式。
叠太多层会导致过平滑问题。感受野可以用来解释这一问题。
对于浅GNN,可以通过增加单层GNN表现力、增加非GNN层来增加整体模型的表现力。
可以应用skip connections实现深GNN。skip connections可以让隐节点嵌入只跳一层,也可以全部跳到最后一层。

1. A General Perspective on Graph Neural Networks

我对design space的理解大概就是在设计模型的过程中,可以选择的各种实现方式所组成的空间。比如说可以选择怎么卷积,怎么聚合,怎么将每一层网络叠起来,用什么激活函数、用什么损失函数……用这些选项组合出模型实例,构成的空间就是design space。
在后期还有一个design space的课程。对于design space的进一步理解可以看Jure的论文 You, J., Ying, R., & Leskovec, J. (2020). Design Space for Graph Neural Networks. ArXiv, abs/2011.08843.

对deep graph encoders、GNN、聚合邻居信息等内容不再赘述。

1.1 通用GNN框架

(GNN的一层就是指计算图上的一层)

  1. 对GNN的一个网络层:要经历message(信息转换)和aggregation(信息聚合)两个环节,不同的实例应用不同的设计方式(如GCN,GraphSAGE,GAT……)

    在这里插入图片描述

  2. 连接GNN网络层:可以逐层有序堆叠,也可以添加skip connections

    在这里插入图片描述

  3. 图增强graph sugmentation:使原始输入图和应用在GNN中的计算图不完全相同(即对原始输入进行一定处理后,再得到GNN中应用的计算图)。
    图增强分为:图特征增强 / 图结构增强

    在这里插入图片描述

  4. 学习目标:有监督/无监督目标,节点/边/图级别目标

    在这里插入图片描述

2. A Single Layerof GNN

再回顾一遍在第一节中写过的GNN单层网络的设计空间:message transformation + message aggregation

GNN单层网络的目标是将一系列向量(上一层的自身和邻居的message)压缩到一个向量中(新的节点嵌入)
完成这个目标分成两步:信息处理,信息聚合(这里的聚合方法是需要ordering invariant的,也就是邻居节点信息聚合,聚合的顺序应当和结果无关)

在这里插入图片描述

message aggregation
直觉:对每个节点,聚合其邻居的节点信息:h v ( l ) = A G G ( l ) ( { m u ( l ) , u ∈ N ( v ) } )
举例:求和,求平均,求极大值

在这里插入图片描述

这种message aggregation会导致节点自身的信息丢失,因为对 h v ( l ) 的计算不直接依赖于 h v ( l − 1 )。
对此问题的解决方式:在计算 h v ( l )时包含 h v ( l − 1 ) :

  1. message computation:对节点本身及其邻居应用不同的权重矩阵
  2. message aggregation:聚合邻居信息,再将邻居信息与节点自身信息进行聚合(用concatenation或加总)

在这里插入图片描述

GNN单层网络就是合并上述两步:对每个节点,先计算出其自身与邻居的节点信息,然后计算其邻居与本身的信息聚合。
在这两步上都可以用非线性函数(激活函数)来增加其表现力:激活函数常写作 σ ( ⋅ ):如 ReLU ( ⋅ ) ,Sigmoid ( ⋅ ) ……

在这里插入图片描述

3. 经典GNN层

3.1 图卷积网络GCN

信息转换:对上一层的节点嵌入用本层的权重矩阵进行转换,用节点度数进行归一化(在不同GCN论文中会应用不同的归一化方式)
信息聚合:加总邻居信息,应用激活函数

在这里插入图片描述

img

3.2 GraphSAGE

在这里插入图片描述

GraphSAGE聚合邻居的方式:

Mean:邻居的加权平均值

Pool:对邻居向量做转换,再应用对称向量函数,如求和 Mean ( ⋅ ) 或求最大值 Max ( ⋅ )

LSTM:在reshuffle的邻居上应用LSTM

在这里插入图片描述

在GraphSAGE每一层上都可以做 L2 归一化,经过归一化后,所有向量都具有了相同的L2范式
有时可以提升模型的节点嵌入效果

在这里插入图片描述

3.3 GAT

在这里插入图片描述

img

这里的attend指的是给予其邻居不同的重要性importance

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

GAT的多头注意力机制multi-head attention:增加模型鲁棒性,使模型不卡死在奇怪的优化空间,在实践上平均表现更好。
用不同参数建立多个 attention 模型:

在这里插入图片描述

注意力机制的优点:
核心优点:隐式定义节点信息对邻居的importance value α v u

computationally efficient:对attentional coefficients的计算可以在图中所有边上同步运算,聚合过程可以在所有节点上同步运算
storage efficient:稀疏矩阵运算需要存储的元素数不超过 O ( V + E ) ,参数数目固定(a 的可训练参数尺寸与图尺寸无关)
localized:仅对本地网络邻居赋予权重
inductive capability:边间共享机制,与全局图结构无关(我的理解就是算出 attention mechanism 的参数之后就完全可以正常对新节点运算,不需要再重新计算什么参数了)

3.4 实践应用中的GNN网络层

实践应用中的GNN网络层:往往会应用传统神经网络模块,如在信息转换阶段应用Batch Normalization(使神经网络训练稳定)、Dropout(预防过拟合)、Attention / Gating3(控制信息重要性)等。

在这里插入图片描述

在这里插入图片描述

Batch Normalization:对一个batch的输入数据(节点嵌入)进行归一化,使其平均值为0,方差为1

在这里插入图片描述

Dropout5:在训练阶段,以概率p随机将神经元置为0;在测试阶段,用所有的神经元来进行计算

在这里插入图片描述

4. Stacking Layers of a GNN

再回顾一下第一节写的连接GNN网络层部分:

在这里插入图片描述

连接GNN网络层的标准方式:按序堆叠
输入原始节点特征,输出L层后计算得到的节点嵌入向量

在这里插入图片描述

过平滑问题the over-smoothing problem6:如果GNN层数太多,不同节点的嵌入向量会收敛到同一个值(如果我们想用节点嵌入做节点分类任务,这就凉了)

在这里插入图片描述

GNN的层跟别的神经网络的层不一样,GNN的层数说明的是它聚集多少跳邻居的信息

GNN的感受野receptive field:决定该节点嵌入的节点组成的集合。
对K层GNN,每个节点都有一个K跳邻居的感受野。如图可见K越大,感受野越大

在这里插入图片描述

对两个节点来说,K变大,感受野重合部分会迅速变大

在这里插入图片描述

感受野 & 过平滑
节点嵌入受其感受野决定,两个节点间的感受野越重合,其嵌入就越相似。
堆叠很多GNN网络层→节点具有高度重合的感受野→节点嵌入高度相似→过平滑问题

由于过平滑问题,我们需要谨慎考虑增加GNN层。
第一步:分析解决问题所需的必要感受野(如测量图的直径7)
第二步:设置GNN层数 L 略大于我们想要的感受野

既然GNN层数不能太多,那么我们如何使一个浅的GNN网络更具有表现力呢?

方法1:增加单层GNN的表现力,如将信息转换/信息聚合过程从一个简单的线性网络变成深度神经网络(如3层MLP)

方法2:**添加不是用来传递信息的网络层,也就是非GNN层,**如对每个节点应用MLP(在GNN层之前或之后均可,分别叫 pre-process layers 和 post-process layers)
pre-processing layers:如果节点特征必须经过编码就很重要(如节点表示图像/文字时)
post-processing layers:如果在节点嵌入的基础上需要进行推理和转换就很重要(如图分类、知识图谱等任务中)
在这里插入图片描述

如果实际任务还是需要很多层GNN网络,那么可以在GNN模型中增加skip connections9
通过对过平滑问题进行观察,我们可以发现,靠前的GNN层可能能更好地区分节点。(就很明显嘛这事)
因此我们可以在最终节点嵌入中增加靠前GNN层的影响力,实现方法是在GNN中直接添加捷径,保存上一层节点的嵌入向量(看后文应该是指在激活函数前,在聚合后的结果的基础上再加上前一层的嵌入向量)
在这里插入图片描述

skip connections原理10:
相当于制造了多个模型(如图所示),N个skip connections就相当于创造了 2^N 条路径,每一条路径最多有N个模块。
这些路径都会对最终的节点嵌入产生影响,相当于自动获得了一个浅GNN和深GNN的融合模型。

在这里插入图片描述

skip connections也可以跨多层,直接跨到最后一层,在最后一层聚合之前各层的嵌入(通过concat / pooling / LSTM)11在这里插入图片描述

这篇关于【斯坦福大学公开课CS224W——图机器学习】七、图神经网络2:GNN设计空间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333221

相关文章

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;