论文笔记-基于图神经网络的软件系统中关键类识别方法研究

基于图神经网络的软件系统中关键类识别方法研究

Research on Key Class Identification in Software System based on Graph Neural Network

湖北大学

陈宇轩

摘要

1.关键字

1.1复杂网络

1.1.1定义

复杂网络:就是呈现高度复杂性的网络,是复杂系统的抽象。

具有自组织、自相似、吸引子、小世界、无标度中部分或全部性质的网络称为复杂网络。

1.1.2名词解释

1)节点:复杂网络中的节点对应为复杂系统中的实体

2)边:表示复杂网络重点节点与节点之间的关系,对应复杂系统中的不同实体间的联系。

(边的权重:表示联系的紧密程度。边的方向表示不同个体之间的单向或双向连接。)

3)邻居节点:有节点 V ,与其之间有边直接相连的所有节点即为其邻居节点。

4)内部连接:有节点 V 在社区 C ,节点 V 与社区 C 内部的V的邻居节点之间的连接称为内部连接。

5)外部连接:有节点 V 在社区 C ,节点 V 与社区 C 外部的V的邻居节点之间的连接称为外部连接。

6)领居社区:节点V的邻居节点所在的社区

7)路径:节点 i 与节点 j 之间的路径是由从节点 i 到 j 所需经过的边组成。

路径长度:经过的边数。

能使节点 i 到 j 联通的所有通路都是这两个节点之间的路径。

8)介数:点介数:网络中经过某个节点的最短路径的数目占网络中所有最短路径数的比例

边介数:网络中经过某条边的最短路径的数目占网络中所有最短路径数的比例。

9)度:某个节点的度即为与该点相连的的数目。在有向图中分为入度和出度。

入度:以该点为终点的边的数目。 出度:以该点为起点的边的数目。

10)度分布:节点的度分布即为每个节点度的分布情况。

在复杂网络中,节点的度分布有幂律特性

幂律分布:指某个具有分布性质的变量,且其分布密度函数是幂函数的分布

1.1.3复杂网络的表示方法

1)图

2)矩阵

1.1.4复杂网络的特性

1)小世界特性:社交网络中的任何一个成员与任意一个陌生人之间要取得联系,不会超过六个人。

2)率度分布特性:一般情况下,节点呈幂律分布的网络即有无标度特征

无标度特征:只有少数节点拥有大量的连接,而大部分节点的连接数很少,即节点度分布为幂律分布。

3)社区结构特征:如人际交往一般,复杂网络中的节点也具有集聚特性。

1.1.5复杂网络的社区发现

社区定义:社区是一个子图,包含节点和边。

按数学方法:假设图G=G(V,E)所谓的社区是指图G中nc(>=1)个社区C={C1,C2,......Cnc}使得各社区的节点集合构成V的一个覆盖。

1.1.6社区结构

1)非重叠社区结构:即网络中每个节点只能属于一个社区,社区跟社区之间没有交集。

下图是一个相对理想的网络社区结构

image-20211221220138528

2)层次结构社区:社区结构的层次性是指多种不同层次的社区分布,许多大的社区包含小的社区,这些小的社区包含更小的社区。

下图是一个层次性结构示意图,在许多实际的复杂网络系统中都得以应用。

例如在社交关系网络中,例如QQ群,学校群包含多个院群,院群包含多个系群,系群包含多个班级群。

image-20211221220812018

3)重叠社区结构示意图:该种结构中,重叠区域只包含社区的部分节点,即数学理论中两个集合的交集。

下图是一个重叠社区结构示意图,该图中两个集合相交的三个节点即为两个社区之间的重叠节点,这三个节点是两个社区联系的枢纽

image-20211221221252235

1.1.7社区发现经典算法——非重叠社区发现算法

1)层次聚类社区发现算法:分裂算法凝聚算法 例:GN算法

2)基于模块度优化的社区发现算法: 例:极值优化算法、模拟退火算法、Louvain算法

