图机器学习基础知识——CS224W(06&07-GNN)

CS224W: Machine Learning with Graphs

Stanford / Winter 2021

06-GNN

Graph Convolutional Networks (GCN)

  • 几个要点

    • GCN的具体卷积方式就是Message Passing

    • 当一个节点收到来自邻居的消息时,先聚合(mean、sum…)然后通过一个权重矩阵进行线性变换得到下一层的初始节点表示(该参数层内对所有节点共享)

    • Equation Form(考虑了自身特征)

      h v ( l + 1 ) = σ ( W l ∑ u ∈ N ( v ) h u ( l ) ∣ N ( v ) ∣ + B l   h v ( l ) ) , ∀ l ∈ { 0 , … , L − 1 } \mathrm{h}_{v}^{(l+1)}=\sigma\left(\mathrm{W}_{l} \sum_{u \in \mathrm{N}(v)} \frac{\mathrm{h}_{u}^{(l)}}{|\mathrm{N}(v)|}+\mathrm{B}_{l} \mathrm{~h}_{v}^{(l)}\right), \forall l \in\{0, \ldots, L-1\} hv(l+1)=σ WluN(v)N(v)hu(l)+Bl hv(l) ,l{0,,L1}

      在这里插入图片描述

      在这里插入图片描述

    • Matrix Form(考虑了自身特征)

      H ( l + 1 ) = σ ( A ~ H ( l ) W l T + H ( l ) B l T ) , A ~ = D − 1 A H^{(l+1)}=\sigma\left(\tilde{A} H^{(l)} W_{l}^{\mathrm{T}}+H^{(l)} B_{l}^{\mathrm{T}}\right), \quad \tilde{A}=D^{-1} A H(l+1)=σ(A~H(l)WlT+H(l)BlT),A~=D1A

      在这里插入图片描述

      在这里插入图片描述

    • 不是所有的GNN都有对应的Matrix Form,一些复杂的结构就没有

    • 原始GCN可学习参数只有邻居信息的线性变换参数以及自身特征的线性变换参数,且这两个参数在层内是所有节点共享的

    • GCN几层就代表经过了多少个hop的传播,考虑到了k-hop以内的信息

  • Matrix Form Analysis

    • 首先以上述公式为例

      H ( l + 1 ) = σ ( A ~ H ( l ) W l T + H ( l ) B l T ) , A ~ = D − 1 A H^{(l+1)}=\sigma\left(\tilde{A} H^{(l)} W_{l}^{\mathrm{T}}+H^{(l)} B_{l}^{\mathrm{T}}\right), \quad \tilde{A}=D^{-1} A H(l+1)=σ(A~H(l)WlT+H(l)BlT),A~=D1A

      • A H ( l ) AH^{(l)} AH(l)表示邻居节点特征向量的聚合操作(没考虑节点自身特征向量),这个形式记住就好,只代表邻居节点的聚合操作。因为邻接矩阵的对角元素全为0,所以 A H ( l ) AH^{(l)} AH(l)只会计算邻居的聚合信息,而不会计算自身。若想要计算自身,则需要将对角元素变为非0即可,这是数学本质上的原理。

      • D − 1 A H ( l ) D^{-1}AH^{(l)} D1AH(l)则表示邻居节点信息聚合平均的过程(仍未考虑自身特征向量)

      • !!!对角矩阵与任意矩阵相乘可以看作是对任意矩阵每行元素的分别缩放!!!

        注意是对角矩阵乘任意矩阵,而不是任意矩阵乘对角矩阵

        对角矩阵的逆矩阵仍未对角矩阵,对角元素变成原来的倒数即可

        • 若对角矩阵的对角元素均一致,则可以表示为n倍的单元矩阵形式,与任意矩阵相乘后相当于对该矩阵的所有元素进行了缩放n倍

        • 若对角矩阵的对角元素不一致,假设为 d 1 , d 2 , d 3 , . . . , d n d_1, d_2, d_3, ..., d_n d1,d2,d3,...,dn,则与任意矩阵相乘后相当于分别对该矩阵的每一行元素进行了对应的缩放。例如,对第一行元素缩放 d 1 d_1 d1倍,第二行元素缩放 d 2 d_2 d2倍…(可将对角矩阵形状写出,按相乘规则运算就可以得到这个结论)

    • 以下式为例

      H l + 1 = σ ( A H l W l ) H^{l+1}=\sigma\left(A H^{l} W^{l}\right) Hl+1=σ(AHlWl)

      • 显然只考虑了邻居,未考虑自身的特征向量
    • 以下式为例

      H l + 1 = σ ( L H l W l ) , L = D − A H^{l+1}=\sigma\left(L H^{l} W^{l}\right), \quad L = D - A Hl+1=σ(LHlWl),L=DA

      • L H l = ( D − A ) H l = D H l − A H l LH^l = (D-A)H^l = DH^l - AH^l LHl=(DA)Hl=DHlAHl A H l AH^l AHl表示邻居节点聚合, D H l DH^l DHl表示节点自身的缩放

      • 另一个角度, L = D − A L = D - A L=DA代替了邻接矩阵 A A A,其实就是让 L L L的对角线元素非0,所以自身特征能够被计算进来

      • 所以该式考虑到了自身节点的特征向量

    • 以下式为例

      H l + 1 = σ ( D − 1 2 A ^ D − 1 2 H l W l ) , A ~ = A + I H^{l+1}=\sigma\left(D^{-\frac{1}{2}} \hat{A} D^{-\frac{1}{2}} H^{l} W^{l}\right), \quad \tilde{A} = A + I Hl+1=σ(D21A^D21HlWl),A~=A+I

      • A ~ = A + I \tilde{A} = A + I A~=A+I这个操作其实就是让邻接矩阵的对角元素变为非0元素,进而把自身特征也考虑进来

      • GCN主流实现方式,考虑了自身节点特征

  • GNN的Equation Form本质上其实就是针对每个节点而言的更新公式,而Matrix Form其实就是针对所有节点的更新公式,在一次矩阵运算中计算出所有节点的下一层特征向量。论文中不一定要将GNN架构表示为矩阵形式(当然最好表示成矩阵),可以直接用单节点的Equation Form更新公式(DGL API文档里也是用Equation Form)

