md_files/科研/草稿.md
2025-03-18 12:46:59 +08:00

2.5 KiB
Raw Blame History

以下是转换为 Markdown 格式的内容,公式已用 $$$ 包裹:


下面给出一个最简示例,只展示 节点 $A$ 在两层 GNN 里的更新计算过程,并说明它是如何从 2-hop 范围(即节点 $C, D$)间接获得信息。


图结构与初始特征

    A
    |
    B
   / \
  C   D
  • $A$$B$$B$$C$$B$D
  • 初始特征 (Layer-0)
    • A^{(0)} = [1.0,\ 0.5]
    • B^{(0)} = [0.8,\ 1.2]
    • C^{(0)} = [0.3,\ 0.7]
    • D^{(0)} = [1.5,\ 0.9]

第 1 层更新:$A^{(0)} \to A^{(1)}$

  1. 节点 A 的 1-hop 邻居:只有 $B$。
  2. 聚合(示例:自 + sum 邻居):
    
    z_A^{(1)} \;=\; A^{(0)} + B^{(0)}
               \;=\; [1.0,\,0.5] + [0.8,\,1.2]
               \;=\; [1.8,\,1.7].
    
  3. MLP 变换:用一个两层感知器或线性+激活函数映射 z_A^{(1)} 到 2 维输出:
    
    A^{(1)} \;=\; \mathrm{MLP}\bigl(z_A^{(1)}\bigr).
    
    • (数值略,可想象 \mathrm{MLP}([1.8,1.7]) \approx [1.9,1.1] 之类。)

结果A^{(1)} 包含了 A 的初始特征 + B 的初始特征信息。


第 2 层更新:$A^{(1)} \to A^{(2)}$

为了让 A 获得 2-hop 范围($C, D$)的信息,需要B 在第 1 层就吸收了 C, D 的特征,从而 B^{(1)} 蕴含 C, D 信息。然后 A 在第 2 层再从 B^{(1)} 聚合。

  1. 节点 B 在第 1 层(简要说明)

    • 邻居:\{A,C,D\}
    • 聚合:z_B^{(1)} = B^{(0)} + A^{(0)} + C^{(0)} + D^{(0)}
    • MLP 变换:$B^{(1)} = \mathrm{MLP}\bigl(z_B^{(1)}\bigr)$。
    • 此时 B^{(1)} 已经包含了 C, D 的信息。
  2. 节点 A 的第 2 层聚合

    • 邻居:$B$,但此时要用 B^{(1)}(它已吸收 C、D
    • 聚合
      
      z_A^{(2)} = A^{(1)} + B^{(1)}.
      
    • MLP 变换
      
      A^{(2)} = \mathrm{MLP}\bigl(z_A^{(2)}\bigr).
      

结果A^{(2)} 就包含了 2-hop 范围的信息,因为 B^{(1)} 中有 C, D 的贡献。


小结

  • 第 1 层A 直接获取 B 的初始特征B 同时获取 A、C、D 的初始特征。
  • 第 2 层A 获取 B 的新表示B^{(1)}),该表示已带有 C、D 信息 → A 间接获得 2-hop 信息。
  • 每层都进行“聚合 + MLP”同步更新,最终 A^{(2)} 就是节点 A 的 2 层 GNN 输出。

如果需要进一步调整或补充,请告诉我!