简述 GCN &&GAT(Graph Attention Networks )

本文探讨了图神经网络(GNN)的概念及其在图数据上的应用,详细介绍了图卷积网络(GCN)的工作原理,包括如何通过拉普拉斯矩阵进行特征分解,以及GCN如何填补神经网络在处理拓扑图特征的空白。此外,文章还深入分析了图注意力网络(GAT)的架构,展示了如何结合注意力机制和GCN模型来更有效地处理图数据,尤其是在计算每个节点的邻居节点权重方面。

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

Graph attention works

个人理解,gnn这类图神经网络思想就是学习到每个节点的特征对于其相邻更远节点的影响,越近的节点影响越大。 通过这种影响的传播,从而获取到整个拓扑图的结构性的信息。

具体思想的核心是通过拉普拉斯矩阵可以对图信息进行特征分解的特点把该公式定义为图卷积操作,同时图卷积的出现也填补了神经网络获取拓扑图类型特征的空白。

GCN

CNN处理的图像或者视频数据中像素点(pixel)是排列成成很整齐的矩阵,论文提到
Euclidean Structure。

此处输入图片的描述

非Euclidean Structure的网络结构,也是图论抽象意义的拓扑图。
此处输入图片的描述
Graph Convolutional Network中的Graph是指数学(图论)中的用顶点和边建立相应关系的拓扑图。

提取拓扑图空间特征的两种方式:

(1) vertex domain
(2) spectral domain

这种思路就是希望借助图谱的理论来实现拓扑图上的卷积操作。
图谱理论简单的概括就是借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质。
为什么可以借助图谱理论进行GCN? 涉及大量数学推导。

拉普拉斯变换后的矩阵是正定对称矩阵,可以进行特征分解(谱分解)

对于图 G = ( V , E ) G=(V,E) G=(V,E), 其Laplacian 矩阵的定义为 L = D − A L=D-A L=DA ,其中 L L L是Laplacian 矩阵
D D D 是顶点的度矩阵(对角矩阵),对角线上元素依次为各个顶点的度, A A A是图的邻接矩阵。
此处输入图片的描述

常用的拉普拉斯矩阵实际有三种:
No.1 L = D − A L=D-A L=DA 定义的Laplacian 矩阵更专业的名称叫Combinatorial Laplacian
No.2 L s y s = D − 1 / 2 L D − 1 / 2 L^{sys}=D^{-1/2}LD^{-1/2} Lsys=D1/2LD1/2 定义的叫Symmetric normalized Laplacian (GCN)
No.3 L r w = D − 1 L L^{rw}=D^{-1}L Lrw=D1L 定义的叫Random walk normalized Laplacian

首次将深度学习里卷积操作引入图数据里的方法GCN是Thomas Kpif于2017年在论文Semi-supervised classification with graph convolutional networks提出的,在他的博客里对模型解释非常清楚。

GCN网络的每一层结构很清晰:

f ( H ( l ) , A ) = σ ( D ^ − 1 2 A ^ D ^ − 1 2 H ( l ) W ( l ) ) f(H^{(l)}, A) = \sigma\left( \hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{-\frac{1}{2}}H^{(l)}W^{(l)}\right) f(H(l),A)=σ(D^21A^D^21H(l)W(l))

Graph attention works

Graph attention networks在基于GCN模型将深度学习处理图模型的基础上引入attention思想去计算每个节点的邻居节点对它的权重,从而达到从局部信息可以获取到整个网络整体信息却无需提前知道整个网络的结构,同时通过堆叠这些隐藏自注意层能够获取临近点的特征,从而避免大量矩阵运算,计算高效。

Gat Architecture

features输入

输入是一组顶点特征 h = h ⃗ 1 , h ⃗ 2 , … , h ⃗ N , h ⃗ i ∈ R F {\mathbf{h}} = { \vec{h}_1, \vec{h}_2, …, \vec{h}_N }, \vec{h}_i \in \mathbb{R}^F h=h 1,h 2,,h N,h iRF, 其中 N N N是顶点数, F F F 是每个顶点的特征数。这个层会生成一组新的顶点特征, h ’ = h ⃗ ’ 1 , h ⃗ ’ 2 , … , h ⃗ ’ N , h ⃗ ’ i ∈ R F ’ {\mathbf{h}’} = { \vec{h}’_1, \vec{h}’_2, …, \vec{h}’_N}, \vec{h}’_i \in \mathbb{R}^{F’} h=h 1,h 2,,h N,h iRF作为输出。

