1. Recap

Deep Graph Encoders(深度图编码器)

Graph Neural Networks

GNN核心思想:节点的邻域定义了一个计算图

Aggregate from Neighbor

想法:节点使用神经网络聚合来自其邻居的信息

为什么说GNNs泛化了其他神经网络?

因为它定义了置换不变性等变性的概念。

GNNs VS. CNNs

  • CNN 可以看作是具有固定邻居大小和排序的特殊 GNN

    • CNN的滤波器的大小是预定义的
    • GNN 的优点是它能为每个节点处理具有不同度数的任意图
  • CNN 不是置换等变的
    • 改变CNN像素的顺序会导致不同的输出

GNNs VS. Transformer

Transformer 是最流行的架构之一,它在许多序列建模任务中实现了出色的性能。它的主要机制是self-attention(自我注意力机制):每个标记/单词都通过矩阵计算处理所有其他标记/单词。
由于每个单词都涉及所有其他单词,因此 Transformer 层的计算图与全连接“单词”图上的 GNN 的计算图相同。Transformer 层可以看作是一个特殊的 GNN,它运行在一个完全连接的“单词”图上。

2. 通用GNN框架

  • GNN层 = Message + Aggregation

    • 在这个视角下可以有不同的架构(实例化)
    • 包括GCN, GraphSAGE, GAT, …
    • 这些架构的不同之处在于它们如何定义聚合和消息的概念
  • 层连通性(Layer connectivity) :我们如何将GNN层连接起来

    • 可以按顺序堆叠
    • 也可以添加skip connections
  • 图增强:如何创建计算图?原始输入图≠计算图

    • 图特征增强
    • 图结构增强
  • Learning objective

    • 我们如何训练GNN:

      • 监督/非监督目标
      • 节点/边缘/图形级别任务
        总体GNN框架如下:

3. 定义GNN的单个层

GNN层 = Message(消息转换) + Aggregation(消息聚合)

不同的图神经网络架构对这两种操作的定义不同。
定义GNN层:将一组向量压缩成一个向量
需要两个步骤:

  1. Message
  2. Aggregation

3.1 Message Computation

节点第l层的嵌入是l-1层节点自身的信息和l-1层邻居的信息的聚合,并且这些信息的计算顺序对结果没有影响

3.2 Message Aggregation

想法:每个节点都要从它的邻域聚合信息,聚合函数可以采用求和、平均或求最大值函数。

问题:采用上面的算法来自节点v本身的节点信息可能会丢失,因为 h v ( l ) h_v^{(l)} hv(l)​的计算并不直接依赖于 h v ( l − 1 ) h_v^{(l-1)} hv(l−1)​
解决方法:求解第l层的节点嵌入 h v ( l ) h_v^{(l)} hv(l)​时,把节点v第l-1层的嵌入 h v ( l − 1 ) h_v^{(l-1)} hv(l−1)​也纳入计算

  • Message:计算消息时也考虑来自节点v本身的信息。

    • 通常,对于来自节点v自身的消息和来自节点v邻域的消息,我们将执行不同的计算过程。
  • Aggregation:从邻域聚合信息后,我们将聚合来自自身的信息(串联求和)。

3.3 Summary: A Single GNN Layer


聚合时我们可以加入节点自身的信息,我们还可以把非线性激活函数加入到消息传递或聚合中,以增强网络的表现力

3.4 经典图神经网络层

1. GCN

  • Message: 将来自邻域的消息和权重矩阵相乘,并用节点度数归一化
  • Aggregation:对来自邻居的消息求和,并应用激活函数

2. GraphSAGE

Message + Aggregation

  • 消息在 A G G ( ⋅ ) AGG(\cdot) AGG(⋅)函数中被计算
  • 采用两阶段聚合算法
    • Stage 1: 从节点邻居聚合
    • Stage 2: 进一步聚合节点本身的信息
      总过程如下:

GraphSAGE与GCN的区别

  1. 可以采用任意的聚合函数 A G G ( ⋅ ) AGG(\cdot) AGG(⋅)
  2. 节点本身获取信息,并对其进行转换,然后将其与聚集的信息连接起来

GraphSAGE Neighbor Aggregation

可以选择不同的聚合函数

  • Mean:取邻居的加权平均值
  • 池化:变换邻域信息向量(多层感知机)并应用对称向量函数 M e a n ( ⋅ ) Mean(\cdot) Mean(⋅)或 M a x ( ⋅ ) Max(\cdot) Max(⋅) ,
  • LSTM:将序列模型LSTM应用于重新排序的邻居(训练模型忽略邻居节点的顺序)