3)标签传播类非重叠社区发现算法: 例:LPA算法

1.2软件系统的关键类识别

1.3复杂网络节点重要性

1.3.1定义

复杂网络节点的重要性:在一个网络中,不同的节点起着大小不同的作用。

对网络中的节点定义一个指标,可用来定量的衡量每个节点在网络中重要性的大小

1.3.2方法

分析节点的重要性,大多从网络拓扑结构出发。

1)局部特征:

①节点度:表示与节点直接相连的边的数量,对于有向图来说分为入度和出度。

②集聚系数:是一个衡量节点紧密性的指标。分为局部集聚系数全局集聚系数

2)全局特征:

全局特征往往设计网络整体计算,计算复杂度会比较高。

①特征向量法:邻居节点本身的重要性会影响到所评价节点的重要性。

那么就需要对邻居节点做一个线性加权,而加权的权重取决于邻接矩阵的特征向量。

②中心度:若一个点到其他所有点的最短路径越小,则该点越居于网络的中心位置。

③点介数:若存在一个点 i ,一个网络中80%的最短路径都经过点 i ,i 就充当交通枢纽一样的重要角色。

i 的点介数计算方法:所有经过点 i 的最短路径数 / 所有最短路径数

1.4图神经网络

1.4.1图和属性图

图由节点组成,节点表示实体对象,边表示事件或者实体间的特殊关系

一般用邻接矩阵表示图

属性图:图中的节点和边都带有属性

图神经网络:将图数据和神经网络进行结合,在图数据上进行端对端的计算。

1.4.2图神经网络的计算机制

单层神经网络计算过程:特征矩阵 × 权重矩阵

图神经网络计算过程:邻接矩阵 × 特征矩阵 × 权重矩阵 + 非线性变换(多了一个邻接矩阵)

总结起来就是聚合邻居

1.5类之间的依赖关系和依赖强度

依赖关系是一种使用关系,即一个类的实现(或者部分方法的实现)需要另外一个类的协助,应避免双向的互相依赖关系。

1.6网络嵌入(Network Embedding)

旨在学习网络中节点的低维度潜在表示,所学习到的特征表示可以用于基于图的各种任务的特征,如分类,聚类,链路预测和可视化。

NE的中心思想:找到一种映射函数,将网络中的每个节点转换为低维度的潜在表示。

可以理解为,将网络中的节点表示为低维,实值,稠密的向量形式,使得到的向量形式可以在向量空间中具有表示和推理的能力,同时可以方便轻松的作为机器学习模型的输入,进而可将得到的向量表示运用到社交网络中常见的应用中,例如可视化任务、节点分类任务、链接预测任务、社区发现任务。

1.7自编码器

1.7.1定义

1)自编码器是一种能够通过无监督学习学到输入数据高效表示人工神经网络

输入数据的这一高效表示称为编码(codings),其维度一般远小于输入数据,使得自编码器可以用于降维。

2)自编码器可以作为强大的特征检测器,应用于深度神经网络的预训练

3)可以随机生成与训练数据类似的数据,被称为生成模型。例如:用人脸训练一个自编码器,可以生成新的图片。

1.7.2数据的高效表示

一个自编码器接收输入,将其转换为高效的内部表示,然后再输出输入数据的类似物。

自编码器分为两部分:encoder(识别网络)将输入转换为内部表示。decoder(生成网络)将内部表示转换为输出。

image-20211222172650386

自编码器的结构与多层感知机类似,除了输入神经元和输出神经元的个数相等。

上图中,自编码器只有一个包含了两个神经元的隐层(encoder),以及包含3个神经元的输出层(decoder)。输出是设法重建输入,损失函数是重建损失。

1.7.3栈式自编码器

自编码器有多个隐层,被称为栈式自编码器(或深度自编码器),其架构一般是关于中间隐层对称

image-20211222212920436

