CS224W摘要06.07.GNN


CS224W: Machine Learning with Graphs
公式输入请参考: 在线Latex公式

复习

之前的知识点就不说了,这里把之前的Shallow Encoder的缺点列一下:

  1. 𝑶 ( ∣ 𝑽 ∣ ) 𝑶(|𝑽|) O(V) parameters are needed:
    No sharing of parameters between nodes参数个数与节点个数成正比,无法共享参数
    Every node has its own unique embedding
  2. Inherently “transductive”:
    Cannot generate embeddings for nodes that are not seen during training
  3. Do not incorporate node features:
    Many graphs have features that we can and should leverage

以上是之前学习的Shallow Encoder缺点,因此要克服这些缺点,就要引入深度学习:GNN
这里还复习了一把DL的基础知识,不写了

Basic of Deep Learning(略)

Deep Learning for Graphs

Setup

Assume we have a graph 𝑮 𝑮 G:
§ 𝑉 𝑉 V is the vertex set
§ 𝑨 𝑨 A is the adjacency matrix (assume binary)
§ 𝑿 ∈ R m × ∣ V ∣ 𝑿 ∈ ℝ^{m\times |V|} XRm×V is a matrix of node features
§ 𝑣 𝑣 v: a node in 𝑉 𝑉 V; 𝑁 ( 𝑣 ) 𝑁(𝑣) N(v) : the set of neighbors of 𝑣 𝑣 v.

Node features:
§ Social networks: User profile, User image
§ Biological networks: Gene expression profiles, gene functional information
§ When there is no node feature in the graph dataset:
Indicator vectors (one-hot encoding of a node)
Vector of constant 1: [1, 1, …, 1]

在进入正题之前,先看下直接用邻居矩阵拼接节点特征,然后直接丢DNN里面是什么情况:
在这里插入图片描述
缺点:
1.参数量大,和节点数量+特征维度成正比
2.DNN结构训练好后如果图结构变化,邻接矩阵大小也会变化,此时无法适配原DNN
3.DNN对输入顺序是敏感的,而图是无序的,相同图不同的顺序图的邻接矩阵不一样,DNN无法处理无序的结构
因此,借用CNN的思想,将邻居节点信息汇聚到当前节点,但是在CNN中,卷积核大小是固定的,而图的邻居无法用固定大小的卷积核来处理,因此用的是aggregation 思想。

Describe aggregation strategies

Key idea: Generate node embeddings based on local network neighborhoods
在这里插入图片描述
分解后每个节点都有自己计算图:
在这里插入图片描述
当然可以有深度的形式:
节点在每一层都有不同embedding
第0层的embedding就是节点的输入feature
第k层的embedding可以汇聚第k跳的邻居信息

Aggregation的基本方式:
在这里插入图片描述
上面的Aggregation是用的平均的方式(我感觉是求和后归一化,因为分母可以放到求和号前面),其中 B l , W l B_l,W_l Bl,Wl是用于线性变换的参数,每层参数不一样,但是每层是share的,也是模型需要训练的参数
可以写成矩阵的形式。
Let H ( l ) = [ h 1 ( l ) ⋯ h ∣ V ∣ ( l ) ] T H^{(l)}=[h_1^{(l)}\cdots h_{|V|}^{(l)}]^T H(l)=[h1(l)hV(l)]T,节点embedding的矩阵形式
邻居消息汇聚: ∑ u ∈ N v h u ( l ) = A v H ( l ) \sum_{u\in N_v}h_u^{(l)}=A_vH^{(l)} uNvhu(l)=AvH(l)邻接矩阵里面v节点这行
D是度矩阵,是一个对角矩阵: D v , v = D e g ( v ) = ∣ N ( v ) ∣ D_{v,v}=Deg(v)=|N(v)| Dv,v=Deg(v)=N(v)
则归一化可以表示为: D v , v − 1 = 1 ∣ N ( v ) ∣ D_{v,v}^{-1}=\cfrac{1}{|N(v)|} Dv,v1=N(v)1
因此上图中的邻居节点的汇聚的矩阵形式可以写为:
∑ u ∈ N ( v ) h u l ∣ N ( v ) ∣ → H ( l + 1 ) = D − 1 A H ( l ) \sum_{u\in N(v)}\cfrac{h_u^l}{|N(v)|}\rightarrow H^{(l+1)}=D^{-1}AH^{(l)} uN(v)N(v)hulH(l+1)=D1AH(l)
整个式子可以写成:
H ( l + 1 ) = σ ( A ~ H ( l ) W l T + H ( l ) B l T ) , A ~ = D − 1 A H^{(l+1)}=\sigma({\color{Red}\tilde AH^{(l)}W_l^T}+{\color{Blue}H^{(l)}B_l^T}),\tilde A=D^{-1}A H(l+1)=σ(A~H(l)WlT+H(l)BlT),A~=D1A
Red: neighborhood aggregation
Blue: self transformation
在这里插入图片描述