计算相互关注

为了在将输入特征变换到高维特征时获得充足的表现力,至少需要一个可学习的线性变换。为了到达这个目的,每个顶点都会使用一个共享参数的线性变换,参数为 W ∈ R F ’ × F {\mathbf{W}} \in \mathbb{R}^{F’ \times F} WRF×F,然后在每个顶点上做一个 self-attention ——一个共享的attention机制 a : R F ’ × R F ’ → R a : \mathbb{R}^{F’} \times \mathbb{R}^{F’} \rightarrow \mathbb{R} a:RF×RFR :   e i j = a ( W h ⃗ i , W h ⃗ j ) \ e_{ij} = a(\mathbf{W} \vec{h}_i, \mathbf{W} \vec{h}_j)  eij=a(Wh i,Wh j)
表示顶点 j 的特征对顶点 i 的重要性(importance)。在一般的公式中,模型可以使每个顶点都注意其他的每个顶点,扔掉所有的结构信息。作者使用 mask attention 使得图结构可以注入到注意力机制中——我们只对顶点 相邻的点计算attention coefficient。为了让系数在不同的顶点都可比,我们对所有的 j 使用 softmax 进行了归一化:

α i j = s o f t m a x j ( e i j ) = exp ⁡ e i j ∑ k ∈ N i exp ⁡ e i k (2) \tag{2} \alpha_{ij} = \mathrm{softmax}_j (e_{ij}) = \frac{\exp{e_{ij}}}{\sum_{k \in \mathcal{N}_i} \exp{e_{ik}}} αij=softmaxj(eij)=kNiexpeikexpeij(2)

此处输入图片的描述

注意力机制 a 是一个单层的前向传播网络,参数为权重向量 a ⃗ ∈ R 2 F ’ \vec{\text{a}} \in \mathbb{R}^{2F’} a R2F,使用LeakyReLU作为非线性层(斜率α=0.2)。整个合并起来,注意力机制计算出的分数(如图1左侧所示)表示为:

α i j = exp ⁡ ( L e a k y R e L U ( a ⃗ T [ W h ⃗ i ∥ W h ⃗ j ] ) ) ∑ k ∈ N i exp ⁡ ( L e a k y R e L U ( a ⃗ T [ W h ⃗ i ∥ W h ⃗ k ] ) ) (3) \tag{3} \alpha_{ij} = \frac{ \exp{ ( \mathrm{LeakyReLU} ( \vec{\text{a}}^T [\mathbf{W} \vec{h}_i \Vert \mathbf{W} \vec{h}_j ] ))}}{\sum_{k \in \mathcal{N_i}} \exp{(\mathrm{LeakyReLU}(\vec{\text{a}}^T [\mathbf{W} \vec{h}_i \Vert \mathbf{W} \vec{h}_k]))}} αij=kNiexp(LeakyReLU(a T[Wh iWh k]))exp(LeakyReLU(a T[Wh iWh j]))(3)

得到归一化的分数后,使用归一化的分数计算对应特征的线性组合,作为每个顶点最后的输出特征(最后可以加一个非线性层,σ)

h ⃗ ’ i = σ ( ∑ j ∈ N i α i j W h ⃗ j ) (4) \tag{4} \vec{h}’_i = \sigma(\sum_{j \in \mathcal{N}_i} \alpha_{ij} \mathbf{W} \vec{h}_j) h i=σ(jNiαijWh j)(4)

为了稳定 self-attention 的学习过程,作者使用multi-head attention 来扩展注意力机制。特别地,K 个独立的 attention 机制执行上面 这样的变换,然后他们的特征连(concatednated)在一起,就可以得到如下的输出:
h ⃗ ’ i = ∥ k = 1 K σ ( ∑ j ∈ N i α i j k W k h ⃗ j ) (5) \tag{5} \vec{h}’_i = \Vert^{K}_{k=1} \sigma(\sum_{j \in \mathcal{N}_i} \alpha^k_{ij} \mathbf{W}^k \vec{h}_j) h i=k=1Kσ(jNiαijkWkh j)(5)