捆绑权重:若一个自编码器的层次是严格轴对称的(如上图),那么通常情况下,将decoder层的权重捆绑到encoder层,这样可以使得模型的参数减半,并且加快训练速度,还能降低过拟合风险。(好处)

1.7.4一次训练一个自编码器(训练自编码器)

1)之前是训练整个栈式自编码器,实际上可以训练多个浅层的自编码器,再将它们合为一体,这样训练起来会快得多。

image-20211222213609156

如上图,①第一个自编码器学习去重建输入。

②第二个自编码器学习去重建第一个自编码器隐层的输出。

③这两个自编码器被整合到一起。

这样的方式可以创建一个很深的自编码器。

2)方法二首先创建一个包含完整栈式编码器的图,然后在每个训练时期增加额外的操作。

image-20211222213941221

其中,中间一列是完整的栈式编码器,这部分在训练完成之后才能使用

左侧一列是最先需要训练的,它跳过第二和第三个隐层,直接创建一个输出层,这个输出层与栈式自编码器的输出层共享同样的权重和偏置

随后是右侧一列的训练,它使得第三个隐层的输出与第一个隐层的输出尽可能的接近。

1.7.5使用栈式自编码器进行无监督预训练

如果我们处理一个复杂的有监督学习问题又没有足够的标注数据,则可以找到一个解决类似任务的训练好的模型,并且复用低层。

类似的,如果有一个很大的数据集但绝大部分是未标注数据,则可以使用所有的数据先训练一个栈式自编码器,然后复用低层来完成真正的任务。

image-20211222214858253

1.7.6去噪自编码器

强制自编码器学习有用特征的方式:在输入增加噪声,通过训练之后得到无噪声的输出

这样防止了自编码器简单的将输入复制到输出,从而提取出数据中有用的模式。

这里的噪声可以是添加到输入的纯高斯噪声,也可以是随即丢弃输入层的某个特征,类似于dropout

image-20211222215325877

1.8多层感知机(MLP)

1.8.1原理简介

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,其中间还可以有多个隐层,最简单的MLP只含有一个隐层,即三层结构。

image-20211222215918643

多层感知机的层与层之间是全连接的。其最底层是输入层,中间层是隐藏层,最后是输出层。

1)问:隐藏层的神经元怎么得来的?

答:首先,隐藏层跟输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出是 f(W1X+b1) 。

W1:权重; b1:偏置; 函数 f : sigmoid函数 或者 tanh函数。

2)问:输入层,输出层,隐藏层是什么关系?

答:隐藏层到输出层可以看作是一个多类别的逻辑回归,即softmax回归,故输出层的输出:softmax(W2X1+b2)。

W2:权重; X1:隐藏层的输出 f(W1X+b1) b2:偏置

因此:MLP所有的参数就是各个层之间的连接权重,偏置。

3)问:如何确定这些参数?

答:求解最佳参数是一个最优化问题,解决最优化问题最简单的就是梯度下降(SGD):

①随机初始化所有参数

②迭代地训练,不断计算梯度和更新参数

③直到满足某个条件为止(比如误差足够小、迭代次数足够多)

这个过程涉及到代价函数、规则化、学习速率、梯度计算等

1.9损失函数

1.9.1定义

机器学习的模型关于单个样本预测值真实值称为损失函数。损失越小,模型越好。若预测值与真实值相等,则没有损失。

损失函数:用于计算损失的函数。模型每一次预测的好坏用损失函数来度量。

1.9.2损失函数分类

分为两类:分类问题的损失函数&&回归问题的损失函数

1.10网络鲁棒性

1.10.1定义

定义:在统计学领域和机器学习领域,对异常值也能保持稳定、可靠的性质,被称为鲁棒性

1.10.2影响鲁棒性的原因

①样本数据中含有噪声降低了数据质量。

②样本中种类相似度较高,模型易混淆。

1.10.3提升鲁棒性的方法

①从数据上提升性能

收集更多数据、产生更多数据、对数据做缩放、对数据做变换、特征选择、重新定义问题

