全连接的图卷积网络(GCN)和self-attention这些机制的区别与联系

本文深入探讨了全连接图卷积网络(GCN)和Self-attention机制的联系与区别,指出两者皆属消息传递(MessagePassing)框架。GCN通过节点邻居传播信息,而Self-attention则基于Query的Key-Value进行传播。分析了两种机制在消息构建、聚合及变换上的对应关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载声明:如有侵犯作者权利,将立即删除本文。

文章来源:知乎问题—“”请问全连接的图卷积网络(GCN)和self-attention这些机制有什么区别联系吗?”
文章作者:我爱吃三文鱼
原回答链接

首先结论是大部分GCNSelf-attention都属于Message Passing(消息传递)。GCN中的Message从节点的邻居节点传播来,Self-attentionMessageQueryKey-Value传播来。

message passing

Message Passing [4]

先看看什么是Message Passing。我们知道在实现和设计GCN的时候很多时候都是采用Message Passing的框架[3],其思想是把每个节点的领域的特征信息传递到节点上。在这里举例描述一个节点 i i i在第 k k kGCN卷积的过程:

1)把节点 i i i的每一个邻居j与该节点的特征经过函数变换后形成一条Message(对应公示里函数 ϕ \phi ϕ里面的操作);

2)经过一个Permutation Invariant(置换不变性)函数把该节点领域的所有Message聚合在一起(对应函数 □ \square );

3)再经过函数 γ \gamma γ把聚合的领域信息和节点特征做一次函数变化,得到该节点在第 k k k层图卷积后的特征 X i X_i Xi


那么Self-attention是否也落在Message Passing的框架内呢?

我们先回顾一下Self-attention一般是怎么计算的[2],这里举例一个Query i i i的经过attention的计算过程:

1】Query i i i的特征 x i x_i xi会和每一个Key j j j的特征计算一个相似度 e i j e_{ij} eij
e_ij
2】得到Query i i i与所有Key的相似度后经过SoftMax得到Attention coefficient(注意力系数) α i j \alpha_{ij} αij
alpha_ij
3】通过Attention coefficient加权Value j j j计算出Query i i i最后的输出 z j z_j zj
z_j
好了,那么我们来看看它们之间的对应关系。首先结论是Self-attention计算中的1】2】3】是对应Message Passing里的1)2)的。

如果用Message Passing来实现Self-attention,那么我们可以这么一一对应:

  1. 每个Key-Value j j j可以看作是Query i i i的邻居;

  2. 相似度和注意力系数的计算和最后3】中Value j j j与注意力系数( α i j \alpha_{ij} αij)相乘的操作可以对应为Message Passing中第一步构成Message的过程;

  3. 最后Self-attention的求和运算对应Message Passing中第二步的Permutation Invariant函数,也就是说这里聚合领域信息的过程是通过QueryKey-Value聚合而来。

那么也就是说,Attention的过程是把每一个Query和所有Key相连得到一个 Complete Bipartite Graph - 完全二分图 (左边是Query右边的Key-Value),然后在这图上去对所有Query节点做Message Passing。当然QueryKey-Value一样的Self-attention就是在一般的 Complete Graph完全图 上做Message Passing了。
完全二分图

Complete Bipartite Graph

看到这里大家可能疑问那么为什么Self attention里面没有了Message Passing中第三步把聚合的信息和节点信息经过 γ \gamma γ函数做变换的过程呢。

是的,如果没有了这一步很可能学习过程中Query的原来特征会丢失,其实这一步在Attention is all your need[1]里还是有的,不信你看:
Attention is all you nedd
在每一次经过Self-Attention之后基本上都是有Skip connection+MLP的,这里某种程度上对应了Message Passing里的 γ \gamma γ函数不是吗?

那么说白了GCNSelf-attention都落在Message Passing(消息传递)框架里。GCN中的Message从节点的邻居节点传播来,Self-attentionMessageQueryKey-Value传播来。如果称所有的Message Passing函数都是GCN的话,那么Self-attention也就是GCN作用QueryKey-Value所构成Complete Garph上的一种特例。

也正如乃岩@Naiyan Wang的回答一样。可以说NLPGCN应该大有可为,毕竟Self-attention可以看出是GCN一种,那么肯定存在比Self-attention表达能力更强和适用范围更广的GCN

参考

  1. Attention is all you need
  2. Self-Attention with Relative Position Representations
  3. PyTorch Geometric
  4. DeepGCNs for Representation Learning on Graphs
  5. 完全二分图
  6. 完全图
### 图卷积神经网络 (GCN) 的关系抽取实现方法 #### 方法概述 图卷积神经网络(Graph Convolutional Network, GCN)是一种用于处理图数据的强大工具,其核心思想是通过聚合节点及其邻居的信息来学习节点表示。在关系抽取任务中,GCN 可以利用句法依存树作为输入图结构,从而捕捉实体之间的语义关联[^1]。 具体而言,在依赖驱动的关系抽取方法中,句子被转换成基于依存分析的有向无环图(DAG)。这种图中的每个节点代表一个词或短语,边则由语法解析器生成的依存关系定义。随后,GCN 对该图执行多层消息传递操作,逐步融合局部上下文信息并更新节点嵌入[^2]。 #### 实现流程 以下是使用 GCN 进行关系抽取的一个典型实现框架: 1. **构建图结构** 首先,通过对原始文本进行自然语言处理(如分词、标注依存解析),将句子转化为一张图 \( G=(V,E) \),其中 \( V \) 表示单词集合,\( E \) 是依存关系构成的边集。此过程通常借助外部工具完成,比如 SpaCy 或 Stanford CoreNLP。 2. **初始化特征矩阵** 节点初始特征可以通过预训练的语言模型(例如 BERT 或 GloVe)获得。这些特征会被用来初始化 GCN 输入张量 \( X \in R^{n\times d} \),这里 \( n \) 是节点数量,而 \( d \) 则指定了每条记录维度大小。 3. **设计 GCN 层次架构** 基于标准公式: \[ H^{(l+1)}=\sigma\left(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}\right), \] 其中 \( H^{(0)}=X \), 并且 \( \tilde{A}=A+I_N \). 此外还引入了自循环机制以及规范化因子 \( D_{ii}=\sum_j A_{ij} \). 4. **加入注意力机制提升性能** 在某些改进版本里,加入了注意力模块以便更好地聚焦重要部分。例如 Dependency-driven Attention Mechanism 就是在传统 GCN 上叠加了一个额外组件,它允许模型动态调整权重分配给不同的路径组合。 5. **最终分类预测** 经过多轮迭代计算之后得到全局表征向量 z ,再送至全连接软最大激活函数层得出各类别概率分布 p 。损失函数一般选用交叉熵形式指导参数优化方向。 ```python import torch from torch_geometric.nn import GCNConv class RelExtractionGCN(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(RelExtractionGCN, self).__init__() self.conv1 = GCNConv(input_dim, hidden_dim) self.conv2 = GCNConv(hidden_dim, output_dim) def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = torch.relu(x) x = self.conv2(x, edge_index) return torch.log_softmax(x, dim=1) ``` 上述代码片段展示了一个简单的双层 GCN 构建方式,适用于 PyTorch Geometric 库环境下的实验设置。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值