GNN学习 GNN Model
GNN学习 GNN Model
这部分主要讲如何使用图神经网络GNN来进行节点嵌入
我们首先会想到,将邻接矩阵和特征合并到一起应用到深度神经网络上,问题在于:
- 需要O(|V|)的参数
- 不适用于不同大小的图
- 对节点顺序敏感
我们可以将卷积神经网络泛化到图上,并应用的节点特征数据
但是图没有固定的滑动窗口,并且图的节点顺序不固定
但是我们可以模仿图片结构,聚合节点的邻居信息
Graph Convolutional Network
通过邻居节点定义计算图,传播并且转换信息,最后计算出节点表示
主要想法:通过聚合邻居来生成节点嵌入
我们可以通过节点邻居定义计算图
深度模型
深度模型可以有很多层,并且可以有任意的深度
- 节点在每一层都有不同的表示向量
- 第0层的节点u的嵌入是节点最开始的特征
- 第k层是节点通过聚合k层所形成的表示向量
每一层节点嵌入都是邻居上一层节点的嵌入再加上它自己
聚合策略(aggregation strategies)
不同邻居信息聚合方法的差别就是在于如何跨层聚合邻居节点信息
聚合方法必须是与顺序无关的
基础方法:从邻居中获取信息求平均,再应用神经网络
深度encoder
\(h_0^v=x_v\)
\(h_v^{l+1}=\sigma(W_l {\sum_{u\in N(v)}}\frac{h_u^l}{\left | N(v) \right | } +B_lh_v^l ), \forall l \in {0,..L-1}\)
\(z_v=h_v^l\)
解释
h表示embedding,上标表示神经网络层数,下标表示哪个节点
W,B都表示一个矩阵
前面的这个累加的表示前一层邻居节点的平均,N(v)表示v的邻居节点集合
\(\sigma\)表示一个非线性的层,比如ReLU
\(z_v\)是最终节点的embedding
我们最终训练的时候需要训练B和W
W是邻居聚合的权重矩阵
B是转换节点自身隐藏向量的权重矩阵
embedding的矩阵形式
\(H^l=[h_1^l...h_{|V|}^l]^T\)
\(\sum_{u\in N_v}h_u^l=A_{v,:}H^l\)
A是邻接矩阵,其中\(A_{v,:}表示起始为v的所有向量\)
D是对角矩阵
\(D_{v,v}=Deg(v)=|N(v)|\)
\(D^{-1}_{v,v}=1/|N(v)|\)
所以:
\(\sum_{u\in N(v)}\frac{h_u^{l-1}}{\left | N(v) \right | }\Longrightarrow H^{l+1}=D^{-1}AH^l\)
最终形式如下:
\(H^{l+1}=\sigma(\tilde{A}H^lW^T_l+H^lB_l^T)\)
其中\(\tilde{A}=D^{-1}A\)
训练
定义损失函数
有监督训练:
\(min\mathcal{L}(y,f(z_v))\)
回归问题可以用L2 Loss,比如均方误差
分类问题可以用交叉熵损失函数
无监督训练:
相似的节点有相似的embedding
\(\mathcal{L}=\sum_{z_u,z_v}CE(y_{u,v},DEC(z_u,z_v))\)
当节点u和v相似时\(y_{u,v}=1\)
CE就是cross entropy
DEC就是decoder,比如内积