其中 ∥ 表示concatenation, α i j k \alpha^k_{ij} αijk是通过第 k 个注意力机制 ( a k a^k ak) 计算出的归一化的注意力分数,Wk 是对应的输入线性变换的权重矩阵。注意,在这里,最后的返回输出 h′,每个顶点都会有 KF′ 个特征(不是 F′ )。特别地,如果网络的最后一层使用 multi-head attention,concatenation 就不再可行了,论文使用 averaging,并且延迟使用最后的非线性层(分类问题通常是 softmax 或 sigmoid ):
h ⃗ ’ i = σ ( 1 K ∑ k = 1 K ∑ j ∈ N i α i j k W k h ⃗ j ) \vec{h}’_i = \sigma(\frac{1}{K} \sum^K_{k=1} \sum_{j \in \mathcal{N}_i} \alpha^k_{ij} \mathbf{W}^k \vec{h}_j) h i=σ(K1k=1KjNiαijkWkh j)

实验数据

此处输入图片的描述

Transductive learning

在cora数据集上使用一个两层的GAT模型,第一层包含K=8个attention head,计算得到F′=8个特征(总共64个特征),之后接一个指数线性单元(ELU)作为非线性激活函数,第二层用作分类:一个单个的attention head计算C个特征(其中C是类别的数量),之后用softmax激活。处理小训练集时,在模型上加正则化。

对比结果

此处输入图片的描述

代码解读

1*1 卷积的作用?

吴恩达卷积神经网络课程2.5节提到对输入数据进行11卷积操作是一个很有影响力的操作,常用于三维的输入数据,通过设定11卷积核的个数改变数据第三维(通道数量)的大小。当然你也可以保持通道数的不变,那么1*1卷积就相当于给输入添加一层非线性的函数变换,从而让网络学习到更复杂的表示。
在这里插入图片描述同样的,输入数据是二维的时候,1* 1的一维卷积作用也是类似的。

Tensorflow里函数为tf.layers.conv1d,tf.layers.conv2d

conv1d的参数如下图所示:
在这里插入图片描述
filters:过滤器个数,控制输出的大小。
kernel_size:卷积核大小。

self-attention

论文里关于GAT模型的计算任意两点注意力的系数实现如下,即上面的公式(3):
在这里插入图片描述
关于tf.layers.conv1d函数解析

这个写法和论文的公式(3)貌似不一样,实际是简单的等价,这里聚合是把n*m的实体向量h通过一维卷积降n*1成1维后,然后利用加分的广播机制,计算任意两点的信息,作者的解释:

当我们这一层神经网络是单层的, [ W h ⃗ i ∥ W h ⃗ j ] [\mathbf{W} \vec{h}_i \Vert \mathbf{W} \vec{h}_j ] [Wh iWh j] 可以分解成 [ W 1 h ⃗ i + W 2 h ⃗ j ] [\mathbf{W_{1}} \vec{h}_i + \mathbf{W_{2}} \vec{h}_j ] [W1h i+W2h j], 其中 W 1 W_{1} W1 W 2 W_{2} W2是两个独立参数。

W 1 h ⃗ i W_{1}\vec{h}_{i} W1h i 我们就可以借助上面讲的卷积核大小为1的一维卷积conv1d去实现这个转换,代码里f_1就是它的表示,但这里代码先实现是计算任意两点的相关系数,在加上bias_mat后即实现论文里说采用mask attention机制使得只有相邻两点的相关度系数会被计算。

bias_mat本质是一个将整个图的邻接矩阵转换后得到的二维矩阵,如果这i,j两点之间没有边,就被赋值无穷小,如果有边赋值为0,这样加上计算任意两点相关系数结果,就实现只计算图上相邻两点的相关性系数,这方法被论文称为 mask attention
在这里插入图片描述