GraphSAGE:L2 Normalization

  • 对GraphSAGE的每一层嵌入应用 L 2 L_2 L2​ 正则化

    • h v ← h v ( l ) ∣ ∣ h v ( l ) ∣ ∣ 2 ∀ v ∈ V h_v \leftarrow \frac{h_v^{(l)}}{|| h_v^{(l)}||_2} \forall v \in V hv​←∣∣hv(l)​∣∣2​hv(l)​​∀v∈V ,其中 ∣ ∣ u ∣ ∣ 2 = ∑ i u i 2 ||u||_2 = \sqrt{\sum_i u_i^2} ∣∣u∣∣2​=∑i​ui2​ ​
    • 如果不用L2正则化,不同的嵌入向量会有不同的模长,不同的比例
    • 在某些情况下(并非总是),嵌入的规范化会提升性能
    • L2归一化后,所有的向量都将具有相同的 l 2 − n o r m l_2-norm l2​−norm,相同的长度1。

3. GAT

图注意力网络:

GCNGraphSAGE中,

  • α v u = 1 ∣ N ( v ) ∣ \alpha_{vu} = \frac{1}{|N(v)|} αvu​=∣N(v)∣1​,是节点 u 的消息对节点 v 的权重因子(重要性)
  • α v u \alpha_{vu} αvu​是根据图的结构属性(节点度)显式定义的
  • 所有邻居 u ∈ N ( v ) u \in N(v) u∈N(v)对节点v都是同等重要
    然而在图注意力网络中,并非所有节点的邻居都同等重要
  • 注意力受到认知注意力的启发
  • 注意力 α v u \alpha _{vu} αvu​专注于输入数据的重要部分而忽略其余部分
    • 理念:神经网络应该在数据的那个小而重要的部分上投入更多的计算能力
    • 数据的哪一部分更重要取决于上下文,是通过训练学习的

GAT(图注意力网络)
目标:指定图中每个节点的不同邻居的任意重要性
理念:按照注意力策略计算图中每个节点的嵌入 h v ( l ) h_v^{(l)} hv(l)​,为邻域中的不同节点隐式指定不同的权重

注意力机制

  • 让 α v u \alpha_{vu} αvu​作为注意力机制a的副产品被计算出来

    • (1) a 根据节点 u,v 的信息,计算各对节点的注意力系数 e v u e_{vu} evu​, e v u e_{vu} evu​表示节点u的信息对节点v的重要性。
    • 将 e v u e_{vu} evu​归一化为最后的注意力权重 α v u \alpha_{vu} αvu​
      - 我们使用softmax函数,这样所有权重的和为1: ∑ u ∈ N ( v ) α v u = 1 \sum_{u\in N(v)}\alpha_{vu} = 1 ∑u∈N(v)​αvu​=1
    • 基于最终注意力权重 α v u \alpha_{vu} αvu​的加权和:
  • 注意力机制 a 的形式
    • 注意力机制的形式与注意力机制 a 的选择无关

      • 例如,我们使用一个简单的单层神经网络

        • a具有可训练的参数(线性层中的权重)
    • a 的参数是联合训练
      -以端到端的方式学习注意力机制的参数权重矩阵(即神经网络 W ( l ) W^{(l)} W(l) 的其他参数)
  • 多头注意力机制 ( Multi-head) :可以稳定注意力机制的学习过程
    • 创建多个注意力分数(每个副本具有不同的参数集)
    • 然后再将输出汇总:
      • 串联求和
        我们随机初始化 α v u 1 , α v u 2 , α v u 3 \alpha_{vu}^1, \alpha_{vu}^2, \alpha_{vu}^3 αvu1​,αvu2​,αvu3​这三个参数, 并采用不同的函数进行训练,最后这三个数都会收敛到一个局部最小值,但是由于我们使用了多个注意力头,我们将它们的转化平均在一起,这会使得我们的模型更加健壮,而不致于卡在优化空间的某些怪异点。

注意力机制的好处 (不太能理解,看一下这个模型的代码后再回来看一下):

  • 核心优势:允许(隐式地)为不同的邻居指定不同的重要性值( α v u ) \alpha_{vu}) αvu​)
  • 计算效率高
    • 注意力系数的计算可以在图的所有边上并行化
    • 聚合可以在所有节点上并行化
  • 储存效率高
    • 稀疏矩阵运算不需要存储超过 O ( V + E ) O(V + E) O(V+E)的实体
    • 固定数量的参数,与图大小无关
  • 注意力机制是局部的
    • 只有本地网络社区参与
  • 归约能力(Inductive capability)
    • 一种共享的边缘机制
    • 不依赖于全局图结构

4. 实践中的 GNN 层

  • 在实践中,这些经典的 GNN 层是一个很好的起点:

    • 通常可以通过考虑通用的 GNN 层设计来获得更好的性能
    • 具体来说,我们可以包括现代深度学习模块,这些模块被证明在许多领域都很有用。
  • 许多现代深度学习模块可以合并到 GNN 层中,例如:
    1. 批量标准化(Batch Normalization):可以稳定神经网络的训练过程
    2. Dropout:避免过拟合
    3. 注意力或门控机制(Attention/Gating):可以控制消息的重要性
    4. 以及其他任何有用的深度学习模块

