GNN学习 GNN Model

GNN学习 GNN Model

这部分主要讲如何使用图神经网络GNN来进行节点嵌入

我们首先会想到,将邻接矩阵和特征合并到一起应用到深度神经网络上,问题在于:

  • 需要O(|V|)的参数
  • 不适用于不同大小的图
  • 对节点顺序敏感

我们可以将卷积神经网络泛化到图上,并应用的节点特征数据

但是图没有固定的滑动窗口,并且图的节点顺序不固定

但是我们可以模仿图片结构,聚合节点的邻居信息

Graph Convolutional Network

通过邻居节点定义计算图,传播并且转换信息,最后计算出节点表示

主要想法:通过聚合邻居来生成节点嵌入

我们可以通过节点邻居定义计算图

深度模型

深度模型可以有很多层,并且可以有任意的深度

  • 节点在每一层都有不同的表示向量
  • 第0层的节点u的嵌入是节点最开始的特征
  • 第k层是节点通过聚合k层所形成的表示向量

每一层节点嵌入都是邻居上一层节点的嵌入再加上它自己

聚合策略(aggregation strategies)

不同邻居信息聚合方法的差别就是在于如何跨层聚合邻居节点信息

聚合方法必须是与顺序无关的

基础方法:从邻居中获取信息求平均,再应用神经网络

深度encoder

h0v=xv

hvl+1=σ(WluN(v)hul|N(v)|+Blhvl),l0,..L1

zv=hvl

解释

h表示embedding,上标表示神经网络层数,下标表示哪个节点

W,B都表示一个矩阵

前面的这个累加的表示前一层邻居节点的平均,N(v)表示v的邻居节点集合

σ表示一个非线性的层,比如ReLU

zv是最终节点的embedding

我们最终训练的时候需要训练B和W

W是邻居聚合的权重矩阵

B是转换节点自身隐藏向量的权重矩阵

embedding的矩阵形式

Hl=[h1l...h|V|l]T

uNvhul=Av,:Hl

A是邻接矩阵,其中Av,:v

D是对角矩阵

Dv,v=Deg(v)=|N(v)|

Dv,v1=1/|N(v)|

所以:

uN(v)hul1|N(v)|Hl+1=D1AHl

最终形式如下:

Hl+1=σ(A~HlWlT+HlBlT)

其中A~=D1A

训练

定义损失函数

有监督训练:

minL(y,f(zv))

回归问题可以用L2 Loss,比如均方误差

分类问题可以用交叉熵损失函数

无监督训练:

相似的节点有相似的embedding

L=zu,zvCE(yu,v,DEC(zu,zv))

当节点u和v相似时yu,v=1

CE就是cross entropy

DEC就是decoder,比如内积

posted @   ANewPro  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示