深度学习笔记(十一)图神经网络

图结构数据

图结构数据是一类高度结构化、信息富集的数据。但传统的CNN和RNN并不能很好地利用这类数据中的信息。

图结构的基本元素

G = ( A , X ) \mathcal G=(\mathbf A,\mathbf X) G=(A,X)。其中邻接矩阵 A ∈ R N × N \mathbf A\in \mathbb R^{N\times N} ARN×N,其中N为节点数;特征矩阵 X ∈ R N × F \mathbf X\in \mathbb R^{N\times F} XRN×F,其中F为特征数。

运用图数据的基本思想

  1. 节点的社区构成计算图
  2. 信息沿边在节点间传播
  3. 生成节点嵌入信息(相当于特征提取)

给出计算图

  • 你可以定义一个节点的“社区”是什么,比如一跳邻居、两跳邻居
  • 每个节点都有一张计算图

信息传播

  • 使用神经网络将邻居的信息传播给中心节点
  • 目标是将与目标点有关的全部信息集成到目标点上

节点嵌入

  • 每一层都有一个输出
  • 理论上可以是任意深度的
  • 节点嵌入基本公式
    h v 0 = x v h v k = σ ( W k ∑ u ∈ N ( v ) h u k − 1 ∣ N ( v ) ∣ + B k h v k − 1 ) z v = h v K \mathbf h^0_v=\mathbf x_v\\ \mathbf h^k_v=\sigma\big(\mathbf W_k\sum_{u\in N(v)}\frac{\mathbf h^{k-1}_u}{\vert N(v)\vert}+\mathbf B_k\mathbf h^{k-1}_v\big)\\ \mathbf z_v=\mathbf h_v^K hv0=xvhvk=σ(WkuN(v)N(v)huk1+Bkhvk1)zv=hvK
    公式解读:第k层的嵌入是k-1层的邻域均值乘以系数 W k \mathbf W_k Wk加前一层的点嵌入乘系数 B k \mathbf B_k Bk,再经过非线性层 σ \sigma σ(如ReLU);最终输出 z v \mathbf z_v zv为第 K K K层的 h v K \mathbf h_v^K hvK

GNN

无监督训练

  • 点嵌入训练:指导思想是相似点的嵌入应当是相似的。
  • 对相似点的定义:基于随机游走、图分解、相邻点

有监督训练

Loss公式:
L = ∑ v ∈ V y v log ⁡ ( σ ( z v T θ ) ) + ( 1 − y v ) log ⁡ ( 1 − σ ( z v T θ ) ) \mathcal L=\sum_{v\in V}y_v\log(\sigma(\mathbf z_v^T\theta))+(1-y_v)\log(1-\sigma(\mathbf z_v^T\theta)) L=vVyvlog(σ(zvTθ))+(1yv)log(1σ(zvTθ))
其中, y v y_v yv是节点的label; z v \mathbf z_v zv是点嵌入的输出, θ \theta θ是分类权重

GCN

灵感:CNN对每个邻像素有不同的权重,图中能对每个邻居有不同的权重吗?
输入与GNN相同,输出比GNN多出一个图层面的输出

GCN更新规则

h i l + 1 = σ ( W 0 l h i l + ∑ j ∈ N ( i ) 1 c i j W 1 l h j l ) H l + 1 = f ( H l , A ) \mathbf h_i^{l+1}=\sigma(\mathbf W_0^l\mathbf h_i^l+\sum_{j\in N(i)}\frac1{c_{ij}}W_1^lh_j^l)\\ H^{l+1}=f(H^l,A) hil+1=σ(W0lhil+jN(i)cij1W1lhjl)Hl+1=f(Hl,A)
其中 c i j c_{ij} cij是正态常数,可训练也可固定; H l H^l Hl是整个图在第l次更新后的嵌入。

参数归一化

