TL;DR
论文结合GNN提出了动态图中半监督的边异常检测模型 AddGraph,同时考虑了节点的结构,属性和时序特征。对于标签数据不足的问题,在训练过程中采用了 negative sampling 和 margin loss 两个技巧。在两个真实数据集的实验中取得了较好的效果。
Problem Definition
论文中的方法主要用于推荐系统中的异常操作检测,举个例子:异常的用户想自己的物品被推荐,那怎么办,那就找几个人疯狂点自己的东西的同时点那些本身就已经是popular的item,这样就会让自己的物品和popular的有相似的特征等,就会增加这些物品的被推荐的rank。这同时会产生很多新的edge,这些都是异常的edge。如下图所示:
异常模式特征:当异常的用户频繁执行操作时,用户和物品间的边会组成一个 dense subgraph,这种异常的特征模式就需要被检测出来;
Algorithm/Model
AddGraph 的整体架构如下图所示:
主要分为三部分:
- GCN for content and structural features.
- GRU with attention to combine short-term and long-term states.
- Anomalous score computation for edges.
GCN
给定t 时刻图流中的一个 snapshotGt=(Vt,Et) 、对应的邻接矩阵At 和t−1 时刻的节点隐含状态矩阵Ht−1∈Rn×d,那么当前时刻的节点状态矩阵可以通过 GCN 来更新,
Current t=GCNL(Ht−1)
以上一时刻的节点特征作为当前时刻节点模式的输入,融合了 long-term 特征;对于一个L 层的GCN,卷积过程如下所示:
Z(0)Z(l) Current t=Ht−1=ReLU(A^tZ(l−1)W(l−1))=ReLU(A^tZ(L−1)W(L−1))
GRU
为了考虑节点 short-term 的特征,采用了基于上下文注意力模型,以当前的某个时间窗口来编码节点特征,过程如下:
Ch,iteh,itah,itshortit=[hit−ω;…;hit−1]=rTtanh(Qh(Ch,it)T)=softmax(eh,it)=(ah,iCh,it)TCh,it∈Rω×deh,it∈Rωah,it∈Rω short it∈Rd
其中hit 表示节点hi 在t 时刻的特征,ω 表示时间窗口的大小,Qh 和r 是模型需优化的参数;对于所有节点表示成矩阵的计算公司如下:
Short t=CAB(Ht−ω;…;Ht−1)
目前我们得到了包含 long-term 信息的节点特征 Current t 和 short-term 信息的节点特征 Short t,为了考虑时序特征在模型中使用 GRU 来处理这两种特征:
Ht= GRU(Current t, Short t)
具体的前向传播计算公式如下所示:
PtRtH~tHt=σ(UP Current t+WP Short t+bP)=σ(UR Current t+WR Short t+bR)=tanh(UcCurrentt+Wc(Rt⊙ Short t))=(1−Pt)⊙ Short t+Pt⊙H~t
经过上述特征融合的步骤之后,得到的节点特征Ht 就包含了结构、属性、时序信息;
Anomalous score computation
在编码节点特征Ht 之后,图中每条边(i,j,w)∈Et 的异常概率通过👇的公式进行计算:
f(i,j,w)=w⋅σ(β⋅(∥a⊙hi+b⊙hj∥22−μ))
其中σ(x)=1+ex1 是sigmoid函数,a 和b 是输出层的参数,β 和μ 是超参数;
loss function
为了去解决anomaly data不足的情况,我们建立一个模型去描述normal的分布情况,假设训练样本中全部的edge都是normal的,对应每个normal的edge我们产生一个负样本当作anomaly的edge (替换边中的source或者target)。用一个伯努利分布,重新计算了normal边对应两边node的degree,如果这个degree越大则表示越可能是异常的,越小则是正常的;
- marginbased pairwise loss
度量损失:异常边的评分足够大,正常边的评分足够小;
Lt=min(i,j,w)∈Et(i′,j′,w)∈/Et∑max{0,γ+f(i,j,w)−f(i′,j′,w)}
- L2 regularization loss
正则损失防止过拟合;
Lreg=∑(∥W1∥22+∥W2∥22+∥Qh∥22+∥r∥22+∥Uz∥22+∥Wz∥22+∥bz∥22+∥Ur∥22+∥Wr∥22+∥br∥22+∥Uc∥22+∥Wc∥22+∥a∥22+∥b∥22)
综上训练的loss 为:
L=Lt+λLreg
整体算法伪代码如下:
Experiments
Thoughts
联系作者