论文标题 | SNAPSKETCH: Graph Representation Approach for Intrusion Detection in a Streaming Graph
论文来源 | MLG 2020
论文链接 | http://www.mlgworkshop.org/2020/papers/MLG2020_paper_1.pdf
源码链接 | https://github.com/rpaudel42/SnapSketch

TL;DR

论文中提出一种无监督的图表示学习方法 SNAPSKETCH 用于图流的异常检测问题。主要想法是基于随机游走和 Sketching 技术来生成固定大小的图向量表示,然后基于编码后的向量使用 RRCF 进行异常检测,可以达到实时异常检测效果。实验中验证本文中的方法优于其它 baselines,包括 SpotLight 和 StreamSpot。

Problem Definition

给定一个图流Gs={G1,G2,...,Gt,...}G_s = \{G_1, G_2,...,G_t,...\},目标是学习到一个 sketching functionf:GtvGtSd,d<<v2f: G_{t} \rightarrow v_{G_{t}} \in \mathbb{S}^{d}, d<<|v|^{2},使得vGtv_{G_t} 保留了图的结构属性和特征。

对于图流中tt 时刻的图GtG_tGtG_t 中生成长度为ll 的有偏随机游走路径为pGt={v1,v2,...,vl}p_{G_t} = \{v_1, v_2,... ,v_l\},论文中的名词定义如下:

  • shingle:路径pGtp_{G_t} 中连续的子序列。
  • n-shingle:路径pGtp_{G_t} 中长度为nn 的连续子序列,针对GtG_t 中每个节点生成的 shingle 集合StS_t,需要选择kkDiscriminative shingle 集合StkS_t^k 以随机概率rr 来映射到一个dd 维向量h[1,...,d]={1,0}h_{[1,..., d]}=\{1, 0\}Discriminative shingle 是指出现频繁的 n-shingle
  • Sketching:数据表示技术,例如将图GtG_t 映射到一个低维的向量vGtv_{G_t} 且同时保留了图的原始属性。
  • Cost vectorct=Stkc_t=|S_t^k| ,每个元素表示StkS_t^k 的数量。

论文想法是以映射向量hdh_d 和计数向量ctc_t 来将图GtG_t 映射到低维向量vGtv_{G_t},对此表示好奇 🧐,没有用到任何 deep learning 方法。

Algorithm/Model

论文主要的算法流程如下图所示:

SNAPSKETCH 框架

主要包含两步:

  1. 基于有偏随机游走生成 Shingles。
  2. Discriminative Shingle 映射成向量。

随机游走

对于图GtG_t 中的节点viv_i,长度为ll 随机游走路径wiw_i 符合以下分布:

P(wi=xwi1=v)={πvxZ if (v,x)e0 otherwise P\left(w_{i}=x \mid w_{i-1}=v\right)=\left\{\begin{array}{ll} \frac{\pi_{v x}}{Z} & \text { if }(v, x) \in e \\ 0 & \text { otherwise } \end{array}\right.

其中πvx\pi_{vx} 表示节点vvxx 间未标准化的转移概率即边的权重,ZZ 表示标准化常数。为了使邻居采样同时考虑到 BFS 和 DFS,论文中采用 node2vec 中相同的思路对于转移概率重新进行计算,

πvx=αpq(t,x)wvxαpq(t,x)={1p if dtx=01 if dtx=11q if dtx=2\pi_{v x}=\alpha_{p q}(t, x) \cdot w_{v x} \\ \alpha_{p q}(t, x)=\left\{\begin{array}{ll} \frac{1}{p} & \text { if } d_{t x}=0 \\ 1 & \text { if } d_{t x}=1 \\ \frac{1}{q} & \text { if } d_{t x}=2 \end{array}\right.

其中dtxd_{tx} 表示节点tt 和节点xx 间的最短距离。

基于随机游走生成的路径,可以得到集合StS_t,接下来就需要把StS_t 映射成dd 维向量。

哈希向量映射

向量映射的流程如下图所示:

向量映射

解释说明下:例如上图G1G_1G2G_2,SS 表示不重复的 n-shingle 集合,c1c_1c2c_2 表示每个图中 n-shingle 频率,可以通过c1c_1c2c_2 来计算G1G_1G2G_2 的相似度。

如果仅使用cc 向量来表示图,如果Gt+1G_{t+1} 中生成不同的 n-shingle 那么cc 的维度将会上升,因此论文是使用一种简单的哈希技术来将 topK discriminative n-shingles 进行映射而不是所有的 n-shingles 。

topK discriminative n-shingles 是指kk 个最频繁的 n-shingles,表示为StkS_t^k ,可以理解为从图中选择具有代表性的路径来表示图,kk 值太大能充分地表示图但是占用内存更大,kk 值小能够减少内存但是不能充分地区分图,因此这个超参数选择是个技术活。

Hashing Function

现在对于集合StkS_t^k 进行映射,先初始化dd 维向量映射向量为hd={1,0}h_d = \{1, 0\} 符合概率为rr 的随机分布:

kStk,h[1,,d]={1 probability r0 probability 1r\forall k \in S_{t}^{k}, h_{[1, \ldots, d]}=\left\{\begin{array}{ll} 1 & \text { probability } r \\ 0 & \text { probability } 1-\mathrm{r} \end{array}\right.

使用映射向量hdh_dGtG_t 可以映射到dd 维向量vGtv_{G_t}

vGt=ct×hdv_{G_{t}}=c_{t} \times h_{d}

其中hdh_d 表示StkS_t^kk×dk\times d 维映射向量,ctc_t 是 topK discriminative n-shingles 的计数向量,

ct=[cs1,,csk],csi=wsi×rsic_{t}=\left[c_{s_{1}}, \ldots, c_{s_{k}}\right], \quad c_{s_{i}}=w_{s_{i}} \times r_{s_{i}}

其中wsiw_{s_i} 表示SiS_i 中边权重之和,rsir_{s_i} 表示图GtG_tSiS_i 的频率。

得到了图固定大小的向量表示后,就可以使用一些现有的异常检测算法来进行异常检测,论文中使用的是随机割森林算法 (RRCF) 。整体的算法流程如下图所示:

SNAPSKETCH 算法

Experiments

论文中使用的数据集如下:

数据集

对于 SNAPSKETCH 论文参数设置:l=50,n=3,d=64,k=128l=50,n=3,d=64,k=128。这当然需要根据特定的场景进行设置。

实验效果如下:

性能对比

Thoughts

  • 论文中提供了一种 sketching 技术对有向加权图进行向量表示,在这个 graph embedding + graph neural network 盛行的时代算是一股清流,对于不采用黑盒方法的场景值得借鉴。
  • 存在的问题主要是模型参数比较多,而且是超参数不好优化。

Contact