md_files/科研/草稿.md

8.4 KiB
Raw Blame History

在这部分(论文 2.1 节 “Graph Attentional Layer”作者提出了图注意力网络GAT中最核心的运算**图注意力层**。它的基本思想是: 1. **线性变换**:先对每个节点的特征 $\mathbf{h}_i$ 乘上一个可学习的权重矩阵 $W$,得到变换后的特征 $W \mathbf{h}_i$。 2. **自注意力机制**:通过一个可学习的函数 $a$,对节点 $i$ 和其邻居节点 $j$ 的特征进行计算,得到注意力系数 $e_{ij}$。这里会对邻居进行遮蔽masked attention即只计算图中有边连接的节点对。 3. **归一化**:将注意力系数 $e_{ij}$ 通过 softmax 进行归一化,得到 $\alpha_{ij}$,表示节点 $j$ 对节点 $i$ 的重要性权重。 4. **聚合**:最后利用注意力系数加权邻居节点的特征向量,并经过激活函数得到新的节点表示 $\mathbf{h}_i'$。 5. **多头注意力**为增强表示能力可并行地执行多个独立的注意力头multi-head attention再将它们的结果进行拼接或在最后一层进行平均从而得到最终的节点表示。 该部分给出的公式主要包括注意力系数的计算、softmax 归一化、多头注意力的聚合方式等,下面逐一用 Markdown 数学公式的形式列出。
## 该部分主要内容概述 在这部分(论文 2.1 节 “Graph Attentional Layer”作者提出了图注意力网络GAT中最核心的运算图注意力层。它的基本思想是: 1. 线性变换:先对每个节点的特征 \mathbf{h}_i 乘上一个可学习的权重矩阵 $W$,得到变换后的特征 $W \mathbf{h}i$。 2. 自注意力机制:通过一个可学习的函数 $a$,对节点 i 和其邻居节点 j 的特征进行计算,得到注意力系数 $e{ij}$。这里会对邻居进行遮蔽masked attention即只计算图中有边连接的节点对。 3. 归一化:将注意力系数 e_{ij} 通过 softmax 进行归一化,得到 $\alpha_{ij}$,表示节点 j 对节点 i 的重要性权重。 4. 聚合:最后利用注意力系数加权邻居节点的特征向量,并经过激活函数得到新的节点表示 $\mathbf{h}_i'$。 5. 多头注意力为增强表示能力可并行地执行多个独立的注意力头multi-head attention再将它们的结果进行拼接或在最后一层进行平均从而得到最终的节点表示。 该部分给出的公式主要包括注意力系数的计算、softmax 归一化、多头注意力的聚合方式等,下面逐一用 Markdown 数学公式的形式列出。

公式列表Markdown 格式)

注意:以下公式与论文中编号对应(如 (1)、(2)、(3)、(4)、(5)、(6) 等)。

  1. 注意力系数(未归一化)

e_{ij} = a\bigl(W\mathbf{h}_i,\; W\mathbf{h}_j\bigr)
  1. 注意力系数的 softmax 归一化

\alpha_{ij} = \text{softmax}_j\bigl(e_{ij}\bigr)
= \frac{\exp\bigl(e_{ij}\bigr)}{\sum_{k \in \mathcal{N}_i} \exp\bigl(e_{ik}\bigr)}

$\alpha_{ij}$表示节点 i 对节点 j 的注意力权重

  1. 具体的注意力计算形式(以单层前馈网络 + LeakyReLU 为例)

\alpha_{ij}
= \frac{\exp\Bigl(\text{LeakyReLU}\bigl(\mathbf{a}^\top \bigl[\;W\mathbf{h}_i \,\|\, W\mathbf{h}_j\bigr]\bigr)\Bigr)}
{\sum_{k\in \mathcal{N}_i} \exp\Bigl(\text{LeakyReLU}\bigl(\mathbf{a}^\top \bigl[\;W\mathbf{h}_i \,\|\, W\mathbf{h}_k\bigr]\bigr)\Bigr)}

其中,\mathbf{a} 为可学习的参数向量,\| 表示向量拼接concatenation

  1. 单头注意力聚合(得到新的节点特征)

\mathbf{h}_i' = \sigma\Bigl(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \,W \mathbf{h}_j\Bigr)

其中,\sigma 表示非线性激活函数(如 ELU、ReLU 等),\mathcal{N}_i 表示节点 i 的邻居节点集合(可包含 i 自身)。

  1. 多头注意力(隐藏层时拼接)
    如果有 K 个独立的注意力头,每个头输出 $\mathbf{h}_i'^{(k)}$,则拼接后的输出为:

\mathbf{h}_i' =
\big\Vert_{k=1}^K
\sigma\Bigl(\sum_{j \in \mathcal{N}_i} \alpha_{ij}^{(k)} \, W^{(k)} \mathbf{h}_j\Bigr)

其中,\big\Vert 表示向量拼接操作,$\alpha_{ij}^{(k)}$、W^{(k)} 分别为第 k 个注意力头对应的注意力系数和线性变换。

  1. 多头注意力(输出层时平均)
    在最终的输出层(例如分类层)通常会将多个头的结果做平均,而不是拼接:

\mathbf{h}_i' =
\sigma\Bigl(
\frac{1}{K} \sum_{k=1}^K \sum_{j \in \mathcal{N}_i}
\alpha_{ij}^{(k)} \, W^{(k)} \mathbf{h}_j
\Bigr)

