作为图模型的基本结构,有必要详细了解下GAT结构,GAT基本结构堆叠后组成类似于DNN的结构,进行特征提取,整体结构如下:Q group277356808 GAT paper地址

1,输入是N个节点的embedding,输出也是N个节点的embedding;

2,参数化的权重W应用于每个节点,W是共享的;

3,然后进行self-attention,得到j对i的attention系数:

e_{ij}=a (Wh_{i},Wh_{j}) ,a是共享的attention机制,单层feedforward neural network

4,进行masked attention,引入graph结构,仅仅计算i的邻居的attention系数,并进行softmax归一化:在i的邻居内进行归一化

softmax_{j}(e_{ij})=\frac{exp(e_{ij})}{\sum_{k\in N_{i}}exp(e_{ik})}

5,具体使用中参数化权重a可以是\underset{a}{\rightarrow},并增加LeakyReLu(倾斜度alpha=0.2)

如下所示:

左图是计算公式的含义,右图是多头attention(3个头,3种颜色的箭头) ,1的邻居包括他自己,进行了6次attention系数计算,然后concat后或者avg后得到1的最新表达。

在计算中逐个节点计算attention系数,并得到每个节点的最新表达。

【插入】退出Mac vim编辑的方法:esc后,qw,ZZ(两次大写Z)

Cora数据集:7分类数据,2708 paper分成7个类别

Case_Based,Genetic_Algorithms,Neural_Networks,Probabilistic_Methods
Reinforcement_Learning,Rule_Learning,Theory

每个样本均有1433个0/1的标签,构成向量,只不过其值只能是0或1,样本格式:

<paper_id> <word_attributes>+ <class_label> 这是cora.content文件的数据

还有一个引用数据,一个paper引用另一个paper数据,两行paper_id,这种数据就构成了边。

下面看代码,以dgl库中torch代码为例,重点是看GATConv这个函数(可应用于同构图和单向图),公式如下:

h_i^{(l+1)} = \sum_{j\in \mathcal{N}(i)} \alpha_{i,j} W^{(l)} h_j^{(l)}也就是上面的第5步计算得到的alpha再进行计算。

\alpha_{ij}^{l} = \mathrm{softmax_i} (e_{ij}^{l})    e_{ij}^{l} = \mathrm{LeakyReLU}\left(\vec{a}^T [W h_{i} \| W h_{j}]\right)

两个|表示concat,下面看代码,干脆讲下dgl -Graph初步,

构建图都是用边表示的,一般需要u,v两个参数,比如下图,

上面的节点用u表示,下面的节点用v表示,无论啥样的图都能用这种形式表达,只要有边就可以用两列数据表示。

>>> src_ids = torch.tensor([2, 3, 4])
>>> dst_ids = torch.tensor([1, 2, 3])
>>> g = dgl.graph((src_ids, dst_ids))
>>> g
Graph(num_nodes=5, num_edges=3,ndata_schemes={}edata_schemes={})
>>> g.nodes()
tensor([0, 1, 2, 3, 4])
>>> g.edges()
(tensor([2, 3, 4]), tensor([1, 2, 3]))

nodes个数是从0到里面最大值算的,所以里面有4+1=5个,当然也可以如下,num_nodes=100,那么就是从0到99,

>>> g = dgl.graph((src_ids, dst_ids), num_nodes=100)
>>> g
Graph(num_nodes=100, num_edges=3,ndata_schemes={}edata_schemes={})
>>> g.num_nodes()
100

引用数据恰好就是边,就可以用u,v表示,下面具体看看,

>>> g.ndata.items()
ItemsView({'feat': tensor([[0., 0., 0.,  ..., 0., 0., 0.],[0., 0., 0.,  ..., 0., 0., 0.],[0., 0., 0.,  ..., 0., 0., 0.],...,[0., 0., 0.,  ..., 0., 0., 0.],[0., 0., 0.,  ..., 0., 0., 0.],[0., 0., 0.,  ..., 0., 0., 0.]]), 'label': tensor([3, 4, 4,  ..., 3, 3, 3]), 'val_mask': tensor([False, False, False,  ..., False, False, False]), 'test_mask': tensor([False, False, False,  ...,  True,  True,  True]), 'train_mask': tensor([ True,  True,  True,  ..., False, False, False])})
>>> g.ndata["feat"].shape
torch.Size([2708, 1433])
>>> g.ndata["label"].shape
torch.Size([2708])
>>> g.ndata["train_mask"].shape
torch.Size([2708])
>>> g.ndata["val_mask"].shape
torch.Size([2708])
>>> g.ndata["test_mask"].shape
torch.Size([2708])

疑问,mask到底是啥?有啥子用?参考代码 。bool类型

这就需要了解GCN中的data使用方法,作者说了,需要N*N的连接矩阵(表示N个节点之间的转移关系,就是边的指向),需要节点向量N*D,D是每个节点features的维度,需要N*E表示label,但是有这些数据还是不知道具体怎么构建训练数据(x,y,tx,ty,allx,ally等)及graph,这个且看下个博文。

这里先解决mask是啥子??

