由于在论文中看到了GNN的东西,所以来简单记录一下。
GNN?图神经网络,听起来很高大上的东西,简单来说可以提取图中每个点的特征。故其的作用为特征提取
。本文到此结束,感谢您的阅读。
基础知识-图
在计算机科学中,图是由顶点和边进行组成了一种结构。图G可以通过顶点集合V和边集合E来描述。
说人话就是:图可以用下面的图片来表示。
在图中,节点有:{男主,女主,宠物},边为{喜欢,养}
图神经网络GNN
图神经网络共有三个操作:聚合,更新,循环
我们以分类问题为例,比如我们想判断上面一幅图中谁比较有钱。下面给出上面图中各个点的信息
属性 | 宠物 | 男主 | 女主 |
---|---|---|---|
金钱 | 9999 | 9 | 900 |
Step1 聚合
对于普通的神经网络来说,我们很容易就知道宠物很有钱,但是通过图的关系来看,男主的宠物很有钱,也许可以推断出男主很有钱。
所以男主的邻居信息N的计算公式如下所示: $$ N = a * (宠物的钱) + b * (女主的钱) $$
Step2 更新
男主最终的特征为:
$$ 男主钱 = \sigma[ W * 男主自己的钱 + \alpha N ] $$
其中$\sigma$是激活函数(比如relu或者sigma)
W是模型的训练参数
Step3 循环
通过一次聚合更新,我们可以推断出男主因为宠物很有钱,而变得有钱。
接下来,我们进行第二次更新,女主就可以因为男主有有钱,而变得有钱。此时说明了女主也获得了其二阶邻居(男主宠物)的特征了。
能干嘛?
Q: 最终怎么进行分类问题呢?
A:我们通过GNN之后可以获得每个节点更新后的信息,也就是特征,此时我们就可以之间通过训练一个分类器来进行分类了。
归根到底,GNN就是一个特征分类的问题
怎么实现?
手动写一个?不可能。我又不是专门研究这一个的,我们来看一下网上有的python库,我们可以通过这个库tf_geometric来实现图神经网络
原始图的信息(5个节点,每个节点10个特征):
图神经网络特征提取后的信息(5个节点,每个节点5个特征)
为什么特征少了,我也想不出来,呜呜呜!
参考链接
https://www.bilibili.com/video/BV1Tf4y1i7Go/?spm_id_from=333.788.recommend_more_video.-1