07-GNN

Paper : Design Space for Graph Neural Networks

Paper : SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

Paper : Inductive Representation Learning on Large Graphs

主要讨论当下流行的GNN(主要是GCN)架构设计原则

  • Computation Graph (计算图)

    • 节点的邻居构成了一个计算图,代表节点消息聚合的过程

    在这里插入图片描述

A Single Layer of a GNN

GNN单层架构

  • GNN Layer = Message + Aggregation

  • Message Computation

    消息计算

    m u ( l ) = M S G ( l ) ( h u ( l − 1 ) ) \mathbf{m}_{u}^{(l)}=\mathrm{MSG}^{(l)}\left(\mathbf{h}_{u}^{(l-1)}\right) mu(l)=MSG(l)(hu(l1))

    m u ( l ) = W ( l ) h u ( l − 1 ) \mathbf{m}_{u}^{(l)}=\mathbf{W}^{(l)} \mathbf{h}_{u}^{(l-1)} mu(l)=W(l)hu(l1)

    在这里插入图片描述

    • 在Transformation部分,每个邻居的消息都分别乘权重,或消息聚合之后再乘权重
  • Message Aggregation

    消息聚合

    h v ( l ) = A G G ( l ) ( { m u ( l ) , u ∈ N ( v ) } ) \mathbf{h}_{v}^{(l)}=\mathrm{AGG}^{(l)}\left(\left\{\mathbf{m}_{u}^{(l)}, u \in N(v)\right\}\right) hv(l)=AGG(l)({mu(l),uN(v)})

    h v ( l ) = Sum ⁡ ( { m u ( l ) , u ∈ N ( v ) } ) \mathbf{h}_{v}^{(l)}=\operatorname{Sum}\left(\left\{\mathbf{m}_{u}^{(l)}, u \in N(v)\right\}\right) hv(l)=Sum({mu(l),uN(v)})

    在这里插入图片描述

    • 此处未考虑节点本身特征向量,来自于节点 v v v本身的信息可能丢失

      • Solution:在计算 h v ( l ) h_v^{(l)} hv(l)时包括 h v ( l − 1 ) h_v^{(l-1)} hv(l1)

        m u ( l ) = W ( l ) h u ( l − 1 ) \mathbf{m}_{u}^{(l)}=\mathbf{W}^{(l)} \mathbf{h}_{u}^{(l-1)} mu(l)=W(l)hu(l1)

        m v ( l ) = B ( l ) h v ( l − 1 ) \mathbf{m}_{v}^{(l)}=\mathbf{B}^{(l)} \mathbf{h}_{v}^{(l-1)} mv(l)=B(l)hv(l1)

        h v ( l ) = CONCAT ⁡ ( AGG ⁡ ( { m u ( l ) , u ∈ N ( v ) } ) m v ( l ) ) \mathbf{h}_{v}^{(l)}=\operatorname{CONCAT}\left(\operatorname{AGG}\left(\left\{\mathbf{m}_{u}^{(l)}, u \in N(v)\right\}\right) \mathbf{m}_{v}^{(l)}\right) hv(l)=CONCAT(AGG({mu(l),uN(v)})mv(l))

        在这里插入图片描述

        • 分别将邻居消息聚合与自身节点特征向量进行Transformation(这里为线性变换),而后通过Concat或Sum聚合
    • 聚合操作有 S u m ( ⋅ ) , M e a n ( ⋅ ) , M a x ( ⋅ ) Sum(·), Mean(·), Max(·) Sum(),Mean(),Max()

    • 可以在Message或者Aggregation之后加上激活函数增强非线性表达能力

    • GCN聚合邻居节点的操作是Order-invariant(与次序无关),聚合操作不能依赖于邻居节点的某种特定的计算顺序,也就是说无论以哪种顺序去聚合邻居节点的信息,得到的结果应该是一致的

