摘要
本周的学习内容包括两个方面,一个是看了一篇GAT的论文;一个是在kaggle那个项目上继续学习了数学建模的知识。通过看GAT这篇论文,了解了引入注意力机制通过动态地计算节点之间的权重来处理节点之间关系。然后在数据建模方面,主要上手学习了pandas数据处理的一些函数和方法。
This week’s learning content includes two aspects: one is to read a paper on GAT; the other is to continue learning mathematical modeling knowledge in the Kaggle project. By reading the paper on GAT, I learned about the introduction of attention mechanism, which dynamically calculates the weights between nodes to handle the relationships between nodes. Then, in terms of data modeling, I mainly learned some functions and methods of pandas data processing.
文献阅读
题目:Graph Attention Networks
文章地址:https://arxiv.org/abs/1710.10903
作者:Petar Veličković,
背景分析
在图数据分析领域中,传统的基于邻居的图卷积神经网络GCN模型无法很好地处理节点之间具有复杂关系的图,并且难以适应不同节点之间的重要性差异。因此,该论文提出了一种新型的图卷积神经网络模型,即图注意力网络GAT,以提高模型的性能和可扩展性。GAT引入了注意力机制,通过动态地计算节点之间的权重来更好地处理节点之间的复杂关系和重要性差异。GAT可以学习每个节点的注意力系数,使模型更加准确地捕捉节点之间的关系。与传统的GCN模型不同,GAT的注意力机制可以学习每个节点的邻居节点的重要性,从而更好地处理不同节点之间的重要性差异。因此,GAT模型具有很强的可扩展性和泛化能力,能够处理不同类型的图数据,并且能够准确地捕捉节点之间的关系。该论文的背景分析主要针对解决当前图数据分析领域中的一个重要问题,即节点之间的复杂关系和重要性差异的建模和学习。
创新点
-
注意力机制:GAT模型引入了注意力机制,通过计算节点之间的注意力系数来动态地确定节点之间的权重。这种机制使得模型能够更好地捕捉节点之间的复杂关系和重要性差异,而不是像传统的基于邻居的GCN模型一样仅仅考虑邻居节点之间的权重。
-
多头注意力:GAT模型采用了多头注意力机制,即在每一层中引入多个注意力机制,来并行地学习不同类型的注意力系数。这种机制可以提高模型的表达能力和鲁棒性,使得模型更加适用于不同类型的图数据。
-
融合多种信息:GAT模型采用了一种特殊的加权方式,将不同层次、不同头的信息进行融合,以捕捉节点之间的多样化关系。这种方式可以更好地处理不同类型的图数据,并提高模型的泛化能力。
GAT模型的创新点主要在于引入了注意力机制和多头注意力机制,使得模型能够更好地捕捉节点之间的复杂关系和重要性差异,并且融合多种信息来提高模型的表达能力和泛化能力。
模型解读
GAT 是一种用于图卷积神经网络的模型,其主要解决的问题是节点之间复杂关系和重要性差异的建模。GAT模型采用基于邻居的卷积操作,但与传统的基于邻居的GCN模型不同,GAT引入了注意力机制来动态计算节点之间的权重。GAT的注意力机制类似于自注意力机制,即在同一层中,每个节点的特征都与其他节点的特征进行注意力加权,并且权重是根据节点之间的相似度动态计算的。具体地,GAT的注意力机制可以通过以下公式来表示:
GAT模型可以动态地计算节点之间的权重,从而更好地捕捉节点之间的复杂关系和重要性差异。为了提高模型的表达能力和鲁棒性,GAT模型引入了多头注意力机制,即在每一层中引入多个注意力机制,来并行地学习不同类型的注意力系数。多头注意力机制可以使得模型更好地处理不同类型的图数据,并提高模型的泛化能力。在每一层中,GAT模型还采用了一种特殊的加权方式,将不同层次、不同头的信息进行融合,以捕捉节点之间的多样化关系。具体地,GAT模型将不同层次、不同头的信息进行加权求和,并且引入了残差连接来避免梯度消失问题。
总的来说,GAT模型的模型解读可以概括为以下几点:基于邻居的卷积操作 + 注意力机制 + 多头注意力机制 + 加权融合 + 残差连接。这些组合方式使得GAT模型能够更好地捕捉节点之间的复杂关系和重要性差异,并且在处理不同类型的图数据时具有较强的表达能力和泛化能力。
GAT突出的优点
-
模型可解释性更强:GAT模型采用注意力机制来计算节点之间的权重,可以动态地学习节点之间的关系,并且在模型训练过程中可视化每个节点的注意力系数,从而更好地解释模型的预测结果。
-
模型的表达能力更强:GAT模型引入了多头注意力机制,可以并行地学习不同类型的注意力系数,从而更好地处理不同类型的图数据,并提高模型的表达能力。
-
模型的泛化能力更强:GAT模型采用加权融合的方式将不同层次、不同头的信息进行融合,并且引入了残差连接来避免梯度消失问题,可以提高模型的泛化能力,并且对于不同类型的图数据都具有很好的适应性。
-
模型的计算效率更高:GAT模型采用基于邻居的卷积操作,可以避免全局信息的传递和计算,从而提高了模型的计算效率。
-
模型的适用范围更广:GAT模型可以适用于不同类型的图数据,包括节点数量不同、连接关系不同、节点特征不同等。
总的来说,GAT模型在处理图数据时具有更好的表达能力、泛化能力和计算效率,可以适用于不同类型的图数据,并且具有很好的可解释性。
GAT模型的缺点
-
计算量较大:GAT模型引入了多头注意力机制,需要计算不同头的注意力系数,导致计算量较大,且随着头数的增加,计算量会进一步增加。
-
与全局信息的传递有限:GAT模型采用的是基于邻居的卷积操作,只能在邻域内进行信息传递和计算,无法获得全局的信息,可能导致信息的缺失和误差的累积。
-
对于大规模图数据的处理有限:GAT模型在处理大规模图数据时,由于计算量大和计算时间长等因素,可能会出现性能瓶颈,导致无法处理更大规模的图数据。
-
对于不同类型的图数据的适应性有限:GAT模型对于不同类型的图数据的适应性有限,对于一些非常稀疏或高维的图数据可能无法很好地处理。
-
容易出现过拟合问题:GAT模型具有很强的表达能力,容易出现过拟合的问题,需要采取一些正则化手段来避免这种问题的发生。
总结
相比传统的GNN模型,GAT有优点也有缺点,它模型采用自注意力机制和多头注意力机制,具有更好的表达能力和可扩展性,同时还具有更高的灵活性和局部性,可以更好地应对不同的图数据应用场景和问题。
数学建模学习
pandas部分
describe()
快速查看数据的统计摘要:
In [19]: df.describe()
Out[19]:
A B C D
count 6.000000 6.000000 6.000000 6.000000
mean 0.073711 -0.431125 -0.687758 -0.233103
std 0.843157 0.922818 0.779887 0.973118
min -0.861849 -2.104569 -1.509059 -1.135632
25% -0.611510 -0.600794 -1.368714 -1.076610
50% 0.022070 -0.228039 -0.767252 -0.386188
75% 0.658444 0.041933 -0.034326 0.461706
max 1.212112 0.567020 0.276232 1.071804
转置:
In [21]: df.sort_index(axis=1, ascending=False)
Out[21]:
D C B A
2013-01-01 -1.135632 -1.509059 -0.282863 0.469112
2013-01-02 -1.044236 0.119209 -0.173215 1.212112
2013-01-03 1.071804 -0.494929 -2.104569 -0.861849
2013-01-04 0.271860 -1.039575 -0.706771 0.721555
2013-01-05 -1.087401 0.276232 0.567020 -0.424972
2013-01-06 0.524988 -1.478427 0.113648 -0.673690
按值排序:
In [22]: df.sort_values(by='B')
Out[22]:
A B C D
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-06 -0.673690 0.113648 -1.478427 0.524988
2013-01-05 -0.424972 0.567020 0.276232 -1.087401
用标签提取一行数据:
In [26]: df.loc[dates[0]]
Out[26]:
A 0.469112
B -0.282863
C -1.509059
D -1.135632
Name: 2013-01-01 00:00:00, dtype: float64
用标签选择多列数据:
In [27]: df.loc[:, ['A', 'B']]
Out[27]:
A B
2013-01-01 0.469112 -0.282863
2013-01-02 1.212112 -0.173215
2013-01-03 -0.861849 -2.104569
2013-01-04 0.721555 -0.706771
2013-01-05 -0.424972 0.567020
2013-01-06 -0.673690 0.113648
用标签切片,包含行与列结束点:
In [28]: df.loc['20130102':'20130104', ['A', 'B']]
Out[28]:
A B
2013-01-02 1.212112 -0.173215
2013-01-03 -0.861849 -2.104569
2013-01-04 0.721555 -0.706771
返回对象降维:
In [29]: df.loc['20130102', ['A', 'B']]
Out[29]:
A 1.212112
B -0.173215
Name: 2013-01-02 00:00:00, dtype: float64
总结
下周的学习重点还是数据建模,因为发现学习进度太慢了。然后在论文阅读上我发现GNN的论文很多都类似,通常加点东西就是一篇新的文章,然后下周准备找点不一样的论文看看。