如何训练

有监督直接硬train,用交叉熵:
在这里插入图片描述
无监督学习直接使用图的结构信息(参考随机游走的损失函数)作为的损失函数的目标:
L = ∑ z u , z v C E ( y u , v , D E C ( z u , z v ) ) \mathcal{L}=\sum_{z_u,z_v}CE(y_{u,v},DEC(z_u,z_v)) L=zu,zvCE(yu,v,DEC(zu,zv))
Where y u , v = 1 y_{u,v}= 1 yu,v=1 when node 𝑢 and 𝑣 are similar
CE is the cross entropy
DEC is the decoder such as inner product

单层GNN

GNN Layer = Message + Aggregation
在这里插入图片描述
在这里插入图片描述
注意事项:
通常是用 h v l − 1 h_v^{l-1} hvl1来计算 h v l h_v^{l} hvl
生成消息要生成节点本身的消息,而且本身的消息和邻居的消息使用不同的参数,例如:
在这里插入图片描述
邻居的消息计算完毕后进行aggregation,然后再把邻居汇聚的结果(黄色虚线框)和节点本身的消息(红色虚线框)进行concat或者sum,例如:
在这里插入图片描述
感觉这里写的和后面有点不一样。。。

几种经典的图网模型的 Message + Aggregation的模式:
GCN
h v ( l ) = σ ( ∑ u ∈ N ( v ) W ( l ) h u ( l − 1 ) ∣ N ( v ) ∣ ) h_v^{(l)}=\sigma\left(\sum_{u\in N(v)}W^{(l)}\cfrac{h_u^{(l-1)}}{|N(v)|}\right) hv(l)=σuN(v)W(l)N(v)hu(l1)
在这里插入图片描述

GrahphSAGE
h v ( l ) = σ ( w ( l ) ⋅ C O N C A T ( h v ( l − 1 ) , A G G ( { h u ( l − 1 ) , ∀ u ∈ N ( v ) } ) ) ) h_v^{(l)}=\sigma\left(w^{(l)}\cdot CONCAT\left(h_v^{(l-1)},AGG\left(\{h_u^{(l-1)},\forall u\in N(v)\}\right)\right)\right) hv(l)=σ(w(l)CONCAT(hv(l1),AGG({hu(l1),uN(v)})))
在这里插入图片描述
GrahphSAGE的AGG有三种形式:Mean、Pool、LSTM。
GAT也讲了一下,不记了,后面还将了一些NN的基本知识(BN,抓爆,激活函数),不记了。

多层GNN

防止over-smoothing

当GNN层数过深,所有的节点的embedding都趋向一致。
这里要提到Receptive field概念,类似CNN中的感受野,例如:
在这里插入图片描述
由于节点的embedding基本是由Receptive field覆盖的节点决定的,Receptive field越大,重合的节点越多,两个节点的embedding就越相似,这个现象就是over-smoothing。
第一个解决方案:不要用太深的GNN,而是加强每层GNN的表达能力,例如将aggregation中简单的线性变换换成DNN。
第二个解决方案:加入不传递消息的GNN层,例如:
在这里插入图片描述
Pre-processing layers: Important when encoding node features is necessary.
E.g., when nodes represent images/text
Post-processing layers: Important when reasoning / transformation over node embeddings are needed.
E.g., graph classification, knowledge graphs

如果让GNN go deep

We can increase the impact of earlier layers on the final node embeddings, by adding shortcuts in GNN.
就是加残差连接
在这里插入图片描述
其作用类似变相制造了多个路径,相当于做了多个模型的混合,就好比你找一个人来做评估,得到结果比较单一,找一帮人来评估,得到的结果就比较robust。
在这里插入图片描述

例如GCN加skip connection变成:
h v ( l ) = σ ( ∑ u ∈ N ( v ) W ( l ) h u ( l − 1 ) ∣ N ( v ) ∣ + h v ( l − 1 ) ) h_v^{(l)}=\sigma\left(\sum_{u\in N(v)}W^{(l)}\cfrac{h_u^{(l-1)}}{|N(v)|}+h_v^{(l-1)}\right) hv(l)=σuN(v)W(l)N(v)hu(l1)+hv(l1)
还有一种玩法是把每一层的embedding结果都直接丢到最后一层,然后aggregation。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值