②从算法上提升性能

算法筛选、从文献中学习、重采样

③从算法调优上提升性能

注意力机制(给予每个像素权重,来衡量像素间的相关性SPNet)、模型可诊断性、权重的初始化、学习率、激活函数、网络结构、batch和epoch、正则项、优化目标、提早结束训练

④用融合方法提升效果

模型融合、视角融合、stacking、多尺度融合(使用不同尺度的卷积核、增加模型的感受野,典型代表是金字塔Deeplab系列)

增加模型宽度

将通道分成多组,每组单独进行卷积,然后将通道合成可以减少模型的参数,提高模型准确率,增加鲁棒性(ResNext)

2.基本流程

  1. 解析软件系统源代码,抽取类之间的依赖关系和依赖强度,构建加权软件网络模型
  2. 利用网络嵌入学习将软件网络中节点映射为低维表征向量
  3. 构建一个基于图自编码器排序模型,将上面得到的节点低维表征向量作为编码器输入,将每个节点进一步编码为一个特征向量
  4. 在一个多层感知机上使用成对排序(pairwise ranking)损失函数训练模型,将每个节点解码为一个评估值
  5. 网络鲁棒性角度利用三个指标评价关键类的识别准确性

3.实验结果

实验过程:

  1. 在5个人工的复杂网络上进行模型训练
  2. 在4个实际的面相Java开源软件上进行验证
  3. 与常用的5种度量方法和2个已有工作进行对比分析

实验结果:

  1. 网络鲁棒性角度,与常用的介数中心性K-coreh-指数节点收缩法PageRank方法相比
    本文方法在识别软件系统关键类的效果上更好。
  2. 在已有的公开标注数据集上,本文方法前15%的关键节点的召回率和准确率效果更好,提高幅度在10%以上,最大80%。

应用:

应用于指导软件开发过程中的关键类查找,为软件工程师提供一个类的排序列表,作为代码理解过程的七点和维护依据。

第1章 绪论

1.1研究背景

1)软件系统的发展使得其复杂度不断提升,“模块内部高内聚,模块之间低耦合”的模式越来越难实现,系统中存在更多的缺陷。这些缺陷存在轻重之分:有些处于不常用的功能模块的缺陷只会造成轻微损失,也有一些关键位置的类存在着能够对系统造成致命打击的缺陷和漏洞,应着重关注这些关键类

2)复杂网络将复杂系统中的实体作为网络的节点,将实体的联系抽象为连接两个节点的边,从而组成网络。

复杂网络是复杂系统的抽象,在软件工程方面可以将软件系统的元素(包括模块、包、类、方法)视为节点,元素间的交互关系(包括依赖、调用)视为边,称为软件网络

3)复杂网络中特殊节点包含更多的全局或局部网络信息,超过10%受到攻击会导致网络瘫痪。对于大规模动态网络,需要设计快速有效的关键节点挖掘。

4)已提出一些识别复杂网络中重要节点的方法:中心性(度中心性、接近中心性、介数中心性)、PageRank、LeaderRank、h-指数、HITS

共同缺点:简单的方法不准确,精确的方法计算复杂度很高

例:

①基于局部信息的方法:关注节点最本质的属性,却不能反映节点对网络的整体影响

度中心化:典型及基于局部信息的方法,是单个节点重要性的直接反映,但是少量高影响邻居的节点比具有大量低影响邻居更重要,其考虑了节点最近邻的影响。

②基于全局信息的方法:考虑了网络的全局结构,但难以应用在某些特定的网络中。

介绍中心性和接近中心性:其时间复杂度高不适合大规模网络。

K-Shell方法:更关注节点的位置,但无法提供一种量化的方法来衡量节点的重要性。

PageRank和LeaderRank方法:不合理在于其假设相邻结点的随机跳跃概率相同。

5)图神经网络(Graph Neural Networks, GNN)分为五类