4.1 批量归一化

目标:稳定神经网络训练过程

核心思想:给定一批输入(节点嵌入)

  • Re-center:使节点嵌入的均值为0
  • Re-scale:使节点嵌入的方差为1

步骤

  • step1:计算N个嵌入的均值和方差
  • step2:使用计算出的平均值和方差对特征进行归一化处理

4.2 Dropout

目标:对神经网络进行规范化处理以防止过度拟合
想法

  • 训练期间,以一定的概率p,随机将神经元设置为零(关闭)
  • 测试期间:使用所有神经元进行计算
    这样,我们可以使神经网络模型对噪音有更强的抵抗力,防止其过度拟合。
    在 GNN 中,Dropout 应用于消息函数中的线性层
  • 一个带有线性层的简单消息函数如下:
    m u ( l ) = W ( l ) h u l − 1 m_u^{(l)} = W^{(l)}h_u^{l-1} mu(l)​=W(l)hul−1​

4.3 激活函数(非线性)

将激活应用于嵌入 x x x的第 i i i维:

总结:现代深度学习模块可以包含在 GNN 层中以获得更好的性能,设计新颖的 GNN 层仍然是一个活跃的研究前沿,您可以探索不同的 GNN 设计或在 GraphGym 中尝试自己的想法。

5. GNN层间的堆叠

5.1 如何将 GNN 层连接成 GNN?

  • 顺序堆叠
  • 添加skip连接的方法

    如何构建图神经网络?
  • 标准方式:按顺序堆叠 GNN 层
  • 输入:初始原始节点特征 x v x_v xv​
  • 输出:节点嵌入 h v ( L ) h_v^{(L)} hv(L)​在 K 个 GNN 层之后

5.2 过度平滑问题

过度平滑问题堆叠许多 GNN 层会造成过度平滑问题,即所有节点嵌入收敛到相同的值,这导致我们不能使用节点嵌入来区分节点。

5.2.1 为什么会出现过度平滑问题

  • 感受野:节点v的感受野就是决定节点v的最终嵌入的一组节点
    在 K 层 GNN 中,每个节点都有一个K-跳邻域的感受野
  • 两个节点的感受场重叠当我们增加跳数(GNN层的数量)时,共享邻居迅速增长
  • 我们可以通过感受野的概念来解释过度平滑的问题:
    • 一个节点的嵌入是由它的感受野决定的
    • 如果两个节点具有高度重叠的感受野,那么它们的嵌入高度相似
    • 逻辑链:堆叠许多 GNN 层 -> 节点将具有高度重叠的感受野 -> 节点嵌入将高度相似 -> 遭受过平滑问题

5.2.2 如何解决过平滑问题?设计 GNN 层连接性(Connectivity)

1. 尽量少添加 GNN 层时,并提高GNN层的表达能力

  • 与其他领域的神经网络(用于图像分类的 CNN)不同, GNN 层并不是越多越好
  • Step 1:分析解决问题所必要的感受野。例如,通过计算图的直径
  • Step 2:将 GNN 层数 L 设置为比我们喜欢的感受野多一点,但不是没必要的大

GNN层数变少了,那我们如何提高浅层 GNN 的表达能力呢?

  • 方法1:提高每个GNN层内的表达能力

    • 在我们之前的例子中,每个转换或聚合函数只包括一个线性层
    • 我们可以增加层数,使聚合/转换成为一个深度神经网络,在下图中,消息转换和消息聚合操作都可以包含一个三层的感知机:
  • 方法2:添加不传递信息的层
    • 一个GNN不一定只包含GNN层 ,例如,我们可以在GNN层之前和之后添加MLP层(应用于每个节点),作为前处理层后处理层

      • 前处理层:当有必要对节点特征进行编码时非常重要。例如,当节点为图像/文本
      • 后处理层:当需要对节点嵌入进行推理/转换时非常重要 ,例如,图分类、知识图
      • 实践证明,添加这些层的效果很好

2. 在GNNs中添加skip connections

如果分析了感受野之后,发现问题仍然需要许多GNN层,那我们如果解决多层GNN的过平滑问题呢?
解决方案:使用跳转链接(skip connections)
Veit et al. Residual Networks Behave Like Ensembles of Relatively Shallow Networks, ArXiv 2016

  • 从过度平滑中观察到:早期GNN层中的节点嵌入有时可以更好地区分节点
  • 解决方案:我们可以通过在GNN中添加捷径(shortcuts)增加早期层对最终节点嵌入的影响

