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,比如内积

posted @ 2023-07-22 23:18  ANewPro  阅读(45)  评论(0编辑  收藏  举报