图卷积网络(Graph Convolution Networks,GCN)、图注意力网络(Graph Attention Networks)、图自编码器(Graph Autoencoders)、图生成网络(Graph Generative Networks)和图时空网络(Graph Spatial-temporal Networks)。

本文尝试在软件网络上利用图神经网络进行节点的重要性学习,构建一个解码-编码(Encoder-Decoder)框架,实现软件系统的关键类识别

具体来讲:编码器利用网络结构将每个节点编码为一个嵌入向量(embedding),该向量能够捕捉节点的重要结构信息。解码器根据网络节点的影响力捕获节点的相对秩,将每个节点的embedding向量转换为一个标量,再使用成对排序(pairwise ranking)损失训练模型,以识别节点的重要性顺序。

6)综上,将复杂网络理论引入软件工程中,结合图神经网络排序学习技术,提出一种基于图神经网络的软件系统中关键类识别方法

优势:此方法在确保识别精度的情况下,在极低的时间复杂度内对大型软件系统进行分析,并识别出潜在的关键类。

1.2研究内容及创新点

1.2.1研究内容(流程)

①通过解析软件系统源代码抽取类之间的依赖关系,构建软件网络模型。

②使用图卷积方法提取软件网络中结点的低维特征向量

③将学习到的特征向量通过一个多层感知机转化为节点重要性评估值,根据评估值对软件网络中类的重要性进行排序。

④最后评估返回的Top-k个关键类的识别准确性。

1.2.2创新

①提出一个改进的图自动编码器框架
以前:已有编码器将节点的邻接矩阵或直接用节点度作为节点的初始特征输入,也就是节点初始特征只考虑了节点的少量局部信息。
本文:首先对网络进行面向全局结构的嵌入学习,用每个节点得到的嵌入向量作为编码器的初始输入。
其次将每个节点编码为一个低维特征向量。
然后再以一个多层感知机作为解码器,将每个节点的特征向量转换为一个表征节点重要性的标量。
最后实现网络中节点的排序。

将图神经网络学习结果应用于软件系统的关键类识别
已有的节点重要性排序方法:基于节点邻居的排序方法、基于路径的排序方法、基于特征向量的排序方法、基于节点移除和收缩的排序方法。

第2章 研究现状

2.1软件网络

2.1.1复杂网络研究

复杂网络是一种将现实世界中存在的各种复杂系统抽象为网络的方式,将复杂系统中的实体作为网络的节点,将实体间的关系作为连接两个节点的边从而组成网络。

一般使用作为描述复杂网络的工具。

将复杂系统映射为一个二元组图𝐺 = (𝑉, 𝐸),其中𝑉表示所有节点的集合𝑉 = {𝑣1, 𝑣2, ⋯ , 𝑣𝑛},𝑛为节点的总个数为𝑛 = |𝑉|,𝐸表示所有连接两个节点的边的集合 𝐸 = {𝑒𝑖𝑗|𝑖,𝑗 ∈ [1, 𝑛]},边的总条数为𝑚 = |𝐸|。网络中边可以有方向权值方向可代表节点之间的联系关系,边的权值表示两个节点之间的紧密程度,在无权网络中边的权值默认为 1。

2.1.2软件网络研究

软件网络:将复杂网络思路应用于软件系统,从而利用复杂网络理论研究软件系统的设计特性

目前主要是从模块,包,类,方法等粒度对软件系统进行建模,形成软件网络,从而度量软件系统的复杂性、分析软件网络的拓扑结构、形成机理和演化规律。

2.2网络节点重要性排序

复杂网络节点重要性排序方法有四类:

①根据节点属性或网络全局属性来判断节点重要性(例:节点的度、介数、接近中心性)

②根据节点位于网络中的位置决定其重要性(k-shell分解法)

③根据删除或收缩节点对整个网络连通性的影响力来评估(节点删除法、节点收缩法)

基于特征向量的节点评估法(PageRank、HITS)

