cs223w课程笔记7-GNN2

  1. GNN = message + aggregation
  2. MSG可以是一个线性变换,注意 h v l {h_v}^l hvl利用了v结点本身的信息。
    在这里插入图片描述
    经典的GCN Layers:

    这里的 h v l h_v^l hvl没有利用 h v l − 1 h_v^{l-1} hvl1的信息,下一种方法GraphSAGE进行了改进,把 h N ( v ) l h_{N(v)}^l hN(v)l的信息与 h v l − 1 h_v^{l-1} hvl1的信息连接起来,这里的concat操作就是把向量连接的意思
    在这里插入图片描述
    在这里插入图片描述
    GraphSAGE neighbor Aggregation的一些方法:求和,求平均值,还有非常有意思的是用LSTM,其中求和的message是除以 N ( v ) N(v) N(v),然后aggregation是求和;求平均值(池化)massage是用MLP,然后求平均值;LSTM就是把结点v的所有邻接结点的信息连接起来做一个LSTM
    在这里插入图片描述
    这里所谓 l 2 l_2 l2标准化就是除以这个数据本身的平方和的平方根,但是这是可选的,因为有些情况下使用这种方法有效,有些情况下无效
    在这里插入图片描述
    这里所谓的GAT就是加权求和,给v不同的邻接结点分配不同的权重,因为不同的邻接结点重要性是不同的,重要的权重就更大,而在GCN和GraphSAGE中,认为v的每个邻接结点的重要性是一样的,权重相同,相当于说 α v u = 1 \alpha_{vu} = 1 αvu=1对于任意的v,u均成立 。这里 α v u \alpha_{vu} αvu是一个可学习的参数,一开始是随意分配的
    在这里插入图片描述
    在这里插入图片描述

α v u \alpha_vu αvu的计算方法,先计算 e v u e_{vu} evu,它是通过对 W l h u l − 1 W^l h_u^{l-1} Wlhul1 W l h v l − 1 W^l h_v^{l-1} Wlhvl1做attention来计算的,然后对 e v u e_{vu} evu做一个softmax得到 α v u \alpha_{vu} αvu
这里提出一个问题,什么叫attention机制?它的形式是什么?
这里给出的一个例子是先把 W l h u l − 1 W^l h_u^{l-1} Wlhul1 W l h v l − 1 W^l h_v^{l-1} Wlhvl1连接起来,然后做一个线性变换。
在这里插入图片描述
在这里插入图片描述

跟transformer一样,GAT也使用了一个多头注意力的机制,其目的是为了稳定attention的过程,那么是怎么使用多头的呢?这里采用了计算多个 h v l [ i ] h_v^l[i] hvl[i],通过不同的 α v u i \alpha_{vu}^i αvui来计算,其实就是多用了几个 α v u \alpha_{vu} αvu的意思,有多个 h v l [ i ] h_v^l[i] hvl[i],最后把他们连接起来或者求和得到最后的 h v l h_v^l hvl
attention机制的优点:

  • 最关键的就是可以给不同的邻接结点分配不同的权重
  • 有利于并行计算,即GPU计算,因为attention的系数的计算可以使用并行计算,aggregation也可以使用并行计算
  • 存储空间少
  • 只需要考虑局部的网络邻接结点
  • 共享的参数,不依赖于图的整体结构

通过的GNN层
在这里插入图片描述
其中:

  • BatchNorm: 为了让训练更加稳定,单个输入变化太大,会导致训练不稳定
  • Dropout:避免过拟合
  • Attention/Gating:控制一个message的重要程度

在这里插入图片描述

这里batch normalization,使均值为0,方差为1,它的方法在除以标准差还加了个偏移,偏移符合高斯分布

在这里插入图片描述
这里dropout是为了避免过拟合,思想是在训练的时候以一个概率p,随机把一些神经元设置为0,但是在测试的时候,使用所有神经元用于计算

如何搭建GNN网络:之前我们讲了单个的GNN层,堆叠多个GNN层就变成了一个GNN网络
多层的GNN会导致一个over-smoothing问题:所有结点的embedding收敛于相同的值。这是为什么呢?

  • 定义一个概念 接收域:一些决定这个结点embedding的结点组成的一个范围叫接收域
  • 在K层的GNN网络中,每个结点有K跳邻接结点接收域
  • 共享结点的增长非常快,3跳结点的接收域就几乎是所有结点了,因为一个结点的embedding由它的接收域的结点决定,所以如果每个结点接受域为所有结点的话就会导致每个结点的embedding都是一样的。

产生了一个问题,GNN的层数越多,结点的接收域就越大,结点的embedding的会更相似,就会导致over-smoothing问题
那么,怎么解决over-smoothing问题呢?

  • 分析必要的接收域
  • 把GNN的层数设置为稍微比我们想要的接收域大一点,不要让层数不必要的多

既然层数要有限制,甚至会很少,那么又有问题了:如果GNN的层数很少的话,怎么增强GNN的表达能力呢?

  • 可以增强每一个GNN层的表达能力,可以让aggregation/transformation变成一个深度神经网络
  • 可以添加一些不进行信息传递的GNN层,一个GNN网络可以不用只有GNN层,可以添加一些MLP层,比如pre-process 层和 post-process 层,进行数据的预处理和输出数据的处理

现在考虑一个新的问题,如果我现在就是需要很多层GNN层呢?那怎么办?

  • 可以添加skip connections, 意思就是跳过一些层
  • 在这里插入图片描述

思考一个问题,既然可以跳过这一层,那为什么就不直接把这一层给删了呢?这不更直接吗?
是因为这不是简单的跳过,每一层之间都有一个skip connection,它不是一定会跳过这一GNN层,而是可以跳过,也可以不跳过,那就会产生有2的N次方的路径组合,N是skip connection的个数,它会给模型带来一系列的混合模型
在这里插入图片描述

说实话,看到这个GNN layer with skip connection的公式,让我想起了GraphSAGE,也是应用了前一层v结点的信息,只不过GraphSAGE是concat h v l − 1 h_v^{l - 1} hvl1, 而skip connection是直接进行相加

这里还有skip connections的一些其他的方法
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值