如果参数矩阵A是未经归一化的,将特征向量与之相乘的操作会彻底改变特征向量的标度。因此需要将参数矩阵A归一化( D − 1 A D^{-1}A D1A)。一般有三种归一化:归一化到列和为1、归一化到相邻节点特征的加权平均值、对称归一化( D − 1 2 A D − 1 2 D^{-\frac12}AD^{-\frac12} D21AD21

归一化传播规则

f ( H l , A ) = σ ( D ^ − 1 2 A ^ D ^ − 1 2 H l W l ) f(H^l,A)=\sigma\big(\hat D^{-\frac12}\hat A\hat D^{-\frac12}H^lW^l\big) f(Hl,A)=σ(D^21A^D^21HlWl)
其中 A ^ = A + I \hat A=A+I A^=A+I D ^ \hat D D^ A ^ \hat A A^的节点度对角矩阵(这是个啥?我也不知道)
优点:

  • 全局权值共享
  • 排列不变性
  • 线性复杂度

缺点:

  • 仅间接支持边特征
  • 深度网络需要门控机构(gating mechanism)和跳层连接

GraphSAGE

图采样与集成
之前采用的聚集规则:
h v k = σ ( W k ∑ u ∈ N ( v ) h u k − 1 ∣ N ( v ) ∣ + B k h v k − 1 ) \mathbf h^k_v=\sigma\big(\mathbf W_k\sum_{u\in N(v)}\frac{\mathbf h^{k-1}_u}{\vert N(v)\vert}+\mathbf B_k\mathbf h^{k-1}_v\big) hvk=σ(WkuN(v)N(v)huk1+Bkhvk1)
该工作提出的新聚集规则:
h v k = σ ( W k AGG ( { h u k − 1 , ∀ u ∈ N ( v ) } ) , B k h v k − 1 ) \mathbf h_v^k=\sigma(\mathbf W_k\text{AGG}(\{\mathbf h_u^{k-1},\forall u\in N(v)\}),\mathbf B_kh_v^{k-1}) hvk=σ(WkAGG({huk1,uN(v)}),Bkhvk1)
其中AGG可以是任意可微的、能将一组向量映射到一个向量的函数。如Mean、Pool、LSTM等操作。

Gated GNN

想让图神经网络可以更深层从而整合更远处的信息,就会面临过拟合和梯度消失的挑战。从RNN借鉴了两点:

  1. 跨层参数共享
  2. 循环状态更新
    更新公式:
    m v k = W ∑ u ∈ N ( v ) h u k − 1 h v k = GRU ( h v k − 1 , m v k ) \mathbf m_v^k=\mathbf W\sum_{u\in N(v)}\mathbf h^{k-1}_u\\ \mathbf h_v^k=\text{GRU}(\mathbf h_v^{k-1},\mathbf m_v^k) mvk=WuN(v)huk1hvk=GRU(hvk1,mvk)
    经此更改,模型能支持超过二十层的深层神经网络,从而能将关于图的全局信息传播给所有节点,这对于图表示非常有用

GAT

具体内容参看Graph Attention Network

核心公式

α 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 ] ) ) Average: h ⃗ i ′ = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h j ) Concat: h ⃗ i ′ = ∥ k = 1 K σ ( ∑ j ∈ N i α i j k W k h ⃗ j ) \alpha_{ij}=\frac{\exp({\text{LeakyReLU}(\vec a^T[\mathbf W_{\vec h_i}\Vert\mathbf W_{\vec h_j}])})}{\sum_{k\in \mathcal N(i)}\exp({\text{LeakyReLU}(\vec a^T[\mathbf W_{\vec h_i}\Vert\mathbf W_{\vec h_k}])})}\\ \text{Average:}\vec h'_i=\sigma\big(\frac1K\sum_{k=1}^K\sum_{j\in\mathcal N_i}\alpha_{ij}^k\mathbf W^kh_j\big)\\ \text{Concat:}\vec h'_i=\overset{K}{\underset{k=1}\parallel}\sigma(\sum_{j\in \mathcal N_i}\alpha^k_{ij}\mathbf W^k\vec h_j) αij=kN(i)exp(LeakyReLU(a T[Wh iWh k]))exp(LeakyReLU(a T[Wh iWh j]))Average:h i=σ(K1k=1KjNiαijkWkhj)Concat:h i=k=1Kσ(jNiαijkWkh j)

优缺点

优点:

  • 在使用点乘Attention时不需要储存中间基于边的激活向量(是个啥我也不知道)
  • 在边嵌入上比GCN慢但比GNN快

缺点:

  • 在边嵌入上的表达能力不及GNN
  • 更难优化

子图嵌入

两类方法:

  1. 将子图中所有节点嵌入的加和(或加权和)视为该子图的嵌入
  2. 创造一个虚节点代表该子图

GNN的应用

点分类、图分类、边预测
对于以上三类任务,给定模型输出 Z \mathbf Z Z
点分类公式: s o f t m a x ( z n ) softmax(\mathbf z_n) softmax(zn)
图分类公式: s o f t m a x ( ∑ n z n ) softmax(\sum_n\mathbf z_n) softmax(nzn)
边预测公式: p ( A i j ) = σ ( z i T z j ) p(A_{ij})=\sigma(\mathbf z_i^T\mathbf z_j) p(Aij)=σ(ziTzj)

半监督训练

L = − ∑ l ∈ Y l ∑ f = 1 Y l f ln ⁡ Z l f \mathcal L=-\sum_{l\in \mathcal Y_l}\sum_{f=1}Y_{lf}\ln Z_{lf} L=lYlf=1YlflnZlf
More about GNN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值