绝大部分研究表明:软件网络中存在对于整体拥有更大影响力的少数重要节点,它们占据整个依赖关系连接中的核心位置,并且可以将自身的缺陷或者影响力传播给整个网络。

现有的能够实现网络节点重要性排序的方法大多有一定的局限性。图神经网络被定义和设计用于处理大规模复杂图数据的神经网络结构,其强大的图结构表征能力可用于大规模且有效的节点重要性排序方法。

2.3图神经网络

GNN目标:获得每个节点相对于全图结构的隐藏特征。采用迭代式更新的方式,这种迭代方式一方面使得图中每个节点都结合了邻居节点的特征,另一方面也将节点自身的特征传递给邻居节点,在下一次迭代中,节点的特征又会作为邻居节点隐藏特征的一部分传播给邻居的邻居,因此只需要最多不超过图的直径次数的迭代,就能将节点自身的特征传遍给全图的每一个节点。

2.4排序学习

排序学习(Learning to Rank, LtR)的核心:学习一个排序模型 f(q,d) ,q表示查询,d表示文档。即在给定查询q时给出一个相关文档的合适排序。目标:最小化一个排序学习的损失函数 R(F) 。

常规的排序模型:向量空间模型(VSM),语言模型(LM)。

LtR 技术通过从文档的链接结构、用户反馈等传统的 IR 相似性特征和 PageRank 等特征上训练学习模型,预测文档与测试查询之间的相关性。

LtR算法分为三种:单文档方法(Pointwise)、文档对方法(Pairwise)和文档列表方法(Leastwise)

Pointwise方法使用文档的特征向量来预测文档的相关性得分。

不考虑文档之间的相互依赖性,使用有限(常用算法:Random Forests、 MART)

Pairwise方法将排序问题转为对一对文档来预测它们之间的相对顺序。

只考虑一对文档之间的偏序关系,比Pointwise方法有所改进但也有不足。(常用算法:RankNet、RankBoost、LambdaMART)

Listwise 方法针对一组文档为每个查询输出排序列表。

通过构造合适的度量函数衡量当前文档排序和最优排序差值,优化度量函数得到排序模型。比上述两种方法都好一些但是由于度量函数很多具有非连续性的性质,所以训练复杂度很高,会有对位置信息的利用不足的问题。(常用算法: ListNet 、AdaRank、Coordinate Ascent)

第3章 基于图神经网络的关键类识别方法

方法框架:

①利用开源工具解析软件源代码文件(.java),提取类之间的各种关联关系,并根据这些关系构建类之间的软件网络模型

构建基于GNN的排序模型,编码器(Encoder): 采用领域聚合的方式; 解码器(Decoder):多层感知机。

③以软件网络为输入,编码器(Encoder)采用网络结构将每个节点编码成一个嵌入向量,这个嵌入向量可以捕获节点的重要结构信息;译码器(Decoder)再将每个结点的嵌入向量进一步转化为标量

④利用pairwise排序损失训练模型,以实现对网络中节点重要性排序。

⑤由于在模型训练过程中若遇到真实的较大规模的软件系统,训练耗时长,因此利用人工生成的复杂网络作为样本进行模型训练,并采用节点收缩法作为标注训练样本网络节点重要性的参考依据。

⑥将训练得到的模型用于真是软件系统的关键类识别,并采用网络鲁棒性指标来评价关键类识别的精度。

3.1软件网络建模

需要构建类粒度界别的软甲网络,以类为节点,类之间的关系为连边。

类级别软件网络:CSN。表示为一个无向网络:CSN = (V,E,W)
V表示软件系统的一个类(class)或者接口(interface);
E 表示两个节点间存在的依赖关系;
W表示连接两个节点连边的权重。

类节点的依赖关系:继承、聚合、参数
继承:假设类 i 与类 j 之间存在继承或接口实现关系,则类节点之间存在一条连边;
聚合:假设类 i 包含类 j 的属性,则类节点之间存在一条连边;
参数:假设类 i 中的方法调用了类 j 的方法,则类节点间存在一条连边。