def sample_mask(idx, l):"""Create mask."""mask = np.zeros(l)mask[idx] = 1return np.array(mask, dtype=np.bool)

train数据是前面140(从0开始数的140个,不含140索引),val数据是从140到639的500个,test数据是从1708到2707的100个

    train_mask = sample_mask(idx_train, labels.shape[0])val_mask = sample_mask(idx_val, labels.shape[0])test_mask = sample_mask(idx_test, labels.shape[0])

这个生成的mask就是使用到此数据(index)为True,未使用的数据为False,仅此而已。长度都是2708

数据构建且看下文分解。

愿我们终有重逢之时,而你还记得我们曾经讨论的话题

GAT解读graph attention network相关推荐

  1. 图注意力网络(Graph Attention Network, GAT) 模型解读与代码实现(tensorflow2.0)

    前面的文章,我们讲解了图神经网络三剑客GCN.GraphSAGE.GAT中的两个: 图卷积神经网络(GCN)理解与tensorflow2.0代码实现 GraphSAGE 模型解读与tensorflow ...

  2. Graph Attention Network (GAT) 图注意力模型

    文章目录 1. GAT基本原理 1.1 计算注意力系数(attention coefficient) 1.2 特征加权求和(aggregate) 1.3 multi-head attention 2. ...

  3. 深入理解图注意力机制(Graph Attention Network)

    参考来源:https://mp.weixin.qq.com/s/Ry8R6FmiAGSq5RBC7UqcAQ 1.介绍 图神经网络已经成为深度学习领域最炽手可热的方向之一.作为一种代表性的图卷积网络, ...

  4. Graph Attention Network (GAT) 的Tensorflow版代码解析

    文章目录 代码结构 参数设置 数据加载 特征预处理 模型定义 GAT核心定义:layers.py gat.py base_gattn.py 关于GAT的基本原理解析可查看另一篇博客: Graph At ...

  5. DeepLearning | 图注意力网络Graph Attention Network(GAT)论文、模型、代码解析

    本篇博客是对论文 Velikovi, Petar, Cucurull, Guillem, Casanova, Arantxa,et al. Graph Attention Networks, 2018 ...

  6. GAT - Graph Attention Network 图注意力网络 ICLR 2018

    文章目录 1 相关介绍 GCN的局限性 本文贡献(创新点) attention 引入目的 相关工作 谱方法 spectral approaches 非谱方法 non-spectral approach ...

  7. 【论文解读 WWW 2019 | HAN】Heterogeneous Graph Attention Network

    论文题目:Heterogeneous Graph Attention Network 论文来源:WWW 2019 论文链接:https://arxiv.org/abs/1903.07293v1 代码链 ...

  8. HAN - Heterogeneous Graph Attention Network 异构图注意力网络 WWW2019

    论文题目:Heterogeneous Graph Attention Network (HAN)异构图注意力网络 作者:北京邮电大学Xiao Wang,Houye Ji等人 来源:WWW2019 论文 ...

  9. HAN - Heterogeneous Graph Attention Network 异构图注意力网络 WWW 2019

    文章目录 1 相关介绍 背景 元路径 meta-path 异构图和同构图 相关工作 Graph Neural Network Network Embedding 贡献 2 HAN模型 2.1 Node ...

最新文章

  1. LSTM训练手写数字识别
  2. 使用curl操作InfluxDB
  3. MVC之排球比赛计分程序 ——(二)架构概要设计
  4. 原创 | 微服务网关 Kong 科普
  5. CYQ.Data 数据框架 V4.0 开源版本发布(源码提供下载,秋色园V2.5版本标配框架)
  6. shell之通过if [ $? != 0 ]判断上次程序是否执行成功
  7. vue打包后不使用服务器直接访问方法
  8. 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?
  9. 最佳圆角字体,设计师的最爱
  10. java docker 持续集成_最佳实战Docker持续集成图文详解
  11. 通过谓词查找第一个元素
  12. Vim 的几个彩蛋。。
  13. ListView 控件与 ImageList 控件
  14. 【转】常见问题及应用技巧---------[BIOS篇]
  15. 油管机器学习基础 学习笔记
  16. ggplot2——双坐标轴?
  17. 笔记本电脑如何安装Linux系统
  18. 2020年的发展,想转行学前端还是后端好
  19. 从今天开始,请叫我,新生代农民工
  20. 自动化立体仓库软件(WMSWCS)功能介绍

热门文章

  1. android发送电子邮件,Android发送电子邮件
  2. CSDN-迪米特法则
  3. “云”溪笔谈 | 走完过渡期“沉浸式视频云”时代来临
  4. 通过雪花(snowflake)算法用Python实现一个简单的发号器
  5. Far planner 部署真实小车 树莓派部署lego_loam
  6. VUE 百度离线地图的下载与使用
  7. 内网渗透之跨路由访问
  8. Jmeter学习-BeanShell 内置变量vars、props、prev
  9. 听“Siri之父”讲述Siri背后的故事
  10. php sequelize,关于javascript:eggjs-sequelize-的常用方法总结