<think>好的,用户想了解2018年提出的图注意力网络(Graph Attention Networks)的相关信息或论文,特别是关于实现的部分。首先,我需要回忆一下GAT的基本结构和主要贡献。GAT由Velickovic等人在2018年提出,核心是使用注意力机制来动态计算节点之间的重要性权重,替代了传统的基于图结构的方法,比如GCN中的固定归一化。 接下来,用户提到的是论文的实现,所以需要详细说明模型的架构,特别是多头注意力机制和参数共享的部分。记得要引用用户提供的参考资料中的相关部分,比如引用[4]提到的注意力机制公式,这可能与GAT中的注意力函数有关。需要确认引用中的符号是否与GAT论文一致,例如$a(W\vec{h_i}, W\vec{h_j})$,这里可能对应GAT中的注意力系数计算。 然后,用户可能需要代码示例,所以应该提供一个简单的PyTorch实现,包括图注意力层的定义和前向传播过程。要注意代码中的关键部分,比如线性变换、注意力系数的计算、LeakyReLU激活函数以及softmax的应用。同时,多头注意力的实现可能需要将多个注意力头的结果拼接或平均,这部分也需要在代码中体现。 用户的问题中还提到了相关问题的生成,需要根据GAT的特点和应用场景来设计问题。例如,GAT与GCN的区别、多头注意力的作用、如何处理动态图等。这些问题需要简洁明了,能够引导用户进一步探索。 另外,需要检查是否有遗漏的要点,比如训练方法。引用[3]提到了使用REINFORCE算法训练策略网络,但GAT通常使用监督学习,可能需要指出这点差异。同时,引用[1]和[2]提到的图网络结构和双层GCN可能作为对比,说明GAT的灵活性和优势。 最后,确保回答符合系统级指令,数学公式用$...$,独立公式用$$...$$,正确使用中文,并且引用标识正确添加。例如,在提到注意力机制时引用[4],在讨论图卷积网络时引用[2]。</think># 图注意力网络(GAT) 2018论文实现解析 ## 一、核心机制 2018年提出的图注意力网络(Graph Attention Networks, GAT)[^4] 创新性地将注意力机制引入图神经网络,其核心是通过$α_{ij}$注意力系数动态计算节点间关系: $$e_{ij} = \text{LeakyReLU}(\vec{a}^T[W\vec{h_i}||W\vec{h_j}])$$ $$α_{ij} = \text{softmax}_j(e_{ij}) = \frac{\exp(e_{ij})}{\sum_{k∈\mathcal{N}_i}\exp(e_{ik})}$$ 其中$\vec{a}∈\mathbb{R}^{2F'}$是可训练参数向量,$W∈\mathbb{R}^{F'×F}$是共享线性变换矩阵[^4] ## 二、模型架构 ### 2.1 单头注意力层 ```python import torch import torch.nn as nn import torch.nn.functional as F class GraphAttentionLayer(nn.Module): def __init__(self, in_features, out_features, dropout=0.6): super().__init__() self.W = nn.Linear(in_features, out_features) self.a = nn.Linear(2*out_features, 1) self.dropout = nn.Dropout(dropout) self.leakyrelu = nn.LeakyReLU(0.2) def forward(self, h, adj): Wh = self.W(h) # [N, out_features] N = Wh.size(0) # 构造所有节点对 Wh_repeated = Wh.unsqueeze(1).repeat(1, N, 1) # [N, N, out_features] Wh_repeated_transposed = Wh_repeated.transpose(0,1) concat = torch.cat([Wh_repeated, Wh_repeated_transposed], dim=2) # [N, N, 2*out_features] e = self.leakyrelu(self.a(concat).squeeze(2)) # [N, N] zero_vec = -9e15*torch.ones_like(e) attention = torch.where(adj > 0, e, zero_vec) attention = F.softmax(attention, dim=1) attention = self.dropout(attention) h_prime = torch.matmul(attention, Wh) # [N, out_features] return F.elu(h_prime) ``` ### 2.2 多头注意力机制(论文关键创新) $$h_i' = \|_{k=1}^K σ(\sum_{j∈\mathcal{N}_i} α_{ij}^k W^k h_j)$$ 其中$\|$表示拼接操作,$K$为注意力头数量[^4] ## 三、训练要点 1. 参数初始化:使用Glorot初始化权重矩阵 2. 正则化:在注意力系数上应用dropout(0.6概率) 3. 激活函数:ELU非线性激活 4. 优化器:Adam优化器(初始学习率0.005) ## 四、性能优势 与GCN相比,GAT具有三大优势: 1. 隐式指定不同邻居的权重,无需预先知道图结构 2. 适用于inductive学习任务 3. 多头注意力机制增强模型稳定性 ## 五、典型应用场景 1. 蛋白质相互作用网络分析 2. 社交网络用户行为预测 3. 知识图谱补全 4. 交通流量预测[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值