0%

ssk NOVELTY DETECTION WITH RECONSTRUCTION ALONG PROJECTION PATHWAY

  • 作者

    Ki Hyun Kim, Sangwoo Shim, Yongsub Lim, Jongseob Jeon, Jeongwoo Choi, Byungchan Kim, Andre S. Yoon

  • 会议

    2020 ICLR

  • 贡献

    1、提出一种新的利用输入的隐藏层激活值和自编码器重构之后的隐藏层激活值异常检测方法RAPP,并且给出了识别输入异常的聚合函数

    2、给出了RAPP的动机,将重构的观点从输入空间扩展到隐空间。展示了重构输入之后再输入到网络的隐藏激活值与对应的原始输入的隐藏重构值是等价的。

    3、说明了RAPP在多个数据集上改进了基于自编码器的异常检测方法。此外,验证了RAPP的效果超过了最近的异常检测方法。

  • 介绍

    ​ 当只有正常值信息时应该如何来识别异常?异常检测是一种来识别数据样本相对于训练数据是否为离群点额方法,常见的例子有交易欺诈检测,视频监控,医学诊断和设备异常检测。最近深度自编码器和他们的变体在发现复杂数据的简洁表示方面展示出了杰出的表现,并且重构误差被用来作为一种检测异常值的受欢迎度量。但是这种方法有一种限制,只测量了输入空间的重构误差而没有充分利用隐空间中的层次表示。

    ​ 普通的基于重构的方法是通过比较输入层的输入数据和在输出层的重构数据之间的差别,RAPP把这种比较拓展到了隐空间。首先收集一些隐藏激活值通过将原始输入喂到自编码器中,然后将自编码器的重构值输入到自编码器中计算另一份隐藏层的激活值,这个过程不需要自编码器的额外训练。接下来通过聚合这两份隐藏激活值来量化输入的异常特性。最后,开发了两种度量标准,第一种测量了输入空间和隐空间的整个重构误差数量,第二种度量标准首先标准化了重构误差,然后再求和。

    ​ 介绍了开发RAPP的动机,展示了重构输入之后再输入到网络的隐藏激活值与对应的原始输入的隐藏重构值是等价的

  • RAPP

    ​ 下面来介绍提出的基于自编码器的异常检测方法:RAPP,主要的思想就是比较原始输入的隐藏激活值和沿着自编码器投影路径的隐藏重构。也就是说将输入和自编码器的重构映射到隐空间来得到成对的激活值。

    • 基于重构的异常检测

      ​ 一个自编码器 $A$ 是一个包含编码器 $g$ 和解码器 $f$ 的神经网络 $A=f \cdot g$ 编码器 $g$ 构造的空间叫做隐空间,提供了输入数据的更简洁的表示。

      ​ 出于这种无监督表示学习的属性,自编码器广泛用于异常检测。在正常的数据样本上训练自编码器,测试样本 $x$ 是否异常通过下式的重构误差 $\varepsilon $ 来度量:

      ​ 随着$\varepsilon (x)$的增大,测试样本 $x$ 更可能是一个异常,因为那意味着 $x$ 更加远离了自编码器所描述的流形。

      ​ 即使这种方法展示了在异常检测方面有前景的结果,但重构误差没有充分利用训练好的自编码器提供的信息,特别是当自编码器很深的时候。换句话说被自编码器所识别的层次信息被忽略掉了,层次表示学习是深度神经网络被证明最成功的能力之一。

    • 隐空间中的重构误差

      ​ 令 $A=f \cdot g$表示一个已经训练好的自编码器,$l$ 是编码器 $g$ 的隐藏层数量,$g=g_l\cdot …\cdot g_1$ ,定义$g$的部分计算为:

      其中$1\leq i\leq l$

      ​ 令$x$是输入向量,$\widehat{x}$是通过$A$的重构:$\widehat{x}=A(x)$。除了像普通自编码器那样在输入空间中比较$x$和$\widehat{x}$,还沿着$A$的投影路径来在隐空间中比较他们,也就是将$x$和$\widehat{x}$输入到$A$,得到成对的隐空间表示$(h_i,\widehat{h}_i)$,其中

      ​ 如下图所示,表示了计算$h_i$和$\widehat{h}_i$的过程,因此,样本$x$的异常性由公式$H(x) = { (h_i(x), \widehat{h}_i(x)) : 1 ≤ i ≤ l }$来度量。

      微信截图_20201003151333

      ​ 注意RAPP确实是普通重构方法的一般化,通过定义$g0$和$s{ord}$如下

      其中$h_0(x) = g_0(x) = x$,$\widehat{h}_0(x) = g_0(\widehat{x}) = \widehat{x}$

      ​ 在本文中定义了两个度量尺度$s{SAP}$和$s{NAP}$。当没有先验知识存在时,这两种度量尤其适用于选择层次以获得异常度量,注意,如果我们有关于空间的知识或者能够描述空间特征,可以设计出更精细的度量方法。

      • 沿着路径的简单聚合(SAP)

        ​ 这是一种最直接的定义在$H$上的度量方法,对于一个样本$x$,SAP可以定义为H中的所有pair之间的欧氏距离的平方和:

      • 沿着路径的标准化聚合(NAP)

        ​ 虽然SAP很直观,但是隐空间的属性,$H$中pairs的距离分布可能由于不同隐空间而有不同,例如,

        距离的大小会依赖于不同的层,或者可能存在跨层的相关神经元,这些神经元无意之中在SAP中被强调。所以为了捕获更清楚的模式,通过两个步骤来标准化这些距离:正交化和缩放。

        ​ 令 $\textbf{d}(x) = \textbf{h}(x) − \widehat{\textbf{h}}(x)$ ;给定一个训练集$X$,令$\textbf{D}$表示一个矩阵,它的第$i$行对应$\textbf{d}(xi)$,其中$x_i \in X$,令$\overline{\textbf{D}}$表示$\textbf{D}$的列优先中心(column-wise centered)矩阵,为了标准化,计算$\overline{\textbf{D}}$的SVD分解-$U\sum V^T$,得到奇异值$\sum $和右奇异向量$V$,对于一个给定的样本$x$,定义$s{NAP}$如下

        ​ 其中$\mu_X$表示D的列优先的平均值,$\textbf{d}(x)$表示为一个列向量。

  • RAPP的动机

    ​ 使用普通的重构方法会有一个很自然的问题:为什么只使用输入空间?或者说为什么不使用隐空间的信息?当重构误差在输入空间中广泛使用,任何类似的观点在隐空间中就都不存在。一个原因是对应的编码器层和解码器层无法保证表示出相同的空间,这是因为自编码器的目标函数没有任何涉及到中间隐藏层的激活值。因此,$f{l:i+1}(g(x))$不能被认为是$g{:i}(x)$的重构。

    ​ 下面会介绍一种非直接的方法来计算隐空间重构,准确的说会介绍$\widehat{h}i(x)=g{:i}(A(x))$确实等同于$g_{:i}(x)$的重构,整体机制如下所示

    微信截图_20201003201056

    • 隐空间重构的计算

      ​ 令$A=f\cdot g$为一个已经训练好的自编码器,令$M0={A(x):x \in \mathbb{R}^n}$表示为$A$所描述的低维表示,定义$M_i={g{:i}(x):x \in M0}$为由$g{:i}$定义的$M_0$的低维映像,$g$和$f$受限于$M_0$和$M_l$,是彼此之间的逆函数。

      量化隐空间的重构,我们首先假设存在一个解码器$\widetilde{f}=\widetilde{f}_1 \cdot… \cdot \widetilde{f}_l$,例如:

      ​ 其中第二个条件使$\widetilde{f}{l:i+1}$成为一个对应于$g{i+1:}$的合适的解码器,因此$\widetilde{f}$能够定义第$i$层的隐重构$\widehat{h}^{‘}_i(x)$,如下式所示:

      最终能够得到结论$\widetilde{h}^{‘}_i(x)$等同于$\widetilde{h}_i(x)$,对于任一$x \in M_0$,如下所示:

  • 评价

    使用了Kaggle和UCI中用来进行异常检测和多分类的数据集,如下表所示

微信截图_20201003230421

​ 为了比较RAPP和最近文章中的异常检测方法,也选取了一些基数据集来评估深度学习技术:MNIST和F-MNIST。

​ 使用AUROC将RAPP和其他的一些方法进行了比较,没有使用基于阈值的度量,例如F1-score,因为只允许在测试期间访问异常样本。

和基线的比较:

微信截图_20201003231256

和最近的方法的比较:

微信截图_20201003231303