该笔记记录于2021.01.06,
于2022.03.08 从本人OneNote/CS笔记/GCN转移到CSDN。
GraphSage讲解
https://zhuanlan.zhihu.com/p/79637787
这篇解读基本完全解答了GraphSage是干啥的。
简单的说,一个图里有很多节点,每个节点之间可能有边。每个节点有自己的特征向量。
网络每一层把节点自己的特征向量和邻居的聚合一下,构成自己下一层的特征向量,特征向量维度不便。
这样,有新节点加入的话,就可以只修改或训练新节点及其邻居,而不用整个图一起修改。
GraphSAGE 是Graph SAmple and aggreGatE的缩写,其运行流程如上图所示,可以分为三个步骤
- 1.对图中每个顶点邻居顶点进行采样:
- 采样是为了计算效率,每个顶点只随机选k个邻居(邻居不到k个,就有放回的抽取)。当然不考虑效率,也可以用全部邻居
- 2.根据聚合函数聚合邻居顶点蕴含的信息
- 2.1前向传播
- 下一层的节点embedding, 等于邻居的上一层的聚合拼接自己的上一层,再乘W再激活
- 下一层的节点embedding, 等于邻居的上一层的聚合拼接自己的上一层,再乘W再激活
- 2.2聚合函数的选择
- mean aggregator:
- 对每个邻居的特征按元素求平均
- 或把自己的和邻居的放在一起求平均,这样就不用第五行的拼接了。这个方法类似卷积
- LSTM aggregator
- 比mean有更强的表达能力
- 但不对称(并不是置换不便的。我们的邻居是等价的,但该方法认为不同邻居有先后关系),所以需要先把邻居顺序随机打乱一下
- 没说具体是咋弄
- Pooling aggregator
- 全连接,激活,再max(理论上可以多用几层网络,但本文只弄了一层的)
- mean aggregator:
- 2.1前向传播
- 3.得到图中各顶点的向量表示,供下游人物使用
来自 https://zhuanlan.zhihu.com/p/79637787
graphSage和GCN的区别
至于graphSage和GCN的区别,看这篇:
https://zhuanlan.zhihu.com/p/74242097
说白了都是聚合。
GCN是把整个图拿着一起训练的,所以显得GraphSage更灵活一些。
其实GCN的方法你想弄成单节点训练的话也未必没有办法鸭。
显得就是,GCN直接整个图训练,得到每个节点的embedding。
而GraphSage求的是聚合函数的参数,如果有个新节点的话,直接用这个聚合函数就能求出embedding了。
实现:
图神经网络入门实战GraphSAGE-Tensorflow 2.0实现
来自 https://zhuanlan.zhihu.com/p/149684079