深度学习模型--图神经网络复杂度分析

目录

神经网络复杂度概念

复杂度计算方法

时间复杂度计算方法

空间复杂度计算方法

分析图神经网络模型复杂度

一. GAT的模型复杂度

二.HAN异质网络的模型复杂度

三.GraphSAGE模型复杂度

四.HGAT模型复杂度

五.LSTM模型复杂度

总结


神经网络复杂度概念

  1. 时间复杂度(计算量/FLOPS)

模型运算的次数,衡量模型运行速度的快慢

  1. 空间复杂度(访存量/Bytes)

模型的参数量、衡量模型占用内存空间的大小;

复杂度计算方法

时间复杂度怎么计算? - 知乎

时间复杂度和空间复杂度及其计算方法详解

时间复杂度计算方法

一般都使用大O表示法来简化表示时间复杂度。算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n))

1、复杂度为常数,如23,9999,等等 都表示为O(1)

2、复杂度包含n时,省略系数与常数项,只取n的最高阶项

如:2n+45 为 O(n) ; 4n^3+6n^2+n 为O(n^3)

3、复杂度为对数时:如log5(n)、log2(n) 等等 都表示为 O(logn)

4、省略低阶,只取高阶 (即取最大的)

如:logn+nlogn 表示为O(nlogn)

复杂度的大小

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

复杂度越小,则说明你的代码越好

空间复杂度计算方法

其实我们在做算法分析时,往往会忽略空间复杂度,可能是因为现在计算机的空间已经越来越便宜了,成本很低,而一台计算机的 CPU 的性能始终很难得到太大的提升。但是空间复杂度作为另一个算法性能指标,也是我们需要掌握的,这能够让程序在时间和空间上都得到优化,成为一个好的算法。

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。记做S(n)=O(f(n))。

  • 如果申请的是有限个数(常量)的变量,空间复杂度为 O(1)。
  • 如果申请的是一维数组,队列或者链表等,那么空间复杂度为 O(n)。
  • 如果申请的是二维数组,那么空间复杂度为 O(n²)。
  • 如果是在循环体中申请的数组等,可能就需要取嵌套的乘积来作为空间复杂度,这种就需要具体的进一步分析。

分析图神经网络模型复杂度

一. GAT的模型复杂度

GAT(原理、实现及计算复杂度) - 知乎

下面来推导一下GAT模型的计算复杂度,为了与主流文献中的介绍保持一致,用 |V| 表示图中的顶点数, |E| 表示图中的边数, F 表示原始的特征维度, F′ 表示输出的特征维度。

计算复杂度是由运算中的乘法次数决定的,GAT的运算主要涉及如下两个乘法运算环节:

  • 顶点的特征映射,即WhiF维的向量hi映射到F′维的空间, W 是 F×F′ 维的参数矩阵。因此, Whi 的计算复杂度是 O(F×F′) 。对于所有顶点的特征都需要进行映射,则计算复杂度为O(|V|×F×F′)
  • 计算注意力系数过程中的 a(⋅) 映射,从公式(1)可以看出,a()是将2×F维的向量映射到一个实数上,则其计算复杂度为 O(F′) 。在计算注意力系数的过程中,图有多少条边,就需要计算多少次(因为每个顶点计算与其邻居顶点的相似系数),则其计算复杂度为O(|E|×F′)

结合上面两个环节,GAT模型首先计算所有顶点的特征映射,然后计算注意力系数,后续的aggregate环节中主要都是加权求和运算,不再涉及高复杂度的乘法运算了。因此,GAT模型的计算复杂度为 O(|V|×F×F′)+O(|E|×F′)

二.HAN异质网络的模型复杂度


注意力的计算可以跨所有节点和元路径单独计算。给定元路径Φ,节点级注意的时间复杂度为O(VΦF1F2K + EΦF1K),其中K为注意头数,VΦ为节点数,EΦ为基于元路径的节点对数,F1和F2为分别是变换矩阵的行和列。总体复杂度与节点和基于元路径的节点对的数量呈线性关系。

三.GraphSAGE模型复杂度

相比之下,GraphSAGE的每批处理空间和时间复杂度固定在O(QK i=1 Si),其中Si, i∈{1,…, K}和K是用户指定的常数。在实际应用中,我们发现当K = 2且S1·S2≤500时,我们的方法可以获得较高的性能

深度学习模型--图神经网络复杂度分析_第1张图片

四.HGAT模型复杂度

与GAT相比,计算注意力时候多了一个类别注意力,不过是加的关系。

  • 顶点的特征映射,即WhiF维的向量hi映射到F′维的空间, W 是 F×F′ 维的参数矩阵。因此, Whi 的计算复杂度是 O(F×F′) 。对于所有顶点的特征都需要进行映射,则计算复杂度为O(|V|×F×F′)
  • 计算注意力系数过程中的

深度学习模型--图神经网络复杂度分析_第2张图片

  • 最终是讲2×F′维的向量(拼接)映射到一个实数上,则其计算复杂度为 O(F′) 。在计算注意力系数的过程中,图有多少条边,就需要计算多少次(因为每个顶点计算与其邻居顶点的相似系数),则其计算复杂度为O(|E|×F′)

结合上面两个环节,HGAT模型首先计算所有顶点的特征映射,然后计算双重注意力权重,后续的aggregate环节中主要都是加权求和运算,不再涉及高复杂度的乘法运算了。因此,HGAT模型的计算复杂度为 O(|V|×F×F′)+O(|E|×F′)

举例为啥和GAT是一样的:

[1,1,1,2,2,2,3,3,3]直接相加 和 先把1、2、3分别相加,再加一起是一样的复杂度

五.LSTM模型复杂度

序列长度*向量长度²

O ( n ⋅ d 2 ) )

深度学习模型--图神经网络复杂度分析_第3张图片

总结

图网络的一些算法给出了时间复杂度的计算方法,基于注意力的主要参考GAT,对于依赖注意力衍生出来的相关模型HGAT、HetGNN、HAN等可以参考其进行计算。MAGNN和GATNE等可能是另外的计算方法(这两个模型没看过听大佬讲的)

你可能感兴趣的:(异质网络,算法)