Paddle图神经网络课程学习笔记
课程地址: 图神经网络7日打卡营 - 飞桨AI Studio (baidu.com)
02图游走类模型
DeepWalk
目标:Node embeddings 学习到节点与邻居的关系。得到节点表示,用于下游任务
Word2Vec 应用到 图嵌入领域
节点——>单词
节点序列——>句子
游走方式:Random Walk
本质:可以回头的DFS
整体架构:
问题:图是一个复杂的结构,需要考虑更多因素。
Node2Vec
对DeepWalk的改进结合BFS与DFS模式。
改进:bias random walk
- p:控制随机游走以多大的概率back
- q:控制随机游走偏向DFS还是BFS
metapath2vec及其变种
异构图如何随机游走?
不考虑节点类型的异构随机游走,缺点:
- 1.偏向于出现频率高的节点类型;
- 2.偏向于相对集中的节点(即度数高的节点)
回顾异构图定义:
meta path(元路径):在图中选取的由节点类型构成的组合路径
基于meta path的随机游走
随机游走的时候考虑到节点类型
问题:负采样的时候,没有考虑节点类型
metapath++:负采样的时候,考虑节点类型
变种:multi-metapath2Vec++
利用多条元路径
side info + multi-metapath2vec++
03图神经网络算法(上)
图卷积网络(GCN)
卷积在规则数据上很好应用,如果是不规则的图呢?
从图像卷积类比到图结构卷积
图像卷积
将一个像素点周围的像素按照不同的权重叠加起来。
图结构卷积
将一个节点周围的邻居按照不同的权重叠加起来。
图卷积网络计算公式:
H ( l + 1 ) = σ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) H^{(l+1)}=\sigma\left(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}\right) H(l+1)=σ(D~−21A~D~−21H(l)W(l))
这个公式可以一步步来看
1.边上的源节点,往目标节点发送特征
2.目标节点对收到的特征进行聚合
问题:是否所有的人对自己的评价都是有用的?
所以:如何衡量邻居的重要性?
度:给边加权
怎么用多层图网络完成节点分类任务
GCN算法全流程:
第一步:节点间进行特征传递
第二步:对每一个节点过一层DNN
重复L次,实现多层图卷积网络
获取的最终表示 H ( L ) H^{(L)} H(L)作为最终节点表示,来分类
图注意力网络(GAT)
GCN中边的权重:
- 与节点的度相关
- 不可学习
GAT中的边权重
- 权重变成节点间的函数
- 权重与两个节点相关性有关
- 可学习
attention计算方法
α
i
j
=
exp
(
LeakyReLU
(
a
→
T
[
W
h
⃗
i
∥
W
h
⃗
j
]
)
)
∑
k
∈
N
i
exp
(
LeakyReLU
(
a
→
T
[
W
h
⃗
i
∥
W
h
⃗
k
]
)
)
\alpha_{i j}=\frac{\exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{j}\right]\right)\right)}{\sum_{k \in \mathcal{N}_{i}} \exp \left(\operatorname{LeakyReLU}\left(\overrightarrow{\mathbf{a}}^{T}\left[\mathbf{W} \vec{h}_{i} \| \mathbf{W} \vec{h}_{k}\right]\right)\right)}
αij=∑k∈Niexp(LeakyReLU(aT[Whi∥Whk]))exp(LeakyReLU(aT[Whi∥Whj]))
特征聚合计算方法
h
⃗
i
′
=
σ
(
∑
j
∈
N
i
α
i
j
W
h
⃗
j
)
\vec{h}_{i}^{\prime}=\sigma\left(\sum_{j \in \mathcal{N}_{i}} \alpha_{i j} \mathbf{W} \vec{h}_{j}\right)
hi′=σ
j∈Ni∑αijWhj
Message Passing
GCN、GAT都是基于邻居聚合的模型
称为Spatial(空间)GNN
大部分的Spatial GNN都可以用Message Passing实现
- 消息的发送
- 消息的接收
04图神经网络算法(下)
图采样
为什么要图采样?
数据太多,无法一次性送入计算资源。
借鉴MiniBatch的思想
但是:
传统深度学习
- 单batch为若干个样本
- 样本之间无依赖,多层样本计算量固定
图神经网络
- batch为若干个节点
- 节点之间相互依赖,多层节点计算量爆炸
什么是图采样?
!子图采样而不是随机采样
GraphSAGE(SAmple&aggreGatE)
1.邻居采样
2.邻居聚合
3.节点分类
邻居采样的优点
考虑:
采样是只能选取真实的邻居节点吗?
PinSAGE
通过多次随机游走,按游走经过的频率选取邻居。
概念:虚拟邻居
可以更加快速的聚合到多阶的信息
邻居聚合
单射
评估聚合表达能力的指标单射(一对一映射)
单射可以保证对聚合后的结果可区分
基于单射的Graph Isomorphism Net (GIN)模型
保证中心节点和邻居节点可区分
语义场景
05进阶模型
ERNIESage
背景:Text Graph
就是节点与边带有文本的特殊图
如何对Text Graph建模?
原有的方法:
只关注结构信息:GraphSage
退化成文本理解:ERNIE
但是!
ERNIE
ERNIE1.0核心思想:知识增强
ERNIE2.0核心思想:持续学习
总之:
ERNIE是百度推出的语义理解技术
- 世界领先的性能
- 广泛的应用前景
• 我们只需黑盒使用即可,像这样:
from models.ernie_model.ernie import ErnieModel
ernie = ErnieModel(src_ids=text_ids...)
ERNIESage Node
ERNIE 作用于Text Graph的Node(节点)上
ERNIESage Edge
ERNIE聚合Text Graph的Edge(边)上信息
ERNIESage 1-Neighbor
将中心节点的文本与所有一阶邻居节点文本进行单塔拼接,再利用ERNIE 做消息聚合。
问题:
-
如何确保在输入时邻居不带有顺序?
针对问题1:独立的位置编码
-
如果邻居数量过多,如何建模?
针对问题2:对邻居进行采样
UniMP
融合标签传递和图神经网络的统一模型
模型结构
-orrvPkcr-1664194691728)]
ERNIESage 1-Neighbor
将中心节点的文本与所有一阶邻居节点文本进行单塔拼接,再利用ERNIE 做消息聚合。
[外链图片转存中…(img-fNs5LI5H-1664194691729)]
问题:
-
如何确保在输入时邻居不带有顺序?
针对问题1:独立的位置编码
-
如果邻居数量过多,如何建模?
针对问题2:对邻居进行采样