论文阅读和分析:Graph Attention Networks

Graph Attention Networks

图注意力网络(GAT)

通过堆叠节点能够关注其邻域特征的层,能够(隐式地)为邻域中的不同节点指定不同的权重,而不需要任何类型的代价高昂的矩阵运算(例如矩阵转置)或依赖于预先了解图结构。通过这种方式,同时解决了基于谱的图神经网络的几个关键挑战,并使的模型易于应用于聚合和传播问题。

GAT模型已在四个已建立的转导和诱导图基准上实现或匹配最新结果:Cora、Citseeer和Pubmed引文网络数据集,以及蛋白质-蛋白质相互作用数据集(其中测试图在训练期间保持不可见)。

在这里插入图片描述

多头注意力机制如下所示,

左:模型采用的注意力机制 a ( W h i ⃗ , W h j ⃗ ) a(W\vec{h_i},W\vec{h_j}) a(Whi Whj ),由权重向量 a ⃗ ∈ R 2 F ‘ \vec{a}∈R^{2F^`} a R2F进行参数化,应用LeakyReLU激活函数。

右:节点1附近的多头注意力(K=3头)示意图。不同的箭头样式和颜色表示独立的注意力计算。将每个头部的聚集特征连接或平均以获得$$。

在这里插入图片描述

t-SNE可视化cora数据集结果:

在这里插入图片描述

算法:geometric提供开源实现

torch_geometric.nn — pytorch_geometric documentation (pytorch-geometric.readthedocs.io)

The graph attentional operator from the “Graph Attention Networks” paper:
x i ′ = α i , i Θ x i + ∑ j ∈ N ( i ) α i , j Θ x j , \mathbf{x}^{\prime}_i = \alpha_{i,i}\mathbf{\Theta}\mathbf{x}_{i} + \sum_{j \in \mathcal{N}(i)} \alpha_{i,j}\mathbf{\Theta}\mathbf{x}_{j}, xi=αi,iΘxi+jN(i)αi,jΘxj,
where the attention coefficients a i j a_{ij} aij are computed as
α i , j = exp ⁡ ( L e a k y R e L U ( a ⊤ [ Θ x i ∥ Θ x j ] ) ) ∑ k ∈ N ( i ) ∪ { i } exp ⁡ ( L e a k y R e L U ( a ⊤ [ Θ x i ∥ Θ x k ] ) ) . \alpha_{i,j} = \frac{ \exp\left(\mathrm{LeakyReLU}\left(\mathbf{a}^{\top} [\mathbf{\Theta}\mathbf{x}_i \, \Vert \, \mathbf{\Theta}\mathbf{x}_j] \right)\right)} {\sum_{k \in \mathcal{N}(i) \cup \{ i \}} \exp\left(\mathrm{LeakyReLU}\left(\mathbf{a}^{\top} [\mathbf{\Theta}\mathbf{x}_i \, \Vert \, \mathbf{\Theta}\mathbf{x}_k] \right)\right)}. αi,j=kN(i){i}exp(LeakyReLU(a[ΘxiΘxk]))exp(LeakyReLU(a[ΘxiΘxj])).
If the graph has multi-dimensional edge features e i j e_{ij} eij, the attention coefficients a i j a_{ij} aijare computed as
α i , j = exp ⁡ ( L e a k y R e L U ( a ⊤ [ Θ x i ∥ Θ x j ∥ Θ e e i , j ] ) ) ∑ k ∈ N ( i ) ∪ { i } exp ⁡ ( L e a k y R e L U ( a ⊤ [ Θ x i ∥ Θ x k ∥ Θ e e i , k ] ) ) . \alpha_{i,j} = \frac{ \exp\left(\mathrm{LeakyReLU}\left(\mathbf{a}^{\top} [\mathbf{\Theta}\mathbf{x}_i \, \Vert \, \mathbf{\Theta}\mathbf{x}_j \, \Vert \, \mathbf{\Theta}_{e} \mathbf{e}_{i,j}]\right)\right)} {\sum_{k \in \mathcal{N}(i) \cup \{ i \}} \exp\left(\mathrm{LeakyReLU}\left(\mathbf{a}^{\top} [\mathbf{\Theta}\mathbf{x}_i \, \Vert \, \mathbf{\Theta}\mathbf{x}_k \, \Vert \, \mathbf{\Theta}_{e} \mathbf{e}_{i,k}]\right)\right)}. αi,j=kN(i){i}exp(LeakyReLU(a[ΘxiΘxkΘeei,k]))exp(LeakyReLU(a[ΘxiΘxjΘeei,j])).
PARAMETERS

  • in_channels (int or tuple) – Size of each input sample, or -1 to derive the size from the first input(s) to the forward method. A tuple corresponds to the sizes of source and target dimensionalities.

  • out_channels (int) – Size of each output sample.

  • heads (int, optional) – Number of multi-head-attentions. (default: 1)

  • concat (bool, optional) – If set to False, the multi-head attentions are averaged instead of concatenated. (default: True)

  • negative_slope (float, optional) – LeakyReLU angle of the negative slope. (default: 0.2)

  • dropout (float, optional) – Dropout probability of the normalized attention coefficients which exposes each node to a stochastically sampled neighborhood during training. (default: 0)

  • add_self_loops (bool, optional) – If set to False, will not add self-loops to the input graph. (default: True)

  • edge_dim (int, optional) – Edge feature dimensionality (in case there are any). (default: None)

  • fill_value (float or Tensor or str, optional) – The way to generate edge features of self-loops (in case edge_dim != None). If given as float or torch.Tensor, edge features of self-loops will be directly given by fill_value. If given as str, edge features of self-loops are computed by aggregating all features of edges that point to the specific node, according to a reduce operation. ("add", "mean", "min", "max", "mul"). (default: "mean")

  • bias (bool, optional) – If set to False, the layer will not learn an additive bias. (default: True)

  • **kwargs (optional) – Additional arguments of conv.MessagePassing.

        def __init__(self,in_channels: Union[int, Tuple[int, int]],out_channels: int,heads: int = 1,concat: bool = True,negative_slope: float = 0.2,dropout: float = 0.0,add_self_loops: bool = True,edge_dim: Optional[int] = None,fill_value: Union[float, Tensor, str] = 'mean',bias: bool = True,**kwargs,):def forward(self, x: Union[Tensor, OptPairTensor], edge_index: Adj,edge_attr: OptTensor = None, size: Size = None,return_attention_weights=None):        
    

注释:文中提到的转导学习和归纳学习,transductive and inductive

(1条消息) 转导学习 transductive learning_TBYourHero的博客-CSDN博客_transductive

归纳是从观察到的训练实例到一般规则的推理,然后将其应用于测试实例。转导是从观察到的特定(训练)实例到特定(测试)实例的推理。

有什么区别?
主要的区别在于,在转导学习过程中,您在训练模型时已经遇到了训练集和测试集。然而,归纳学习在训练模型时仅会遇到训练数据,并将学习到的模型应用于从未见过的数据集上。

转导不能建立预测模型。如果一个新的数据点被添加到测试数据集中,那么我们将不得不从头重新运行算法,训练模型,然后使用它来预测标签。另一方面,归纳学习建立了一个预测模型。当遇到新的数据点时,不需要从头重新运行算法。

简单地说,归纳学习试图建立一个通用模型,在这个模型中,任何新的数据点都将基于一组观察到的训练数据点进行预测。在这里,您可以预测点空间中除未标记点之外的任何点。相反,转导学习建立了一个适合它已经观察到的训练数据点和测试数据点的模型,这种方法利用已知的标记点和附加信息来预测未标记点的标记。

在引入新数据点的情况下,转导学习的成本可能会很高,每次有新数据点时,都必须重新运行所有内容。另一方面,归纳学习最初会建立一个预测模型,新的数据点可以在很短的时间内用较少的计算量标记出来。)

参考:

(1条消息) 转导学习 transductive learning_TBYourHero的博客-CSDN博客_transductive

torch_geometric.nn — pytorch_geometric documentation (pytorch-geometric.readthedocs.io)

[1710.10903] Graph Attention Networks (arxiv.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/58971.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python实现屏蔽多行的方法

Python 实现屏蔽多行的方法 作为一位有10年 Python 编程经验的工程师,我深知在实际开发过程中,屏蔽多行代码常常是必须的。在此,我将介绍几种 Python 屏蔽多行代码的方法,希望对读者有所帮助。 方法一:使用注释 在 …

chatgpt赋能python:Python圆柱体的体积计算代码

Python圆柱体的体积计算代码 作为一名具有10年Python编程经验的工程师,今天我来为大家分享Python圆柱体的体积计算代码。在这篇文章中,我将介绍如何使用Python编写一个简单的程序来计算圆柱体的体积,并解释一些关于圆柱体及如何计算其体积的…

让ChatGTP来为我们写一个计算任意位数圆周率的程序

最近在学习python,突然想编写一个计算圆周率pi的程序,可是对python库不是很熟悉,又不会手撸pi的计算函数所以就想起了ChatGPT,想让他来帮帮忙,顺便学习学习,废话不多说,看聊效! &am…

chatgpt赋能python:Python编程教程:如何计算小数点后1000位

Python编程教程:如何计算小数点后1000位 Python是一种高级编程语言,被广泛应用于数据科学、人工智能、Web开发等领域。今天我们来学习如何使用Python计算小数点后1000位。 为什么需要计算小数点后1000位? 在实际应用中,有时需要…

chatgpt赋能python:Python求面积计算的实现方法

Python求面积计算的实现方法 介绍 Python是一种高级编程语言,由于其简单易学,易于编写和调试,以及广泛的功能库,使其成为许多领域中的流行语言。 Python被广泛用于科学计算,数据分析,Web开发,…

chatgpt赋能python:Python计算圆柱体的表面积和体积

Python计算圆柱体的表面积和体积 Python是一种经典的动态编程语言,由于其易学易用,逐渐成为了众多程序员喜爱的语言之一。Python在科学计算领域也非常流行,因为其具有强大且易于使用的数学和统计函数库。在本文中,我们将介绍如何…

chatgpt赋能python:Python数学计算利器-Math库

Python数学计算利器 - Math库 Python作为一种高级编程语言,自然也包含了许多与数学计算相关的库。而其中最为常用的库之一便是Math库。 Math库主要用于执行基本的数学运算,如三角函数、指数函数、对数函数等等。使用Math库可以使Python编程更加方便和高…

chatgpt赋能python:Python计算圆柱侧面积的方法

Python计算圆柱侧面积的方法 圆柱是常见的几何体之一,其侧面积的计算是学习数学和物理时的重要部分。在计算侧面积时,Python是一种常用的编程语言之一,本文将向您介绍使用Python计算圆柱侧面积的方法。 圆柱侧面积的定义 圆柱侧面积是指圆…

chatgpt赋能python:Python如何计算圆的面积和体积

Python如何计算圆的面积和体积 在工程和科学领域中,经常需要计算圆形物体的面积和体积。Python是一种流行的编程语言,可以使用它来编写计算圆形物体面积和体积的程序。接下来,让我们深入探讨如何使用Python计算圆形物体的面积和体积。 圆形…

chatgpt赋能python:Python计算圆的面积方法

Python计算圆的面积方法 作为一门非常受欢迎的编程语言,Python已经被广泛应用于各个领域。在数学计算方面,通过Python可以快速准确地计算一系列的数学问题,比如计算圆的面积。本文将介绍Python计算圆面积的方法。 什么是圆的面积&#xff1…

chatgpt赋能python:Python计算圆面积方法教程

Python计算圆面积方法教程 你是否想过如何用Python计算圆面积?圆形是一个基本的几何形状,计算圆的面积是一个必要的技能。Python作为一种流行的编程语言,可以帮助我们更轻松地计算圆的面积。本教程将介绍如何使用Python计算圆的面积。 什么…

chatgpt赋能python:Python计算球体表面积和体积

Python计算球体表面积和体积 如果您需要计算球体的表面积和体积,那么Python可以成为您的助手。Python在科学计算领域中越来越受欢迎,因为它是一个灵活且易于使用的语言。Python拥有大量的科学计算库,其中一些专用于计算几何体的表面积和体积…

chatgpt赋能python:如何用Python计算球的表面积和体积

如何用Python计算球的表面积和体积 球体是数学中的常见图形,计算球的表面积和体积是科学研究和应用中的重要问题。Python作为一种高效、易学、广泛使用的编程语言,可以很方便地用于计算球的表面积和体积。 本篇文章将会介绍如何用Python计算球的表面积…

chatgpt赋能python:用Python计算圆柱体面积和体积

用Python计算圆柱体面积和体积 如果你正在寻找一种简单而有效的方法来计算圆柱体的面积和体积,那么Python编程语言可以成为你的得力助手。Python是一种简单易用且功能强大的编程语言,非常适合用于处理数学问题。 什么是圆柱体? 圆柱体是一…

chatgpt赋能python:Python计算圆的周长

Python计算圆的周长 Python是一种简单易学的编程语言,被广泛应用于各种领域,包括科学、数据分析、网站开发等等。在本文中,我们将介绍如何使用Python计算圆的周长。 什么是圆的周长 圆的周长是指圆周的长度,也就是圆内任意两点…

chatgpt赋能python:Python计算圆的半径

Python计算圆的半径 Python是一种流行的编程语言,其语法简单易懂,使其成为了很多编程初学者的选择。在编程中,计算圆的半径是一项非常基本的任务,本文将重点介绍使用Python计算圆的半径的方法。 圆的半径是什么? 在…

chatgpt赋能python:用Python计算pi的方法及其优势

用Python计算pi的方法及其优势 Python是一款易学易用且功能强大的编程语言。其广泛的应用范围涵盖数据科学、网络编程、后端开发等多个领域。其中,Python还可以被用来计算数学常数,比如圆周率pi。本文将介绍Python计算pi的方法及其优势。 Python计算pi…

chatgpt赋能python:Python计算圆柱体体积

Python计算圆柱体体积 圆柱体是一种常见的几何体,其体积的计算十分重要。Python作为一种高效便捷的编程语言,可以很好地完成圆柱体体积的计算。 什么是圆柱体 圆柱体是由两个平行圆面和它们之间的曲面组成的几何体。其中,底面圆面的半径称…

chatgpt赋能python:Python计算圆的周长详解

Python计算圆的周长详解 如果您正在学习Python编程,那么计算圆的周长是您必不可少的工具之一。但是,如果您对Python圆的周长不熟悉,那么您可能会遇到一些困惑和挫折。本文将为您详细介绍如何使用Python计算圆的周长,让您的学习之…

chatgpt赋能python:Python中如何计算圆的周长

Python中如何计算圆的周长 如果您正在探索使用Python编程语言计算圆的周长,那么您来对了地方。本文将介绍Python中如何计算圆的周长,并让您熟悉相关的Python函数和语法。 什么是圆的周长? 圆的周长指的是圆的边界的长度,也称作…