Classical GCN
  • Message + Aggregation

    h v ( l ) = σ ( ∑ u ∈ N ( v ) W ( l ) h u ( l − 1 ) ∣ N ( v ) ∣ ) \mathbf{h}_{v}^{(l)}=\sigma\left(\sum_{u \in N(v)} \mathbf{W}^{(l)} \frac{\mathbf{h}_{u}^{(l-1)}}{|N(v)|}\right) hv(l)=σ uN(v)W(l)N(v)hu(l1)

    h v ( l ) = σ ( Sum ⁡ ( { m u ( l ) , u ∈ N ( v ) } ) ) \mathbf{h}_{v}^{(l)}=\sigma\left(\operatorname{Sum}\left(\left\{\mathbf{m}_{u}^{(l)}, u \in N(v)\right\}\right)\right) hv(l)=σ(Sum({mu(l),uN(v)}))
    使用节点的度进行Normalize(和GCN原文有些许不同)

    • 原始GCN是没有考虑到自身节点特征的,这一点在DGL库里也能得到验证
GraphSAGE
  • Message + Aggregation

    h v ( l ) = σ ( w ( l ) ⋅ CONCAT ⁡ ( h v ( l − 1 ) , AGG ⁡ ( { h u ( l − 1 ) , ∀ u ∈ N ( v ) } ) ) ) \mathbf{h}_{v}^{(l)}=\sigma\left(\mathbf{w}^{(l)} \cdot \operatorname{CONCAT}\left(\mathbf{h}_{v}^{(l-1)}, \operatorname{AGG}\left(\left\{\mathbf{h}_{u}^{(l-1)}, \forall u \in N(v)\right\}\right)\right)\right) hv(l)=σ(w(l)CONCAT(hv(l1),AGG({hu(l1),uN(v)})))

  • Aggregation Strategy

    • Mean

       AGG  = ∑ u ∈ N ( v ) h u ( l − 1 ) ∣ N ( v ) ∣ \text { AGG }=\sum_{u \in N(v)} \frac{\mathbf{h}_{u}^{(l-1)}}{|N(v)|}  AGG =uN(v)N(v)hu(l1)

    • Pool

      A G G = Mean ⁡ ( { MLP ⁡ ( h u ( l − 1 ) ) , ∀ u ∈ N ( v ) } ) \mathrm{AGG}=\operatorname{Mean}\left(\left\{\operatorname{MLP}\left(\mathbf{h}_{u}^{(l-1)}\right), \forall u \in N(v)\right\}\right) AGG=Mean({MLP(hu(l1)),uN(v)})
      Mean(·) or Max(·)

    • LSTM

       AGG  = LSTM ⁡ ( [ h u ( l − 1 ) , ∀ u ∈ π ( N ( v ) ) ] ) \text { AGG }=\operatorname{LSTM}\left(\left[\mathbf{h}_{u}^{(l-1)}, \forall u \in \pi(N(v))\right]\right)  AGG =LSTM([hu(l1),uπ(N(v))])

      • LSTM聚合存在一个问题,邻居聚合操作要求是order-invariant,但Sequence Model明显是与输入顺序有关的模型。这里作者将输入次序进行permute再输入LSTM,从而不至于让LSTM捕捉到特定的输入顺序
  • L2 Normalization

    • 每一层都对节点特征向量应用L2 Norm

      h v ( l ) ← h v ( l ) ∥ h v ( l ) ∥ 2 ∀ v ∈ V \mathbf{h}_{v}^{(l)} \leftarrow \frac{\mathbf{h}_{v}^{(l)}}{\left\|\mathbf{h}_{v}^{(l)}\right\|_{2}} \forall v \in V hv(l) hv(l) 2hv(l)vV

    • 若没有L2 Norm,特征向量的L2-norm scale不同

    • 一些场景下(NOT ALWAYS),Norm能提高一定效果