在本文中软件网络构建时引入了边的权重,即类之间的依赖程度。(本文中使用类之间的依赖次数作为连接两个类节点的边的权重)

3.2网络嵌入学习

网络嵌入(network embedding):可以将一个网络映射到另一个空间,用一个低维的向量来表征网络中的每个节点的结构信息。

本文中为了表征软件网络中的节点,引入了网络嵌入对软件网络进行预处理。
即:将网络中每个节点 v 转化为一个 c 维的表征向量Xv。

一般情况下GNN框架需要网络中的节点拥有自身的特征,但软件网络的类节点并不具备特征,
因此使用无监督网络嵌入学习方法Node2vec生成节点的初始特征来优化GNN模型效果。
在网络嵌入学习过程中,尽可能保留网络全局结构的信息。

Node2vec借鉴自然语言处理(NLP)方法,将网络中节点之间的连边关系通过偏向性和随机游走转化为节点序列,将这种序列类比为NLP中的文本序列,通过词向量模型Word2vec中的Skip-gram方法来学习网络节点的特征向量。

偏向性随机游走:是一种两阶段随机游走,在游走过程中考虑上一步游走节点对下一步游走的影响,使用两个参数p和q控制下一步游走的策略
p:返回概率。控制随机游走立即返回上一步游走过的节点的概率。
q:靠近或远离概率。控制随机游走的下一步是走向上一步游走节点的邻域or远离上一步游走的节点。

3.3基于图神经网络的排序模型

GNN 框架大多遵循邻域聚合模式,为了让网络中的节点获得网络全局结构的隐藏特征,需要将每个结点的特征与网络中其他节点的特征相结合。

GNN 会使用迭代更新的方式,网络中的每一个节点每一层迭代中都会聚合(Aggregate)其邻居节点上一层迭代中的特征向量,并与自身在上一层迭代中的特征向量结合(Combine),得到新的特征向量。

3.3.1编码器建模

为了让网络中的节点获得网络全局结构的隐藏特征,需要将每个节点的特征与网络中其它节点的特征相结合。GNN 使用迭代更新模式完成这一目标,网络中每一个节点在迭代中都会聚合(Aggregate)其邻居节点在上一层迭代中的嵌入向量,并与自身在上一层迭代中的嵌入向量相结合(Combine),得到新一层的嵌入向量。

image-20211224221637951

常见的AGGREAGE函数:求和(sum)、平均值(mean)、最大值(max)通常不考虑节点连边的权值

本文中:软件网络为加权网络,对于邻居节点嵌入向量聚合的过程中,使用加权平均的方式进行邻居节点的聚合处理。下面是AGGREAGE函数:

image-20211224221932628

𝑑̂𝑣和𝑑̂𝑢分别为节点𝑣和𝑢的加权度,即节点的所有连边的权值之和,表示为𝑑̂ 𝑣 = ∑𝑢∈𝑁(𝑣) w𝑣𝑢

使用节点的度作为权重的好处:
节点可以聚合更多拥有高权值连边的邻居节点的特征,聚合低权值连边的邻居节点的特征减少,最终结点的特征向量将更加接近其拥有高权值连边的邻居节点。节点间的连边拥有高权值说明节点间联系的紧密程度更高。

COMBINE过程:
作用:组合目标节点的邻居节点在前一层嵌入向量的聚合结果目标节点自身在前一层生成的嵌入向量,得到节点在本层的新嵌入向量

常用函数:
求和、拼接、门控循环单位。本文采取拼接作为组合函数。

跳跃连接层(mean):
操作:将模型前L层中每一层产生的嵌入向量都连接到mean进行聚合。
作用:缓解因为节点在网络中位置的不同导致邻域聚合范围差异邻域聚合效果造成的影响。
方式:最大池化、拼接、递归神经网络LSTM
本文选择:对每一个节点每一层产生的嵌入向量取均值作为最终的嵌入向量。
跳跃连接层相当于:一个平均池化操作的聚合层

