前言

​ 研一刚入学时分到的大方向是时间序列(Time-series)领域相关的方向,特别是关于多元时间序列相关的任务,本来想好了毕业相关课题做什么,但是出于一些客观原因,没有做纯时间序列相关的内容了,拓宽了一部分到网络异常方面,做时间序列+网络异常检测结合领域的东西。同时我导提出了关于再结合Dynamic Graph的建议,现在做的大概是时间序列+网络异常检测+动态图的三领域重叠的部分,也挺有挑战性,感觉有点不好下手。平时项目也多,GNN也是突然间就给加过来的,以前没怎么做过GNN方面,花了大半个月读Survey和Review入门了GNN&动态图,发现结合动态图还真不太好去结合,现在我都还没找到合适的结合点切入去做实验设计,比较焦虑这一部分的内容。

​ 前不久看了一篇 AAAI 21 的关于多变量时间序列异常检测的论文,但是这是多变量时间序列异常检测的邻域内容,也是属于纯时间序列相关的部分,我甚至将原作者的代码修改的更易于阅读了一点[修改版]。虽然发现了其中的文章作者提出的模型有部分可以修改的地方,但还是与网络异常检测+动态图找不到合适的结合点。也许,我可能还需要补充回顾一下关于GNN相关知识才能找到网络异常检测+动态图的结合点?

GCN

首先是区别于数据的问题:

对于传统的多层感知机(MLP)来说,它通常处理的是一个由多个独立样本组成的数据集,每个样本都有自己的特征向量和标签(对于监督学习任务)。每个样本都是独立处理的,模型在这些样本上进行训练,以学习特征与标签之间的映射关系。 而对于图卷积网络(GCN),情况有所不同。在GCN中,整个图被视为一个单一的数据实体,即使这个图可能包含成百上千个节点。在这种情况下,每个节点及其特征向量可以被看作是一个“样本”,而节点间的边则定义了这些样本之间的关系。因此,尽管整个数据集可能只包含一张图,这张图却包含了大量通过边相互连接的样本(即节点)

以前个人对GCN理解还是蛮有疑惑的,主要疑惑来自于,这个GNN相关的 * 数据怎么和我通常见到的TS常见数据集类型不一样,不是一条条的,直到看到了下述图片a才有所理解

怎么搭好一个GCN?只需这四步

顺便一提,关于这里卷积有点意思,可以看下这篇文章

GCN的工作过程:

  1. 节点表示初始化:每个节点被初始化一个表示(如,节点的特征向量)。

  2. 邻居信息聚合:每个节点通过聚合其邻居节点的表示来更新自己的表示。这个过程可以迭代多次,每次迭代称为一层GCN。

  3. 特征变换:在聚合邻居信息的同时,通常会对特征进行线性变换(例如,通过乘以一个权重矩阵)。

  4. 非线性激活:对更新后的节点表示应用非线性激活函数,如ReLU。

  5. 读出(Readout):对于图级别的任务,所有节点的表示会被进一步聚合以形成图的表示。

数学表达:

给定一个图G=(V,E)G=(V,E),其中VV是节点集合,EE是边集合。每个节点ii都有一个特征向量xix_i。GCN的一层可以用下面的公式表示:

H(l+1)=σ(D~12A~D~12H(l)W(l))H^{(l+1)} = \sigma\left(\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}H^{(l)}W^{(l)}\right)

其中:H(l)H^{(l)}是第ll层的节点表示矩阵,H(0)H^{(0)}是初始的节点特征矩阵。

  • A~=A+IN\tilde{A} = A + I_N是图的邻接矩阵AA加上单位矩阵INI_NNN是节点的数量),这样做是为了在聚合邻居信息的同时保留自身的信息。

  • D~\tilde{D}A~\tilde{A}的度矩阵的对角矩阵,D~ii=jA~ij\tilde{D}_{ii} = \sum_j \tilde{A}_{ij}

  • σ\sigma是非线性激活函数,如ReLU

  • 邻居信息聚合:通过D~12A~D~12\tilde{D}^{-\frac{1}{2}}\tilde{A}\tilde{D}^{-\frac{1}{2}}这个矩阵乘法,每个节点可以聚合其邻居(包括自己)的信息。

  • 特征变换:通过W(l)W^{(l)},可以对聚合后的特征进行线性变换

  • 非线性激活σ\sigma引入非线性,增加模型的表达能力

  • W(l)W^{(l)}是第ll层的可学习权重矩阵

    W(l)W^{(l)}在图卷积网络(GCN)中的作用非常关键,它主要用于特征变换。具体来说,W(l)W^{(l)}是第ll层的可学习权重矩阵,用于对每个节点聚合邻居信息后的特征进行线性变换

    1. 维度变换:通过W(l)W^{(l)},可以改变节点特征的维度,即可以从较高维度映射到较低维度(降维),或从较低维度映射到较高维度(升维),以适应后续层的需要或是最终任务的需求。
    2. 特征提取W(l)W^{(l)}可以视为一种特征提取器,它可以帮助模型学习到在当前任务中更为重要的特征表示。通过训练过程中的梯度下降,W(l)W^{(l)}会被优化,以更好地捕捉和提取对当前任务有用的信息。
    3. 提高模型表达能力:通过引入可学习的参数W(l)W^{(l)},GCN可以学习到更加复杂的特征表示,增强模型的非线性表达能力。这对于处理复杂的图结构数据,如社交网络、分子结构等,是非常必要的。
    4. 促进信息融合:在多层GCN中,每一层的W(l)W^{(l)}可以帮助模型将不同邻居的信息以及不同特征的信息有效地融合在一起,以便更好地理解节点和图的整体结构