GAT
  • Message + Aggregation

    h v ( l ) = σ ( ∑ u ∈ N ( v ) α v u W ( l ) h u ( l − 1 ) ) \mathbf{h}_{v}^{(l)}=\sigma\left(\sum_{u \in N(v)} \alpha_{v u} \mathbf{W}^{(l)} \mathbf{h}_{u}^{(l-1)}\right) hv(l)=σ uN(v)αvuW(l)hu(l1)

  • Attention Mechanism

    e v u = a ( W ( l ) h u ( l − 1 ) , W ( l ) h v ( l − 1 ) ) e_{v u}=a\left(\mathbf{W}^{(l)} \mathbf{h}_{u}^{(l-1)}, \mathbf{W}^{(l)} \boldsymbol{h}_{v}^{(l-1)}\right) evu=a(W(l)hu(l1),W(l)hv(l1))

    α v u = exp ⁡ ( e v u ) ∑ k ∈ N ( v ) exp ⁡ ( e v k ) \alpha_{v u}=\frac{\exp \left(e_{v u}\right)}{\sum_{k \in N(v)} \exp \left(e_{v k}\right)} αvu=kN(v)exp(evk)exp(evu)
    e v u e_{vu} evu indicates the importance of u u u’s message to node v v v (注意attention可以是不对称的,即 e v u e_{vu} evu e u v e_{uv} euv可以是不一样的)

    • attention可以是不对称的,比如节点a->b与节点b->a的attention可以是不一样的

    • attention的具体操作 a a a可以是多种,下面为例子

      e A B = a ( W ( l ) h A ( l − 1 ) , W ( l ) h B ( l − 1 ) ) =  Linear  (  Concat  ( W ( l ) h A ( l − 1 ) , W ( l ) h B ( l − 1 ) ) ) \begin{aligned} &e_{A B}=a\left(\mathbf{W}^{(l)} \mathbf{h}_{A}^{(l-1)}, \mathbf{W}^{(l)} \mathbf{h}_{B}^{(l-1)}\right) \\ &=\text { Linear }\left(\text { Concat }\left(\mathbf{W}^{(l)} \mathbf{h}_{A}^{(l-1)}, \mathbf{W}^{(l)} \mathbf{h}_{B}^{(l-1)}\right)\right) \end{aligned} eAB=a(W(l)hA(l1),W(l)hB(l1))= Linear ( Concat (W(l)hA(l1),W(l)hB(l1)))

      在这里插入图片描述

  • Multi-head Attention

    • Stabilize the learning process of attention mechanism

    • Create multiple attention scores (each replica with a different set of parameters)

      h v ( l ) [ 1 ] = σ ( ∑ u ∈ N ( v ) α v u 1 W ( l ) h u ( l − 1 ) ) h v ( l ) [ 2 ] = σ ( ∑ u ∈ N ( v ) α v u 2 W ( l ) h u ( l − 1 ) ) h v ( l ) [ 3 ] = σ ( ∑ u ∈ N ( v ) α v u 3 W ( l ) h u ( l − 1 ) ) \begin{aligned} \mathbf{h}_{v}^{(l)}[1] &=\sigma\left(\sum_{u \in N(v)} \alpha_{v u}^{1} \mathbf{W}^{(l)} \mathbf{h}_{u}^{(l-1)}\right) \\ \mathbf{h}_{v}^{(l)}[2] &=\sigma\left(\sum_{u \in N(v)} \alpha_{v u}^{2} \mathbf{W}^{(l)} \mathbf{h}_{u}^{(l-1)}\right) \\ \mathbf{h}_{v}^{(l)}[3] &=\sigma\left(\sum_{u \in N(v)} \alpha_{v u}^{3} \mathbf{W}^{(l)} \mathbf{h}_{u}^{(l-1)}\right) \end{aligned} hv(l)[1]hv(l)[2]hv(l)[3]=σ uN(v)αvu1W(l)hu(l1) =σ uN(v)αvu2W(l)hu(l1) =σ uN(v)αvu3W(l)hu(l1)

    • Outputs are aggregated by concatenation or summation

      h v ( l ) = A G G ( h v ( l ) [ 1 ] , h v ( l ) [ 2 ] , h v ( l ) [ 3 ] ) \mathbf{h}_{v}^{(l)}=\mathrm{AGG}\left(\mathbf{h}_{v}^{(l)}[1], \mathbf{h}_{v}^{(l)}[2], \mathbf{h}_{v}^{(l)}[3]\right) hv(l)=AGG(hv(l)[1],hv(l)[2],hv(l)[3])

    • multi-head attention计算两个节点的attention score时,每个Head可以使用不同的函数

