GNN
- 输入:邻接矩阵A➕点的特征X
- 优势:传统输入的格式是固定的,GNN可以接受更加复杂的数据结构
- 任务:
- graph级别的任务:对整个图进行分类或预测
- Node或edge级别的任务:对点或边进行预测
- GNN也可以做多层:图的结构始终不变,输入和输出是更新前后点的特征
GCN
Semi-supervised learning:不一定所有的点都有标签,计算损失时只用有标签的
-
点的特征更新方法:邻接矩阵A✖️特征矩阵X
-
问题1:邻接矩阵中自己和自己的邻接值为0,没考虑自己,所以给邻接矩阵A加上对角阵I,称为新邻接矩阵A~
问题2:这样聚合特征会受邻居个数的影响(邻居越多数越大),因此再左乘一个度矩阵(D~)的倒数(D~-1),相当于上一步的加和值求平均
- 问题3:左乘D~-1相当于对行归一化,还要对列归一化,因此再右乘D~-1
-
问题4:这样对导致每个数被做了两遍归一化,因此改成-1/2次幂
所以,最终GCN的节点特征更新公式就是:
其中:
- A波浪=A+I,I是单位矩阵
- D波浪是A波浪的度矩阵(degree matrix)
- H是每一层的特征,对于输入层的话,H0=X
- W是可学习的参数
- σ是非线性激活函数
一句话总结
图网络:本质上就是一种提取特征的方法!!!但额外考虑了样本之间的图关系
GNN:节点本身特征 + 邻接矩阵
GCN:节点本身特征 + 邻接矩阵 + 度矩阵(GCN的聚合权重固定:仅由图的结构(邻接矩阵和度矩阵)决定)
GraphSAGE:对每个节点的邻居进行采样,减少计算开销,适合处理大规模图
GAT:使用节点特征来动态计算邻居节点的权重
参考
https://b23.tv/fmGbw4w
唐宇迪老师牛逼!