SDM2019,这是一篇图异常检测领域的经典方法.
问题定义
在本文中,我们使用手写体来表示集合(例如, V \mathcal{V} V),粗体小写字母(例如, x \mathbf{x} x)来表示向量,粗体大写字母(例如, X \mathbf{X} X)表示矩阵。矩阵 X \mathbf{X} X的第i行由 x i \mathbf{x}_i xi,矩阵 X \mathbf{X} X的第 ( i , j ) (i,j) (i,j)个元素由 X i , j \mathbf{X}_{i,j} Xi,j表示。此外,单位矩阵表示为 I \mathbf{I} I,矩阵 X \mathbf{X} X的转置表示为 X T \mathbf{X}^T XT。向量的2范数用 ∥ ⋅ ∥ 2 \left \| · \right \|_2 ∥⋅∥2,矩阵的Frobenius范数由 ∥ ⋅ ∥ F \left \| · \right \|_F ∥⋅∥F表示。由此,我们将属性网络定义如下:
属性网络
一个属性网络 G = ( V , ϵ , X ) \mathcal{G}=(\mathcal{V},\epsilon,\mathbf{X}) G=(V,ϵ,X)包含:(1)节点集合 V = v 1 , v 2 , . . . , v n \mathcal{V}={v_1,v_2,...,v_n} V=v1,v2,...,vn,其中 ∣ V ∣ = n \left | \mathcal{V} \right |=n ∣V∣=n;(2)边集合 ϵ \epsilon ϵ,其中 ∣ ϵ ∣ = m \left | \epsilon \right |=m ∣ϵ∣=m;(3)节点属性 X ∈ R n × d \mathbf{X} \in {\mathbb R}^{n\times d} X∈Rn×d,其中第i行向量 x i ∈ R d ( i = 1 , . . . , n ) \mathbf{x}_i \in {\mathbb R}^d (i = 1,...,n) xi∈Rd(i=1,...,n)是第i个节点的属性信息。
属性网络 G \mathcal{G} G的拓扑机构可以用邻接矩阵 A \mathbf{A} A表示,其中,如果节点 v i v_i vi和 v j v_j vj之间存在链接,则 A i , j = 0 \mathbf{A}_{i,j}=0 Ai,j=0。我们按照\cite{17}的设置获得有向网络的邻接矩阵 A = m a x ( A , A T ) \mathbf{A}=max(\mathbf{A},\mathbf{A}^T) A=max(A,AT)。为了使结果更容易被解释,我们将属性网络上的异常检测任务定义为排名问题:
属性网络异常排名
给定一个属性网络 G \mathcal{G} G,由n个节点实例的邻接矩阵 A \mathbf{A} A和属性信息矩阵 X \mathbf{X} X,任务是根据异常程度对所有节点进行排序,使得和多数参考节点显然不同的节点排名高。Kaize等人提出的DOMINANT框架对网络拓扑结构和节点属性进行建模,以检测属性网络上的异常。
解析DOMINANT模型
DOMINANT的模型架构如图所示,可以观察到,DOMINANT的基本构件是深度自编码器(deep autoencoder),它由三个基本组件组成:(1)属性网络编码器:用于GCN的节点嵌入表示学习的联合框架中无缝建模网络结构和节点属性;(2)结构重建解码器:用学习的节点嵌入重建原始网络拓扑;(3)属性重建解码器:用获得的节点嵌入重建观察到的节点属性。然后,利用节点的重建误差来标记属性网络上的异常。
深度自编码器
原始数据和重建后数据之间的差异(即,重建误差)是显示数据集中实例异常的有效指标。更具体地说,重建误差较大的数据实例更可能被识别为异常,因为它们的模式明显偏离大多数数据,无法通过准确的数据重建来完全表达。在众多基于重构的异常检测方法中,深度自编码器(Deep Autoencoder)表现出最先进的性能。深度自编码器是一种深度神经网络,它通过将多层编码和解码功能堆叠在一起,以无监督的方式学习数据的潜在表示。自编码器学习的目标就是重构目标输入,使模型学习到一组特征(编码),通过解码这组特征,能够还原输入。
给定输入数据集 X \mathbf{X} X,首先使用编码器 E n c ( ⋅ ) \mathit {Enc(·)} Enc(⋅)将数据映射到潜在低维特征空间,然后使用解码器 D e c ( ⋅ ) \mathit {Dec(·)} Dec(⋅)基于潜在表示恢复原始数据。这个学习过程可以被描述为如下式的最小化成本函数:
m i n E [ d i s t ( X , D e c ( E n c ( X ) ) ) ] min\mathbb{E} [\mathit{dist} (\mathbf{X},\mathit{Dec} (\mathit{Enc} (\mathbf{X} )) )] minE[dist(X,Dec(Enc(X)))]
式中: d i s t ( ⋅ , ⋅ ) \mathit{dist(·,·)} dist(⋅,⋅)表示预定义的距离度量函数。在实际应用中,常常选用2范数距离来计算重建误差。
属性网络编码器
属性网络不仅具有复杂的拓扑结构,其节点还包含丰富的属性信息。属性网络表示学习方法同时提取网络拓扑结构和节点的属性信息来学习网络的低维向量表示,但是传统的深度自编码器只能处理独立同分布( i . i . d . i.i.d. i.i.d.)的属性值数据\cite{35},不能直接应用于属性网络上。原作者受到图卷积网络(GCN)模型的启发(关于GCN的数学原理将在第5节详细说明),设计了一个有效的编码器来捕获属性网络的底层属性:GCN在学习嵌入表示时考虑高阶节点邻近度,从而减轻了网络稀疏性问题。同时,通过多层非线性变换,GCN捕捉数据的非线性和属性网络上两种信息模态的复杂交互。在数学上,GCN将卷积操作扩展到频谱域中的网络数据(networked data),并通过频谱卷积函数学习每一层的潜在表示,如下式:
H ( l + 1 ) = f ( H ( l ) , A ∣ W ( l ) ) \mathbf{H}^{(l+1)}=f(\mathbf{H}^{(l)},\mathbf{A}|\mathbf{W}^{(l)}) H(l+1)=f(H(l),A∣W(l))
式中, H ( l ) \mathbf{H}^{(l)} H(l)是卷积层 l l l的输入,而 H ( l + 1 ) \mathbf{H}^{(l+1)} H(l+1)是卷积层之后的输出。我们把属性矩阵 X ∈ R n × d \mathbf{X}\in \mathbb{R}^{n\times d} X∈Rn×d作为第一层的输入,也就是 H ( 0 ) \mathbf{H}^{(0)} H(0)。 W ( l ) \mathbf{W}^{(l)} W(l)是需要学习的特定层的可训练权重矩阵,在本模型中是使用如式\eqref{loss}所示的目标函数的梯度下降训练得到。图卷积网络的每一层都可以用函数 f ( H ( l ) , A ∣ W ( l ) ) f(\mathbf{H}^{(l)},\mathbf{A}|\mathbf{W}^{(l)}) f(H(l),A∣W(l))如下表示:
f ( H ( l ) , A ∣ W ( l ) ) = θ ( D ~ − 1 2 A ~ D ~ − 1 2 H ( l ) W ( l ) ) f(\mathbf{H}^{(l)},\mathbf{A}|\mathbf{W}^{(l)})= \theta(\tilde{ \mathbf{D}}^{-\frac{1}{2} } \tilde{\mathbf{A}}\tilde{\mathbf{D}}^{-\frac{1}{2}} \mathbf{H}^{(l)} \mathbf{W}^{(l)}) f(H(l),A∣W(l))=θ(D~−21A~D~−21H(l)W(l))
式中, A ~ = A + I \tilde{\mathbf{A}}=\mathbf{A}+\mathbf{I} A~=A+I。 D ~ \tilde{\mathbf{D}} D~是 A ~ \tilde{\mathbf{A}} A~的对角矩阵,对角元素由 D ~ i , j = ∑ j A ~ i , j \tilde{\mathbf{D}}_{i,j}=\sum_j \tilde{\mathbf{A}}_{i,j} D~i,j=∑jA~i,j表示。因此我们可以直接计算 D ~ − 1 2 A ~ D ~ − 1 2 \tilde{ \mathbf{D}}^{-\frac{1}{2} } \tilde{\mathbf{A}}\tilde{\mathbf{D}}^{-\frac{1}{2}} D~−21A~D~−21作为预处理步骤。 θ ( ⋅ ) \theta(·) θ(⋅)是非线性激活函数,比如 R e l u ( x ) = m a x ( 0 , x ) Relu(x)=max(0,x) Relu(x)=max(0,x)。值得注意的是,滤波器(filter)或特征图参数 W l \mathbf{W}^l Wl对于属性网络上的所有节点是共享的。以节点特征和图结构作为输入,输出一组新的节点特征,这一过程即称作图滤波(Graph Filtering)操作。给定属性矩阵 X \mathbf{X} X作为输入,可以通过连续堆叠 k k k个卷积层来有效地捕获每个节点的第 k k k跳邻域。因此,嵌入 Z \mathbf{Z} Z不仅对每个节点的属性信息进行编码,而且还涉及k阶节点邻近信息。在DOMINANT中使用了三个卷积层来构建属性网络编码器:
H ( 1 ) = f R e l u ( X , A ∣ W ( 0 ) ) \mathbf{H}^{(1)}=f_{Relu}(\mathbf{X},\mathbf{A}|\mathbf{W}^{(0)}) H(1)=fRelu(X,A∣W(0))
H ( 2 ) = f R e l u ( H ( 1 ) , A ∣ W ( 1 ) ) \mathbf{H}^{(2)}=f_{Relu}(\mathbf{H}^{(1)},\mathbf{A}|\mathbf{W}^{(1)}) H(2)=fRelu(H(1),A∣W(1))
Z = H ( 3 ) = f R e l u ( H ( 2 ) , A ∣ W ( 2 ) ) \mathbf{Z}=\mathbf{H}^{(3)}=f_{Relu}(\mathbf{H}^{(2)},\mathbf{A}|\mathbf{W}^{(2)}) Z=H(3)=fRelu(H(2),A∣W(2))
式中, W ( 0 ) ∈ R n × h 1 \mathbf{W}^{(0)}\in \mathbb{R}^{n\times h_1} W(0)∈Rn×h1是具有 h 1 h_1 h1个特征映射的输入-隐藏层。类似地, W ( 1 ) ∈ R h 1 × h 2 \mathbf{W}^{(1)}\in \mathbb{R}^{h_1 \times h_2} W(1)∈Rh1×h2和 W ( 2 ) ∈ R h 2 × h 3 \mathbf{W}^{(2)}\in \mathbb{R}^{h_2 \times h_3} W(2)∈Rh2×h3是两个隐藏-隐藏层权重矩阵。在应用三层卷积之后,也就是经历了对输入的三次特征提取,输入网络可以被转换为 h 3 h_3 h3维潜在表示 Z \mathbf{Z} Z,可以捕获拓扑网络结构和节点属性中复杂的非线性结构。潜在表示是指学习过程中由模型自动学到的表示,包含了节点的属性信息等。
结构重建解码器
在对属性网络所额外拥有的属性信息进行编码之后,我们要讨论如何使用属性网络编码器学习到的潜在表示 Z \mathbf{Z} Z来重建原始网络结构。令 A ^ \hat{A} A^表示估计的邻接矩阵,那么可以用结构重构误差 R S = A − A ^ \mathbf{R}_S=\mathbf{A}-\hat{\mathbf{A}} RS=A−A^表示网络上的结构异常。具体而言,如果对于某个节点的结构信息可以通过结构重构解码器近似出来,那我们可以认为该节点是异常节点的概率比较低。相反,如果不能被很好地重建,则意味着其结构信息和大多数节点不同。因此 R S ( i , : ) \mathbf{R}_S(i,:) RS(i,:)的范数越大,表示属性网络上的第 i i i个节点从网络结构方面来看异常的概率越高。具体地,解码器将潜在表示作为输入,然后预测每两个节点之间是否存在链接(link):
p ( A ^ i , j = 1 ∣ z i , z j ) = s i g m o i d ( z i , z j T ) p(\hat{\mathbf{A}}_{i,j}=1|\mathbf{z}_i,\mathbf{z}_j)=sigmoid(\mathbf{z}_i,\mathbf{z}_j^T) p(A^i,j=1∣zi,zj)=sigmoid(zi,zjT)
点积是两个向量之间的乘积,对应元素相乘后求和,以此捕捉了两个表示的相似性,使用转置来确保维度匹配。Sigmoid函数将实数映射到(0,1)的区间,其形式为$ \sigma(x) = \frac{1}{1 + e^{-x}}$,在这里将点积得到的相似度转换为概率值。因此,当Sigmoid函数的输出接近1时,表示模型预测存在链接的概率较高,而接近0时则表示存在链接的概率较低。这种方法常用于图神经网络中,其中学习到的潜在表示通过解码器来预测是否存在链接。
因此,基于属性网络编码器的输出 Z \mathbf{Z} Z来训练链路预测层,如式\eqref{linkpre}表示。
KaTeX parse error: Undefined control sequence: \label at position 59: …thbf{Z}^T) \̲l̲a̲b̲e̲l̲{linkpre}
属性重建解码器
相似地,为了计算节点属性的重建误差,DOMINANT使用了一个属性重建解码器,从编码的潜在表示 Z \mathbf{Z} Z来近似节点的属性信息。具体而言,属性重构解码器利用另一个图卷积层来预测原始节点属性,如式\eqref{attributepre}所示。
\begin{equation}
\hat{\mathbf{X}}=f_{Relu}(\mathbf{Z},\mathbf{A}|\mathbf{W}^{(3)})
\label{attributepre}
\end{equation}
那么通过计算出的重建误差 R A = X − X ^ \mathbf{R}_A=\mathbf{X}-\hat{\mathbf{X}} RA=X−X^我们可以从属性的角度发现属性网络上的异常。
\subsection{异常检测}
通过以上步骤重建拓扑网络结构,将结构和属性的重构误差共同学习,可以表示为:
KaTeX parse error: Undefined control sequence: \label at position 151: …{X}}||^2_F \̲l̲a̲b̲e̲l̲{loss}
式中, α \alpha α是用来平衡结构重建和属性重建影响的一个重要参数。式\eqref{loss}也就是本模型的目标函数,通过最小化此函数,自编码器可以基于编码的潜在表示迭代地近似输入的属性网络,直至收敛。最后,使用两项重构误差之和来评估节点的异常性:
s c o r e ( v i ) = ( 1 − α ) ∣ ∣ a − a ^ i ∣ ∣ 2 + α ∣ ∣ x − x ^ i ∣ ∣ 2 score(\mathbf{v}_i)=(1-\alpha)||\mathbf{a}-\hat{\mathbf{a}}_i||_2+\alpha||\mathbf{x}-\hat{\mathbf{x}}_i||_2 score(vi)=(1−α)∣∣a−a^i∣∣2+α∣∣x−x^i∣∣2
也就是,得分越高的实例越是被认为异常。再由该分数来计算属性网络的异常排名。