Deep Anomaly Detection on Attributed Networks论文阅读
Deep Anomaly Detection on Attributed Networks论文阅读
作者:Kaize Ding; Jundong Li; Rohit Bhanushali; Huan Liu
原文链接:https://www.public.asu.edu/~kding9/pdf/SDM2019_Deep.pdf
0 摘要
属性网络在实际生活中无处不在,是现代信息基础设施的重要组成部分,检测属性网络中的节点异常变得非常吸引人。现有的方法主要是通过ego网络、社区分析或子空间选择等方式,利用浅层次学习机制来解决图异常检测问题。但是这些方法并不能很好的解决在属性图上的计算挑战,比如网络的稀疏性、数据非线性、难以捕获复杂的关系。为了解决这些问题,本文章提出了一种创新的深度模型去解决属性网路上的异常检测问题。这个深度模型的功能如下:1)能够通过图卷积神经网络GCN将图的拓朴结构和节点属性进行无缝建模,用于节点嵌入学习;2)利用深度自编码器学习嵌入重构原始数据,可以解决异常检测问题。GCN和深度自编码器的配合能够让我们得到节点结构和属性之间的重构误差,从而得到各结点的异常分数。
1 介绍
属性网络为数据异构问题提供了有效的工具,除了只具有点对点关系的传统网络,属性网络也提供了每个节点丰富的属性集合,越来越多得用于建立建模广泛的复杂系统,比如社交媒体网络、基础设施网络等。社会科学的研究表明,数据往往显示相互联系的个体的属性之间的相关性,这样的观察有助于在这样的网络中提取可操作的信息。
从数据中检测异常是一个迫切需要社会关注的研究方向,具有重要的价值。在属性网络中检测模式明显偏离多数节点的异常结点成为研究的热点,属性网络的异常通常是拓扑结构和节点属性共同决定的。
由于无法获得节点真正的异常,所以大部分的异常检测方法都是无监督学习。如同摘要中所讲,现有的方法主要是通过ego网络、社区分析或子空间选择等方式,利用浅层次学习机制来解决图异常检测问题。但是这些方法并不能很好的解决在属性图上的计算挑战,比如网络的稀疏性、数据非线性、难以捕获复杂的关系。因此提出了深度模型\(Dominant\)方法,利用GCN作为编码函数将属性网络压缩为低维嵌入向量,然后利用相应的深度自编码器作为解码函数重构结构和属性,利用节点的重构误差进行排名从而得到异常结点。
2 问题定义
我们将本文中的符号定义和名词定义表示如下:
书法字体 如\(\mathcal{V}\) : 表示集合
小写字母 如\(\mathbf{x}\) : 向量
大写字母 如\(\mathbf{X}\) : 表示矩阵
\(\mathbf{I}\)表示单位矩阵
\(\ell_{2}\)范式表示为\(||·||_2\)
属性网络定义为\(\mathcal{G}=(\mathcal{V}, \mathcal{E}, \mathbf{X})\)。
3 模型细节
模型结构如下:

本结构最重要的结构是深度自编码器,它包括三个重要组成部分:1)属性网络编码器,使用GCN;2)结构重构器;3)属性重构器。然后根据重构误差去对节点进行排名。
3.1 深度自编码器
根据前任所提出的,原始数据和估计数据之前的差距(重构误差)是非常强力的证据去显示数据集中不正常的实例。异常检测的重构方法中,深度自编码器达到了最先进的性能。深度自编码器是一种深度网络,通过多层编码函数和解码函数堆叠在一起,以无监督方式学习数据的潜在表示。
给定数据集\(\mathbf{X}\),编码器\(Enc(·)\)首先被用来将数据对应到低维的特征空间,然后解码器\(Dec(·)\)根据潜在的表示去恢复原始数据。学习过程可以表示为最小化如下的损失函数:
\(min \mathbb{E}[dist(\mathbf{X},Dec(Enc(\mathbf{X})))]\)
我们经常选择\(\ell_2-norm\)距离去计算重构误差。通过应用多层线性单元和非线性激活函数,深度自编码器可以从高维输入中获得高层的非线性信息。
3.2 属性网络编码器
属性网络作为丰富的网络表示,不仅编码了网络的树形结构,也编码了节点丰富的属性。然而卷积深度编码器只能够解决独立同分布的(属性-值)数据,并不能直接应用到本场景,因此采用GCN来解决本场景的问题。GCN再学习嵌入表示时考虑了高阶结点的邻接性,从而缓解了节点间观察到的链路之外的网络的稀疏性,同时,通过多层的非线性转换,它能够捕获到属性网络上数据的非线性以及两种信息模式?复杂交互关系。
GCN将卷积操作扩展到网络数据中,因为按照普通的卷积操作,在图网络中时没有平移不变性。卷积函数表示为如下:
\(\mathbf{H}^{(l+1)}=f(\mathbf{H}^{(l)},\mathbf{A}|\mathbf{W}^{(l)})\)
\(\mathbf{H}^{l}\)是卷积层\(l\)的输入,\(\mathbf{H}^{l+1}\)是该层的输出。属性矩阵\(\mathbf{X}\in\mathbb{R}^{n\times d}\)是最初的输入,等同于\(\mathbf{H}^{0}\)。\(\mathbf{W}^{(l)}\)就是本层需要学习的权重矩阵。\(f\)在卷积网络中可以表示为:
\(f\left(\mathbf{H}^{(l)}, \mathbf{A} \mid \mathbf{W}^{(l)}\right)=\sigma\left(\widetilde{\mathbf{D}}^{-\frac{1}{2}} \widetilde{\mathbf{A}} \widetilde{\mathbf{D}}^{-\frac{1}{2}} \mathbf{H}^{(l)} \mathbf{W}^{(l)}\right)\)
其中\(\widetilde{\mathbf{A}}=\mathbf{A}+\mathbf{I}\),\(\widetilde{\mathbf{D}}\)是\(\widetilde{\mathbf{A}}\)的对角矩阵,每个元素\(\widetilde{\mathbf{D}}_{i, i}=\sum_{j}\widetilde{\mathbf{A}}_{i, j}\)
每个结点的\(k\)跳邻居可以被有效观测到通过\(k\)个卷积层。
3.3 结构重构解码器
接下来我们讨论如何通过潜在表示\(\mathbf{Z}\)重构原始网络,我们用\(\widehat{A}\)表示估计出来的邻接矩阵,那么重构误差\(\mathbf{R}_S=\mathbf{A}-\mathbf{\widehat{A}}\),并利用重构误差进行异常发现。如果一个节点的链接关系能够通过结构重构解码器近似计算出来,那么该节点具有较小可能是异常结点,否则,表明该节点可能存在异常。
重构解码器是通过sigmoid函数:
\(p\left(\widehat{\mathbf{A}}_{i, j}=1 \mid \mathbf{z}_{i}, \mathbf{z}_{j}\right)=\operatorname{sigmoid}\left(\mathbf{z}_{i}, \mathbf{z}_{j}^{\mathrm{T}}\right)\)
则\(\widehat{\mathbf{A}}=sigmoid(\mathbf{ZZ^T})\)
3.4 属性重构解码器
属性重构解码器通过另一个卷积层来预测原始节点的属性:
\(\widehat{\mathbf{X}}=f_{\text {Relu }}\left(\mathbf{Z}, \mathbf{A} \mid \mathbf{W}^{(3)}\right)\)
重构误差为\(\mathbf{R}_A=\mathbf{X}-\mathbf{\widehat{X}}\)
3.5 异常检测
我们利用如下的方式将结构重构误差和属性重构误差联合学习,这个是深度图卷积自动编码的目标函数,\(\alpha\)是一个非常重要的参数去平衡结构和属性的重构误差。
通过最小化目标函数,我们可以让潜在表示逼近输入的属性网络知道目标函数收敛,最后的重构误差可以用于检测异常。我们可以根据\(\operatorname{score}\left(\mathbf{v}_{i}\right)=(1-\alpha)\left\|\mathbf{a}-\widehat{\mathbf{a}}_{i}\right\|_{2}+\alpha\left\|\mathbf{x}_{i}-\widehat{\mathbf{x}}_{i}\right\|_{2}\)得知去计算节点\(\mathbf{v}_i\)的异常分数,并根据所有节点的异常分数排名寻找到异常结点。
3.6复杂性分析
略
4 测试
4.1 数据集
- BlogCatalog :BlogCatalog是一个博客分享网站。 BlogCatalog中的博主可以相互跟踪,形成一个社交网络。 用户与描述他们自己和他们的博客的标签列表相关联,这些标签被视为节点属性。
- Flickr:Flickr是一个图片托管和共享网站。 与BlogCatalog类似,用户可以互相跟踪,形成一个社交网络。 用户的节点属性由其反映其兴趣的指定标记定义。
- ACM:ACM是学术领域的另一个归属网络。 它是一个引文网络,把每一篇论文看作网络上的一个节点,链接是不同论文之间的引文关系。 每一篇论文的属性都是从论文摘要中生成的。
由于这些数据集中并没有异常,因此我们根据经验评估对属性网络进行异常注入,采用两种方式进行异常注入。
- 一方面,我们会生成一些小团体,方法如下:将小团体(clique)的大小设置为\(m\),随机选择\(m\)个节点全连接,全部\(m\)个节点均看作异常;我们重复上述过程知道\(n\)个团体被选择出来。
- 另一方面,为了平衡结构异常和属性异常,我们随机选择\(m\times n\)个节点作为候选节点,对于每一个节点\(i\),我们会从原数据集中随机选择\(k\)个结点,在其中选择节点\(j\),通过计算\(i\)和\(j\)欧氏距离,可以得到偏离\(i\)的最远点\(j\),将\(i\)的属性赋值为\(j\)的属性
异常的注入结果如下图,m=15; n = 10, 15, 20; k = 50:

4.2 实验设置
基线方法略。
评估指标
-
ROC-AUC:ROC曲线是异常检测方法中广泛使用的评估指标,根据实际情况和检测结果,是真阳性率与假阳性率的曲线。AUC值是ROC曲线下的面积,代表随机选择的异常节点比正常节点排名高的概率。 如果AUC值接近1,则该方法是高质量的。
-
Precision@K:准确率。一场排名中前K个节点中真实异常的比例。
-
Recall@K:召回率。检测出来的异常结点在实际异常中的比例。
代码
本论文的pytorch代码实现版本:
https://github.com/kaize0409/GCN_AnomalyDetection_pytorch
同时在Paperwithcode上查找这篇论文,发现以下两个github仓库实现了多种常见的异常检测算法,非常推荐!

浙公网安备 33010602011771号