GAT知识总结

《GRAPH ATTENTION NETWORKS》
解决GNN聚合邻居节点的时候没有考虑到不同的邻居节点重要性不同的问题,GAT借鉴了Transformer的idea,引入masked self-attention机制, 在计算图中的每个节点的表示的时候,会根据邻居节点特征的不同来为其分配不同的权值。

1.论文公式:

注意力系数:代表节点j的特征对i的重要性。
经过归一化:
得到最终注意力系数:
   a是 注意力机制权重, h是 节点特征,W是 节点特征的权重
如图:
将多头注意力得到的系数整合:
 一共k个注意力头,求i节点聚合后的特征。
如果是到了最后一层:
 使用avg去整合
如图:

2.论文导图:

3.核心代码:

从输入h节点特征 到 输出h`的过程:
  • 数据处理方式和GCN一样,对边、点、labels编码,并得到h和adj矩阵。
  • GraphAttention层的具体实现:
定义权重W,作用是将input的维度转换,且是可学习参数。
self.W = nn.Parameter(torch.empty(size=(in_features, out_features))) #一开始定义的是空的
nn.init.xavier_uniform_(self.W.data, gain=1.414)  #随机初始化,然后在学习的过程中不断更新学习参数。
定义 注意力机制权重a,用来求注意力分数,也是可学习参数。
self.a = nn.Parameter(torch.empty(size=(2*out_features, 1))) 
nn.init.xavier_uniform_(self.a.data, gain=1.414)  #随机初始化
求得注意力分数
Wh1 = torch.matmul(Wh, self.a[:self.out_features, :])
Wh2 = torch.matmul(Wh, self.a[self.out_features:, :])
e = Wh1 + Wh2.T
然后进行softmax、dropout。
zero_vec = -9e15*torch.ones_like(e)
##如果如果两个节点有边链接则使其注意力得分为e,如果没有则使用-9e15的mask作为其得分
attention = torch.where(adj > 0, e, zero_vec)
##使用 softmax 函数对注意力得分进行归一化
attention = F.softmax(attention, dim=1)
##dropout,为模型的训练增加了一些正则化
attention = F.dropout(attention, self.dropout, training=self.training)
  • 整体GAT实现:
根据头数n,定义n个GraphAttention 层(每个头都具有相同的参 数,并且 共享输入特征 ),和一个 GraphAttention 输出层。
n个层各输出一个注意力分数,最后拼接成一个。 features( features.shape[1] --> hidden(自定义) --*n(自定义) --> n*hidden
self.attentions = [GraphAttentionLayer(nfeat, nhid, dropout=dropout, alpha=alpha, concat=True) for _ in range(nheads)]
for i, attention in enumerate(self.attentions):
            self.add_module('attention_{}'.format(i), attention)   #将层命名然后加到模块里
输出层将 n*hidden --> class( int(labels.max()) + 1)
self.out_att = GraphAttentionLayer(nhid * nheads, nclass, dropout=dropout, alpha=alpha, concat=False)
forward(x, adj)函数:
x = F.dropout(x, self.dropout, training=self.training)
x = torch.cat([att(x, adj) for att in self.attentions], dim=1)   #遍历每个层对象,传参去运行。重复n次后得到 n * hidden 维的拼接后的注意力分数
x = F.dropout(x, self.dropout, training=self.training)
x = F.elu(self.out_att(x, adj))
return F.log_softmax(x, dim=1)   #输出层最后得到class维的分类概率矩阵。
整体是 通过 x 在层之间传递参数的,x一直在变,不断的dropout。

4.采取的正则化:

正则化通过对算法的修改来减少泛化误差,目前在深度学习中使用较多的策略有参数范数惩罚,提前终止,DropOut等。
  • dropout:通过使其它隐藏层神经网络单元不可靠从而 阻止了共适应的发生。因此,一个隐藏层神经元不能依赖其它特定神经元去纠正其错误。因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。
  • 提前停止:是将一部分训练集作为验证集。 当 验证集的性能越来越差时或者性能不再提升,则立即停止对该模型的训练。 这被称为提前停止。
在当前best的loss对应的epoch之后后,又跑了patience轮,但是新的loss没有比之前best loss小的,也就是loss越来越大了,出现过拟合了。这时就应该停止训练。
if loss_values[-1] < best:
        best = loss_values[-1]
        best_epoch = epoch
        bad_counter = 0
    else:
        bad_counter += 1
    if bad_counter == args.patience:
        break

5.和GCN对比adj的用法:

GCN通过变换(归一、正则)的邻接矩阵和节点特征矩阵相乘,得到了考虑邻接节点后的节点特征矩阵。通过两层卷积,得到output。
GAT利用Wh和注意力权重a计算出注意力分数,再用adj矩阵把不相邻的节点的分数mask掉。即,可以给不同节点分配不同权重。

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

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

相关文章

职升网:中级会计师考场常见的注意问题!

在中级会计师考试的征途中&#xff0c;考生常遇挑战&#xff0c;涵盖考前筹备、考场纪律及考后事宜等多维度。针对准考证信息误差&#xff0c;考生务必迅速联系属地会计考试管理机构进行更正&#xff0c;确保信息无误。若身份证不慎遗失或过期&#xff0c;务必紧急补办临时证件…

MyBatis 参数赋值:#{} 和 ${}及区别

目录 一. #{} 和${} 使用 1 对Interger类型的参数 2 对String类型的参数 二、#{} 和${} 区别 1.性能更好 2.SQL注入 总结 MyBatis 参数赋值有两种方式&#xff1a;#{} 和 ${} 一. #{} 和${} 使用 1 对Interger类型的参数 #{}&#xff1a; Select("select username, pas…

音视频入门基础:WAV专题(3)——FFmpeg源码中,判断某文件是否为WAV音频文件的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.wav 可以判断出某个文件是否为WAV格式的音频文件&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为WAV格式的音频文件呢&#xff1f;它内部其实是通过wav_probe函数来判断的。从文章《FFmpeg源码&#xff1a;av_prob…

uniapp 使用css实现大转盘

思路&#xff1a; 1.一个原型的外壳包裹 2.使用要分配的个数&#xff0c;计算出角度&#xff0c;利用正切函数tan计算出角度对应对边长度 3.使用clip-path画出一个扇形 4.使用v-for循环出对应的份数&#xff0c;依次使用transform rotate旋转对应的角度。 注意&#xff1a…

文件共享功能无法使用提示错误代码0x80004005【笔记】

环境情况&#xff1a; 其他电脑可以正常访问共享端&#xff0c;但有一台电脑访问提示错误代码0x80004005。 处理检查&#xff1a; 搜索里输入“启用或关闭Windows功能”按回车键&#xff0c;在“启用或关闭Windows功能”里将“SMB 1.0/CIFS文件共享支持”勾选后&#xff08;故…

【GoodERP更新日志】增加采购发票、销售发票 批量抵扣记账 批量撤销入账 功能

开源项目GoodERP更新-2024年7月29日 本次提交合并增加的功能或解决的问题&#xff1a; 1、增加采购发票、销售发票 批量抵扣记账 批量撤销入账 功能&#xff08;增加上了批量抵扣记账&#xff08;会检查发票号、开票日期有没有填写上&#xff09;、批量撤销入账 两个批量功能…

SpringBoot整合阿里云短信业务

详细介绍SpringBoot整合阿里云短信服务的每一步过程&#xff0c;同时会将验证码存放到Redis中并设置过期时间&#xff0c;尽量保证实战的同时也让没做过的好兄弟也能实现发短信的功能~ 1. 注册阿里云账号和创建Access Key 首先&#xff0c;你需要注册一个阿里云账号&#xff0…

前端Long类型精度丢失:后端处理策略

文章目录 精度丢失的具体原因解决方法1. 使用 JsonSerialize 和 ToStringSerializer2. 使用 JsonFormat 注解3. 全局配置解决方案 结论 开发商城管理系统的品牌管理界面时&#xff0c;发现一个问题&#xff0c;接口返回品牌Id和页面展示的品牌Id不一致&#xff0c;如接口返回的…

opencascade AIS_MouseGesture AIS_MultipleConnectedInteractive源码学习

AIS_MouseGesture //! 鼠标手势 - 同一时刻只能激活一个。 enum AIS_MouseGesture { AIS_MouseGesture_NONE, //!< 无激活手势 // AIS_MouseGesture_SelectRectangle, //!< 矩形选择&#xff1b; //! 按下按钮开始&#xff0c;移动鼠标定义矩形&…

制造企业,如何做好设备的维修和保养?

生产设备的稳定高效的运行是保障产能、提升品质、降低成本的关键所在。机器也有疲惫之时&#xff0c;定期的维修与保养不仅是延长设备寿命的必要手段。如何科学、系统地做好生产设备的维修与保养&#xff0c;成为了制造企业必须深思并实践的课题。 以下&#xff0c;从几个关键维…

结构体笔记

结构体 C语言中的数据类型&#xff1a; 基本数据类型&#xff1a;char/int/short/double/float/long 构造数据类型&#xff1a;数组&#xff0c;指针&#xff0c;结构体&#xff0c;共用体&#xff0c;枚举 概念&#xff1a; 结构体是用户自定义的一种数据类型&#xff0c…

Python NLTK 情感分析不正确

1、问题背景 一位 Reddit 用户使用 Python 的 NLTK 库来训练一个朴素贝叶斯分类器以研究其他句子的情感&#xff0c;但是无论输入什么句子&#xff0c;分类器总是预测为正面。 2、解决方案 经过仔细检查&#xff0c;发现原始代码中的问题在于 wordList 为空。因此&#xff0…

Cadence23学习笔记(十四)

ARC就是圆弧走线的意思&#xff1a; 仅打开网络的话可以只针对net进行修改走线的属性&#xff1a; 然后现在鼠标左键点那个走线&#xff0c;那个走线就会变为弧形&#xff1a; 添加差分对&#xff1a; 之后&#xff0c;分别点击两条线即可分配差分对&#xff1a; 选完差分对之后…

Redis:管道

1. 面试题 如何优化频繁命令往返造成的性能瓶颈&#xff1f; 问题由来 edis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤&#xff1a; 1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听Socket…

前端框架 element-plus 发布 2.7.8

更新日志 功能 组件 [级联选择器 (cascader)] 添加持久化属性以提升性能 (#17526 by 0song)[日期选择器 (date-picker)] 类型添加月份参数 (#17342 by Panzer-Jack)[级联选择器 (cascader)] 添加标签效果属性 (#17443 by ntnyq)[加载 (loading)] 补充加载属性 (#17174 by zhixi…

vue-快速入门

Vue 前端体系、前后端分离 1、概述 1.1、简介 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;可以高效地开发用户界面。…

SpringBoot的约车APP-计算机毕业设计源码96773

摘要 本文基于Spring Boot框架设计并实现了一款约车APP&#xff0c;旨在为用户提供便捷的出行服务。通过后端Spring Boot框架和前端交互界面的设计&#xff0c;实现了用户快速叫车、实时定位、路线规划等功能。系统结合了高效的后端处理和直观的用户体验&#xff0c;为用户提供…

分类常用的评价指标-二分类/多分类

二分类常用的性能度量指标 精确率、召回率、F1、TPR、FPR、AUC、PR曲线、ROC曲线、混淆矩阵 「精确率」查准率 PrecisionTP/(TPFP) 「召回率」查全率RecallTP/(TPFN) 「真正例率」即为正例被判断为正例的概率TPRTP/(TPFN) 「假正例率」即为反例被判断为正例的概率FPRFP/(TNFP)…

降Compose十八掌之『鱼跃于渊』| Gesture Handling

公众号「稀有猿诉」 原文链接 降Compose十八掌之『鱼跃于渊』| Gesture Handling UI是用户界面&#xff0c;一个最为基础的功能就是与用户进行交互&#xff0c;要具有可交互性。要想有可交互性就需要处理用户输入事件。手势是最为常见的一种用户输入&#xff0c;今天就来…

SAPUI5基础知识18 - 自定义CSS和主题色

1. 背景 在上一篇博客中&#xff0c;我们通过使用SAPUI5提供的CSS类实现元素间距的调整。在本篇博客中&#xff0c;让我们看一下如何实现自定义的CSS样式。 2. 背景知识 2.1 CSS基础语法 CSS&#xff0c;全称为级联样式表&#xff08;Cascading Style Sheets&#xff09;&a…