参考:https://www.cs.sjtu.edu.cn/~linghe.kong/AI007/Download/%E7%AC%AC9%E8%AF%BE.pdf.
应该是上交AI的专业课。这里对异常检测做了分门别类和论文列举,有趣的是还看到了院长当年的论文被提及。
不同于常规模式下的问题和任务,异常检测 (Anomaly Detection ) 针对的是少数、不可预测或不确定、不符合预期模式的事件的识别,它具有独特的复杂性,使得一般的机器学 习和深度学习技术难以直接应用。
值得注意的是,异常检测除了”Anomaly Detection”以外,Novelty/Outlier/Forgery Detection等都是同义词,在搜索论文前需要知晓这一点。
异常检测的应用领域很多,这里不多赘述。异常主要是三类:
异常检测针对的数据也可以分为三类:
下面将针对不同类型的数据进行解读。
表格数据,也就是Tabular data、结构化数据。
从笔者和身边同学的学习和实践经历中发现,深度学习在表格数据上表现的不是那么优异,而随机森林这种Tree-based model表现不错。这可能是因为表格数据的特征不算多,这对Tree-based方法来说很好,但对神经网络来说优势不明显:神经网络适合特征多的数据,从而能够进行隐式的特征工程。
表格数据的异常检测有:
我们选几个来说。
基于距离的度量进行异常检测,比如kNN算法。
PPT中认为关键问题是如何度量Distance,特别是针对同时包含连续型和离散型变量的表格型数据,这一点在周志华老师的《机器学习》中聚类那一章已经讨论过了,这里不再赘述。
异常,更好理解的叫法是“离群点”,也就是离正常数据簇距离远的就是异常点,因此,先使用没有异常点的训练集得到一个聚类,在测试集中如果某一个点距离它最近的中心超过之前训练集里的最大距离的话,就判断它为异常点。
这个也是异常检测的经典模型了,作为SVM-based的模型,它们在LIBSVM和LIBLINEAR都有实现,笔者在几年年初也对相关的实现论文做了解读:https://welts.xyz/2022/01/31/one_class/. 其中对问题形式化的解读和描述应该是比较详细的,所以这里就不再重复了。
自编码器通过重构误差阈值来判定数据是否异常:
也就是,设编码器为$f$,解码器为$g$,给定数据$\pmb x$和阈值$\varepsilon$,观察$\Vert{\pmb x-f(g(\pmb x))}\Vert_v$,其中$v$是某种距离度量,如果
\[\Vert{\pmb x-f(g(\pmb x))}\Vert_v\geq\varepsilon\]则判定$\pmb x$异常。
应用场景包括:量化交易,网络安全检测、自动驾驶汽车和大型工业设备的日常监控和维护。
可以分为:
我们这里只介绍深度学习方法。基于深度学习的时间序列异常检测算法主要分为下面几种:
下图是三种异常评判标准的示意图,从左到右分别表示重构误差、预测误差、特征空间距离。
一般自编码器不再赘述,至于VAE,可以理解为一种更高级的AutoEncoder。笔者最近想写一篇对VAE论文的解读,奈何硬骨头太难啃…
基于GAN模型异常检测思路是,由真实数据和生成器生成的模拟数据喂给判别器训练,同时训练生成器和判别器。收敛后,辨别器认为数据属于真实的概率越低则代表数据异常程度越高。
基于RNN,通常用于异常检测有两种方法。
虽然RNN是对时间序列数据建模的主要选择,但CNN有时在某些不具有太长时间依赖的特定任务中表现更好。这种方式需要将多维数据看成图像来处理。为了捕捉长距离的依赖关系,时空卷积网络TCN也被用于时间序列的异常检测领域,TCN的卷积层结合了扩张卷积与因果卷积两种结构。因果卷积使得时间步$t$的输出只会根据$t-1$及之前时间步上的卷积运算得出,扩张卷积使得卷积核的感受野能扩展到整个序列,同时将每个单元间还引入了残差连接。
应用场景,比如检测交叉路口的监控视频中是否存在违规现象。该类异常检测分类两个级别:
图片级别异常检测有下面一些方法:
可以发现和前面的异常检测方法类似,没有什么新意。这里介绍一个我认为有新意的模型:DeepSVDD,是2018年ICML的作品。顾名思义,就是将深度神经网与SVDD模型结合:通过神经网络映射数据表征到超球面,异常数据落在球面外:
至于像素级别异常检测,有图片重构方法和特征建模方法。注意到图片级别的方法也能用到像素级别中,因为一张图片能分割为多个部分。这里不多做介绍。
本文的重点是异常检测的框架,而对模型的介绍显得不是那么重要。如果读者对具体的模型感兴趣,可以去看原来的课件。