为什么跳转连接能起作用呢?

  • 直觉:跳转链接创造了一个混合模型
  • N个跳转链接就会有 2 N 2^N 2N次方个可能的路径
  • 每条路径最多可以有N个模块
  • 我们自动得到一个浅层GNN和深层GNN的混合模型

Example: GCN with Skip Connections

另一种类型的跳转链接直接跳到最后一层,最后一层直接聚合了前几层的所有节点嵌入

斯坦福CS224W图机器学习笔记自用:A General Perspective on Graph Neural Networks相关推荐

  1. CS224W图机器学习笔记自用:GNN Augmentation and Training

    Recap: today's outline: (4)Graph augmentation (5)Learning objective 1. GNN 的图增强(Graph Augmentation f ...

  2. 论文阅读笔记:Link Prediction Based on Graph Neural Networks

    文章目录 说明 Abstract 1 Introduction 2 Preliminaries Notations Latent features and explicit features Grap ...

  3. CS224W图机器学习笔记8-图神经网络三大应用

    图神经网络 课程和PPT主页 Prediction with GNNs 目前我们只学习了从输入图->节点嵌入,也就是学习图神经网络怎么获取节点嵌入,并没有学习针对特定下游任务的一些内容(从节点嵌 ...

  4. CS224W图机器学习笔记5-消息传递与节点分类

    消息传递与节点分类 课程和PPT主页 本文主要解决的问题:给定一个只有部分已知标签节点的图,如何给图中其他节点分配正确的标签? 本文主要讨论一个名为"message passing" ...

  5. 开源啦!首个多感官数据训练平台;斯坦福CS224W·图机器学习课程;ThinkX系列新作,更易编程的贝叶斯思维;前沿论文 | ShowMeAI资讯日报

  6. 基于图神经网络的对抗攻击防御 GNNGUARD: Defending Graph Neural Networks against Adversarial Attacks

    参考资料 项目:https://zitniklab.hms.harvard.edu/projects/GNNGuard/ 代码:https://github.com/mims-harvard/GNNG ...

  7. cs224w(图机器学习)2021冬季课程学习笔记9 Graph Neural Networks 2: Design Space

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. A General Perspective on Graph Neural Networks ...

  8. [Datawhale][CS224W]图机器学习(三)

    目录 一.简介与准备 二.教程 2.1 下载安装 2.2 创建图 2.2.1 常用图创建(自定义图创建) 1.创建图对象 2.添加图节点 3.创建连接 2.2.2 经典图结构 1.全连接无向图 2.全 ...

  9. A Comprehensive Survey on Graph Neural Networks(图神经网络综合研究)

    A Comprehensive Survey on Graph Neural Networks 图神经网络综合研究 Zonghan Wu, Shirui Pan, Member, IEEE, Feng ...

最新文章

  1. Shell---判断(if)和分支(case)
  2. UNIX中的Select函数
  3. 直击CVPR2017:商汤科技打造技术盛宴23篇论文刮起中国风 By 机器之心2017年7月25日 10:14 近日,CVPR2017 在夏威夷如火如荼地进行,作为全球计算机视觉顶级会议,CVPR
  4. php本身免费是啥意思,PHP本身是否支持连接和析取?
  5. ctags对部分目录生成tags
  6. 查看 SAP Spartacus 基于 Angular 的版本号
  7. SpringSecurity的认识和整合流程
  8. AndroidStudio_安卓原生开发_sharedpreferences清空---Android原生开发工作笔记150
  9. 2022年11月份PMP考试是新版教材吗?
  10. 深度学习,实现智能聊天对话机器人(大数据人工智能公司)
  11. 变分法与最优控制matlab,1987_11变分法与最优控制_10654423.pdf
  12. 海康(hikvision)录像机添加萤石(ezviz)摄像机常见问题(转)
  13. Hi3559A 开发总结--使用docker
  14. 83页XX市高速智慧公路总体建设方案
  15. 服务器后台自动运行程序和停止
  16. 60条有名的处世原则与定理
  17. 每天一道Java编程01-厚度为0.0001米的纸折叠多少次可以折成珠穆朗玛峰8848米的高度?
  18. 前缀树是什么 前缀树的使用场景
  19. 9. 信息安全标准与法规
  20. 第一周1.1,1.2,3.2文档

热门文章

  1. 创业阶段如何找客户_创业初期,如何寻找最初的合伙人?
  2. 城市里的生意,有哪些适合50岁的人做,而且收入也不低呢?
  3. 大数据Spark必读书目
  4. python-循环递归斐波那契数列
  5. USB 传输方式(同步、等时)
  6. 【转】加权最小二乘法
  7. 算力不竭如江海,天翼云“息壤”如何助力千行百业算力智能调度?
  8. 路由器配置接口IP地址和网关的配置
  9. 本土自动驾驶Tier 1们的“农村包围城市”:先从商用车切入,再向乘用车拓展...
  10. VB6学习——正则的使用