以上即是论文中 2.1 节Graph Attentional Layer出现的主要公式及其简要说明。

2. GAT 的聚合方式

  • GAT 使用了一种自适应的、可学习的注意力机制来聚合节点及其邻居的信息。

  • 具体来说GAT 的聚合公式为:

    
    h_i^{(l+1)} = \sigma\left(\sum_{j \in \mathcal{N}(i) \cup \{i\}} \alpha_{ij} W h_j^{(l)}\right)
    

    其中:

    • \alpha_{ij} 是节点 i 和节点 j 之间的注意力系数,通过以下方式计算:
      
      \alpha_{ij} = \frac{\exp(\text{LeakyReLU}(a^T [W h_i \| W h_j]))}{\sum_{k \in \mathcal{N}(i) \cup \{i\}} \exp(\text{LeakyReLU}(a^T [W h_i \| W h_k]))}
      
    • a 是一个可学习的注意力向量。
    • \| 表示特征拼接操作。
    • W 是可学习的权重矩阵。
    • \sigma 是非线性激活函数。
  • 特点

    • GAT 的聚合权重是动态的,通过注意力机制学习得到。
    • 权重是非对称的,且可以捕捉节点之间的复杂关系。
    • 相当于对节点及其邻居进行了一种加权信息传递,权重由数据驱动。

3. GCN 和 GAT 的对比

特性 GCN GAT
聚合方式 固定的加权平均 自适应的注意力加权
权重是否可学习 否(权重由节点度数决定) 是(通过注意力机制学习)
权重是否对称
表达能力 较弱(固定的聚合方式) 较强(动态的聚合方式)
计算复杂度 较低 较高(需要计算注意力系数)
适用场景 简单的图结构任务 复杂的图结构任务

4. 直观理解

  • GCN

    • 类似于对邻居节点进行“民主投票”,每个邻居的权重是固定的(由度数决定)。
    • 适合处理节点度数分布均匀、关系相对简单的图。
  • GAT

    • 类似于对邻居节点进行“加权投票”,每个邻居的权重是动态学习的。
    • 适合处理节点度数分布不均匀、关系复杂的图。

5. 总结

  • GCN 使用的是固定的、归一化的加权平均,权重由节点度数决定。
  • GAT 使用的是自适应的、可学习的注意力权重,权重通过数据驱动的方式学习得到。
  • GAT 的表达能力更强但计算复杂度也更高GCN 更简单高效,但表达能力相对较弱。

希望这个解释能帮助你更好地理解 GCN 和 GAT 的区别!如果还有疑问,欢迎继续讨论!

3blue1brown 的讲解试图让我们从几何和线性映射的角度来理解点乘,而不仅仅是将它看作一系列数的乘加运算。下面详细说明这一点。

假设有两个向量


\mathbf{v} = \begin{bmatrix} v_1 \\ v_2 \end{bmatrix}, \quad \mathbf{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix}.

传统上,点乘定义为


\mathbf{v} \cdot \mathbf{w} = v_1w_1 + v_2w_2.

3blue1brown 的观点是:

  • 将一个向量视为线性变换
    我们可以把 \mathbf{v} 当作一个线性映射,它把任何向量 \mathbf{w} 映射为一个实数,即

    
    T_{\mathbf{v}}(\mathbf{w}) = \mathbf{v}\cdot \mathbf{w}.
    

    这个映射 T_{\mathbf{v}} 是一个线性泛函,它具有线性性:

    
    T_{\mathbf{v}}(a\mathbf{w}_1 + b\mathbf{w}_2) = aT_{\mathbf{v}}(\mathbf{w}_1) + bT_{\mathbf{v}}(\mathbf{w}_2).
    

    换句话说,\mathbf{v} 变成了一个“工具”,通过这个工具我们可以“测量”任一向量在 \mathbf{v} 方向上的分量大小。

  • 几何直观
    如果我们记 \theta\mathbf{v}\mathbf{w} 之间的夹角,则点乘也可以写作

    
    \mathbf{v} \cdot \mathbf{w} = \|\mathbf{v}\|\|\mathbf{w}\|\cos\theta.
    

    这里,\|\mathbf{w}\|\cos\theta 就是 \mathbf{w}\mathbf{v} 方向上的投影长度。当我们用 \|\mathbf{v}\| 乘上这个投影长度时,就得到了一个度量,这个度量告诉我们 \mathbf{w}\mathbf{v} 方向上“有多大”的贡献。

  • 矩阵乘法的视角
    我们也可以把点乘看作行向量和列向量的矩阵乘法:

    
    \mathbf{v}\cdot \mathbf{w} = \begin{bmatrix} v_1 & v_2 \end{bmatrix}\begin{bmatrix} w_1 \\ w_2 \end{bmatrix}.
    

    在这个表达式中,\begin{bmatrix} v_1 & v_2 \end{bmatrix} 就相当于一个将二维向量映射到实数的线性变换,也正是我们上面定义的 $T_{\mathbf{v}}(\cdot)$。

总结来说3blue1brown 强调的点乘本质是:

  • 把固定的向量 \mathbf{v} 转换成一个线性映射(或线性泛函),这个映射作用在任意向量 \mathbf{w} 上,返回一个标量;
  • 这个标量不仅包含了 \mathbf{w}\mathbf{v} 方向上的“投影”信息,而且反映了两者之间的对齐程度(通过余弦函数体现);
  • 因此,点乘不仅仅是数值运算,而是一个把向量转换成测量工具,从而揭示向量间角度和方向关系的过程。