3.3.2解码器建模

解码器Decoder:
作用:将每个节点的嵌入向量进一步转化为标量,由一个多层感知机。
多层感知机(Multilayer Perceptron, MLP):人工神经网络,
网络结构:最顶层的输入层 + 最后一层的输出层 +(多个)隐藏层
image-20211225124550011

过程:
输入:编码器输出的节点向量 Z
隐藏层和输入层全连接
输出:一个标量:f(WZ+b) W:偏置函数 b:偏置 f:sigmoid函数、tanh函数、ReLU函数
本文:ReLU的改进方法LeakyReLU 函数,优点:该函数对负值的输入有较小的梯度,可缓解梯度消失的问题
最后节点转化为标量yv。
image-20211225125953905

3.4节点收缩法

上面模型的工作:将节点的嵌入向量解码映射为一个表征节点重要性的标量
在训练之前,需要一组作为训练参照的节点重要性值(需要知道当前软件网络中节点重要性的真实排序),然后通过训练让模型的结果尽可能地与真实值接近。

本文采用节点收缩法计算训练样本网络中节点重要性,得到的排序作为本文模型训练的参照值。

节点收缩法:将一个节点和它的直接邻居节点收缩成一个新节点,若这个节点是网络的核心节点,将它收缩后网络的聚集度更高。

网络凝聚度:image-20211225160416351

n:网络中节点个数
d:网格G的平均最短路径长度
网络凝聚程度取决于网络中的节点个数和各个节点对之间的最短路径长度。
网络中人和街店的收缩都必然会导致网络的凝聚程度更为紧密,并且越处于网络中心和桥接位置的节点,在收缩后网络的凝聚程度越高。
节点收缩法定义在收缩后使得网络凝聚程度增加的越多的节点的重要性越高。

3.5损失函数

二元交叉熵代价函数

第4章 实验及其结果分析

实验数据

实验方法:
选取网络节点规模分别为 50、100、200、 300、400 个节点,网络中度分布的幂指数为 3,随机各生成 1600 个复杂网络用 于训练,生成 40 个复杂网络用于测试,并重复上述过程 10 次。

两组开源项目数据集:
①软件项目Maven和Vuze(没有专家标注的关键类信息)
②数据集Ant-1.6.1和JMeter-2.0.1(有专家已标注好的关键类信息,前者10个关键类,后者14个关键类)

评价标准

评价网络节点重要性的方法:
①基于网络的鲁棒性和脆弱性
②基于网络的传播动力学模型

评价思路:
将排序得到的Top-k个重要节点作为研究对象,通过考察这些节点对网络结构和功能及对其他节点的影响大小来评价。

本文:采用基于网络鲁棒性的指标评价各种方法识别关键类的效果

对于一个规模为N的网络来讲,需要删除掉前k%的节点,剩余网络中的连通子图的数量越多,最大连通子图的节点数量越小,这样表示删除的节点集对于网络的鲁棒性影响越大,即这些节点对于网络的重要性越大。

本文使用删除网络一定节点后剩余节点的连通效率的比值作为评估指标。比值越高,说明剩余节点间连通能力越弱,代表网络被破坏的程度越严重,删除的节点集对网络鲁棒性影响越大。

对于第二组有标记关键类信息的数据,采用召回率(𝑟𝑒𝑐𝑎𝑙𝑙 )和准确率(precision) 来比较关键类识别准确性
image-20211226152850037
𝑇𝑃表示某种识别方法所识别出的关键类也同样是专家标记的关键类的 数量,即识别方法成功识别出的关键类的数量。
𝐹𝑁为专家标记的关键类集合中未被识别方法识别出来的关键类数量。
𝑇𝑃 + 𝐹𝑁等同于专家标记出的关键类的数量。

实验结果

网络鲁棒性影响分析

posted @   菜鸟C_5022  阅读(389)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示