Design Space of Graph Neural Networks

  • A suggested GNN Layer

    在这里插入图片描述

  • Batch Normalization

    在这里插入图片描述

  • Dropout

    在这里插入图片描述

    • Dropout加在Transformation时的权重上
  • Activation

    在这里插入图片描述

在这里插入图片描述

Stacking Layers of a GNN

Stacking Layers of a GNN

The Over-smoothing Problem (过度平滑)

The Issue of stacking many GNN layers: GNN suffers from the over-smoothing problem

  • The over-smoothing problem: all the node embeddings converge to the same value (所有节点的embeddings vector都收敛到相同的或非常相似的值,从而很难根据embedding vector进行分类)

  • Receptive Field of a GNN (GNN的感受野): the set of nodes that determine the embedding of a node of interest (决定一个节点的embedding vector的节点集)

    • In a K-layer GNN, each node has a receptive field of K-hop neighborhood (一个K层的GNN,每个节点的感受野是K-hop以内的邻居节点)

      在这里插入图片描述

      • 可以看到,3层GNN的感受野已经几乎覆盖了所有节点
    • 下图显示了两个节点的共同感受野 (Receptive field overlap for two nodes)

      在这里插入图片描述

      • The shared neighbors quickly grows when we increase the number of hops (num of GNN layers)
    • We knew the embedding of a node is determined by its receptive field. If two nodes have highly-overlapped receptive fields, then their embeddings are highly similar (因为一个节点的embedding vector由其感受野内的节点所决定,如果两个节点的感受野重合度特别高,那么它们的embedding vector就会非常相似)

  • Stack many GNN layers ➡ nodes will have highly-overlapped receptive fields ➡ node embeddings will be highly similar ➡ suffer from the over-smoothing problem

Expressive Power for Shallow GNNs

让浅层GNN表征能力更强

在这里插入图片描述

  • Solution-1: Increase the expressive power within each GNN layer

    • 之前的实现,对于聚合消息的变换只用了单层线性变换

    • 可以使用更深层的DNN作变换,例如3-layer MLP,加强表达能力

  • Solution-2: Add layers that do not pass messages

    • 整个GNN架构不一定仅仅包含GCN Layer

    • we can add MLP layers (applied to each node) before and after GNN layers, as pre-process layers and post-process layers (可以在GNN Layer之前或之后加上MLP Layers(应用于每个节点),作为预处理层与后处理层)

      • Pre-processing layers: 当节点代表图片或文本时,先用DNN将其变换为向量是必须的操作

      • Post-processing layers: 当推理或变换(reasoning/transformation)节点embedding vector时很重要

    • 一般来说,3层就可以了

    在这里插入图片描述

Design GNN Layer Connectivity

Paper : Representation Learning on Graphs with Jumping Knowledge Networks

Paper : Residual Networks Behave Like Ensembles of Relatively Shallow Networks

设计GNN层间连接模式

  • Solution-1.1: Add skip connections in GNNs

    • Observation from over-smoothing: Node embeddings in earlier GNN layers can sometimes better differentiate nodes (一些浅层的GNN层可以更好的区分不同的节点)

    • 参考ResNet,加入Shortcut

      在这里插入图片描述

    • Why do skip connections work?

      • Skip-connection实际上创建了一种混合模型 (a mixture of models)

      • N N N个skip-connection可以产生 2 N 2^N 2N个可能的前向传播路径

      • 每条路径最多包含 N N N个子模块

      • 实际上,自动产生了浅层与深层GNN的混合模型 (a mixture of shallow GNNs and deep GNNs)

      h v ( l ) = σ ( ∑ u ∈ N ( v ) W ( l ) h u ( l − 1 ) ∣ N ( v ) ∣ + h v ( l − 1 ) ) \mathbf{h}_{v}^{(l)}=\sigma\left(\sum_{u \in N(v)} \mathbf{W}^{(l)} \frac{\mathbf{h}_{u}^{(l-1)}}{|N(v)|}+\mathbf{h}_{v}^{(l-1)}\right) hv(l)=σ uN(v)W(l)N(v)hu(l1)+hv(l1)

      在这里插入图片描述

      在这里插入图片描述

  • Solution-1.2: Other options of skip connections in GNNs

    • Directly skip to the last layer: The final layer directly aggregates from the all the node embeddings in the previous layers

      在这里插入图片描述

  • 32
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值