问题

  1. 为什么GCN他这个是一层是通过旧的一层去计算的?

​ GCN通过旧的层去计算新的层是基于图数据的本质和信息传播机制的需要。在图卷积网络(GCN)中,每一层的目的是通过聚合邻居的信息来更新节点的表示,这个过程可以视为在图中进行信息的传播。

  • 信息传播:在图结构中,节点之间通过边相互连接,节点的特征信息需要通过这些边来传递和聚合。每一次的传播过程(即一层GCN)可以被看作是节点收集其直接邻居的信息。通过多层的迭代,节点能够间接地收集更远距离邻居的信息,从而获得全局的图结构信息。
  • 深度学习的层次结构:GCN借鉴了深度学习中的层次结构概念,其中每一层的输出都会作为下一层的输入。这种设计使得网络可以学习到从局部到全局的特征表示,每一层都在前一层基础上进一步提炼和整合信息。
  • 非线性特征组合:通过层与层之间的非线性变换(例如通过ReLU激活函数),GCN能够学习更加复杂和抽象的特征表示。这种层叠的非线性变换是深度学习能够捕获高级抽象特征的关键。
  • 局部到全局的信息整合:在图的上下文中,初始层通常捕获节点的局部信息(例如,一个节点及其直接邻居)。随着层数的增加,每个节点能够整合来自更广范围的邻居信息,从而形成更全面的全局视图。
  1. WlW^{l}矩阵问题

    我们的这个矩阵是不停被迭代吗?每经过一次迭代都有一个针对上次的新的WlW^{l}的产生,直至loss收敛且结果最优时,迭代出的w^l就是最好的?

    在图卷积网络(GCN)中,每一层通常都有自己的权重矩阵(记为WW),这与传统的多层感知机(MLP)或深度神经网络中的做法类似,其中每一层也有自己的权重矩阵。在GCN的上下文中,权重矩阵用于转换节点特征,以便在每个图卷积层中学习更高级别的特征表示。

    在一个典型的GCN模型中,你可能有多个图卷积层,每个层都执行以下步骤:

    1. 聚合邻居特征:每个节点收集其邻居的特征信息(以及自身的特征)。

    2. 特征变换:聚合得到的特征通过乘以权重矩阵WW进行变换。每一层都有一个不同的权重矩阵W(l)W^{(l)},这里的ll表示层的索引。

    3. 非线性激活:变换后的特征通常会通过一个非线性激活函数,如ReLU,来增加模型的非线性能力。

    因此,如果你有一个由LL层组成的GCN,你将有LL个不同的权重矩阵W(1),W(2),...,W(L)W^{(1)}, W^{(2)}, ..., W^{(L)},每个对应于网络中的一个层。在训练过程中,所有这些权重矩阵都会通过反向传播算法进行更新,以最小化最终的损失函数。

    值得注意的是,在GCN中,并不是每个节点都有一个独立的权重矩阵。相反,同一层内的所有节点共享相同的权重矩阵W(l)W^{(l)}。这种权重共享机制是卷积神经网络(包括GCN)的一个关键特征,它有助于模型泛化,并减少了模型的参数数量。

    总结来说,尽管在GCN中每个图卷积层都有自己的权重矩阵,但这些矩阵是在该层的所有节点间共享的。这使得模型能够学习到在图中普遍适用的特征转换,从而能够更好地泛化到新的节点或图上。

  2. 输入矩阵H0H^{0} 与输出矩阵 HlH^{l} 是图邻接矩阵?

    H0H^{0}通常指的是图的初始特征矩阵,而不是邻接矩阵。HlH^{l}不是新的邻接矩阵,而是经过ll层图卷积后每个节点的新的特征表示。这些新的特征可以捕捉到节点的高级结构信息和其邻居的特征信息。在许多应用中,HlH^{l}可以用于节点分类、图分类、节点聚类等任务

    这里的概念分开来看:

    • 特征矩阵 (H0H^{0}):在GCN的输入层,H0H^{0}表示图中每个节点的特征向量的集合。如果图有NN个节点,每个节点有FF个特征,则H0H^{0}的维度将是N×FN \times F。这是GCN处理的输入数据。

    • 邻接矩阵 (AA):邻接矩阵表示图中节点之间的连接情况。如果图有NN个节点,则邻接矩阵的维度为N×NN \times N。如果节点ii和节点jj之间存在边,则Aij=1A_{ij} = 1(或者在加权图中为边的权重),否则Aij=0A_{ij} = 0


待更新 2024.04.15