图神经网络(GNN/GCN)

GNN(Graph Neural Network)

概念

图神经网络是一类专门设计用于处理图结构数据的神经网络。目标是学习图中节点或边的表示(representations),这些表示能够捕捉图中的拓扑结构以及节点或边的属性信息。这些学习到的表示可以进一步用于各种图相关的任务,如节点分类、图分类、链接预测、推荐系统等。

基本思想

通过迭代地聚合邻居节点的信息来更新节点的表示。简单来说就是我不仅要学习结点本身的特征,我周围的结点跟我有关系,所以我可以适当的学习一点他们的特征,然后与我自己的特征进行聚合得到最终的特征来训练模型。举例来说,我只有三个朋友,而且他们都很有钱,故可以猜测我也很有钱。

聚合

聚合就是通过下面提出的式子为每一个结点计算他们的信息,这个计算利用了他的邻居们的信息和自己的信息。也就是说利用了所有相关的信息,把他们通过某种方式计算出一个最终的属于自己的信息。

图1
在这里插入图片描述

这是一种简单的写法,其中

  • N N N:为邻居们的信息
    • a 、 b 、 c a、b、c abc:是邻居们的权重,可以让模型自己学习
  • α α α:是一个超参数,可以用attention(我现在还没学过attention
  • W W W:是结点本身的信息的权重
  • σ σ σ:是激活函数

当然了,也有很多其他的方式来利用邻居的信息,如下图,可以是汇总(也就上面这种),也可以是求和、取平均、最大值、最小值等。

图2
在这里插入图片描述

更新

更新就是在我们上面提到的,将每个结点聚合完成后的值替换原来的值,此为更新,这个新的值包含更多的信息(他的所有邻居的信息)

循环

循环,就是在第一轮(即所有的结点都聚合更新一遍)聚合、更新完成之后,继续下一轮的聚合更新,依次类推,一直循环到我们规定的轮数后为止。
为什么要这样呢?这样不是重复了吗?其实不是的,因为你经过第一轮聚合更新之后,每个结点的值已经不是只包含自己的信息了,他们都会包含自己的一阶邻居(就是与该结点直接相连的结点)的信息,然后再次进行聚合之后,每个结点的值就包含了二阶邻居的信息了,循环到次数越多,包含的更多的邻居。以图1为例,第一轮聚合更新后,A中包含了B、C、D的信息,同时C中包含了A、B、D、E的信息,如果进行第二轮,则A再次与B、C、D进行聚合,而此时C中已经包含了E中的信息,那是不是就代表着A中也聚合了E的信息,E是A的二阶邻居。

GCN(Graph Convolutional Network)

基本概念

通过卷积操作来聚合邻居节点的信息。

  • CNN 的卷积核是一个在图像上滑动的固定大小的窗口,用于计算窗口内像素的加权和。
  • GCN 的卷积操作更加复杂,通常通过聚合邻居节点的特征来更新节点的特征表示,这可以看作是一种在图上的“卷积”。GCN的卷积核通常不是传统意义上的滑动窗口,而是基于节点间关系的聚合函数。

在这里插入图片描述

在这里插入图片描述

基本原理

以下图为例看看GCN究竟是如何计算的

在这里插入图片描述
特征计算的方法其实就让邻接矩阵与特征矩阵进行乘法运算,表示聚合邻居信息
在这里插入图片描述
但是这样这是聚合了邻居的信息,我们还得考虑自己的信息,所以在邻接矩阵的主对角线都从0换为1,表示自己与自己有关系,这样进行矩阵乘法的时候就会将自己的特征一起计算进去
在这里插入图片描述
因为每个结点的邻居数量可能不一样,所以我们可以做一个类似于归一化的操作,就是将度矩阵取个倒数
在这里插入图片描述
这样我的公式就编程下图红色框内的样子,不过可以发现,这样只对最终的特征矩阵的每一行取了平均,对列还是没有作用,所以还需要改进
在这里插入图片描述
改进后的公式如下图的红框,即在新的邻接矩阵左边和右边都乘以度的矩阵的逆,左乘相当于对行做了平均,右乘相当于对列做了平均,但是这样又有个问题,就是好像做了两次平均,有点过了,还得改进
后
改进后的公式就是下图蓝色框内的,相当于在新的邻接矩阵左边和右边都乘以度的矩阵的-1/2次方,需要注意的是左右两边乘以的不是同一个矩阵
在这里插入图片描述
如下图,A的度为1,只与B有关,而B的度很大,于很多结点关联,如果不进行取平均的操作的话,B会对A产生很大的影响。例如你是一个贫民,而你只认识一个非常有钱的人,那么就能推断出你也很有钱吗?显然是不可以的。
在这里插入图片描述

基本公式

一般来说GCN的层数不会太多,两到三层最常见。举例来说,你老婆的情绪会影响到你的情绪,然后你老婆的哥哥的情绪可能会影响到你的情绪,那么你老婆的哥哥的朋友的情绪会对你有什么影响吗?也就是说,层数多了可能学到的特征没什么用

以两层为例
在这里插入图片描述

参考视频

  1. 简单粗暴带你快速理解GNN
  2. 简单粗暴带你理解GCN图卷积神经网络
  3. 图神经网络GNN/GCN教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值