赞
踩
相关:
感谢小伙伴的提醒,从这一篇开始为了突出重点,将翻译部分全部移到自己的 个人博客 中( 5 M 带宽并且配置了 CDN 的服务器应该不会太慢,就是有点伤钱)。
所以接下来的内容将是简单明了的部分,一般而言会提到几个大家都关心的问题:
2018 Anomaly Detection with Generative AdversarialNetworks for Multivariate Time Series
论文下载以及源码地址:MAD-GANs 翻译
期刊:Lecture Notes in Computer Science(普刊)
引用索引 bib
论文提出了一种新的基于无监督GAN的异常检测 (GAN- AD) 方法,该方法通过建模多个时间序列之间的非线性关联,并基于训练好的 GAN 模型检测异常。
上图分为训练和检测两部分,这两部分之间的联系就是隐变量。这个与 VAE 异常检测类似,把数据特征存储在隐变量中,检测的时候隐变量则会派上用场。因为生成模型本身是不能直接输出与异常有线性关系的结果的。
继续看上图左边部分,这个是典型的 GAN 模型,GAN 模型的判别器与生成器 “相爱相杀”,生成器想方设法欺骗判别器而判别器又不断提高自己的识别能力。论文在 GAN 标准模型上添加了 LSTM 与 RNN。
继续看上图右边部分,异常检测部分首先从测试数据开始,将样本数据与隐变量空间建立映射关系,然后再把映射结果作为输入交给 GAN 的生成器,注意看上面的虚线,是指这个生成器是训练得到的。使用生成器对隐变量输入进行重构,然后与测试数据进行计算得到 Residual Loss ,同样将测试数据直接交给判别器进行计算得到 Discrimination Loss ,最后将这两个损失结合,得到最终的检测结果。
论文算法:LSTM-RNN-GAN-based Anomaly Dection Strategy。
训练时
算法这一块儿的内容大致如上,其他部分内容比如 Anomaly Detection Framework 中提到的使用 PCA 建立映射关系比较简单,而其他部分比如根据阈值进行异常打标实在是有凑公式凑字数的嫌疑。
实验使用的是 SWaT 数据集,可以前去 https://itrust.sutd.edu.sg/ 进行申请,一般填写学生邮箱就能申请成功,但是给的是谷歌云盘的资源地址,并且数据集非常大,一般是几个 G 起。
SWaT 数据是一个高维数据(共有51个维度),光从谷歌云下载下来就需要花费大量的时间。因此,不建议使用这个数据集。但是如果环境允许可以申请一下,了解一下。
论文源码https://github.com/LiDan456/MAD-GANs 提到可以考虑跑一下 KDD CUP 数据,数据集附加在源码文件夹中,解压即可用。并且已经是进行一些处理后的,比如不考虑异常的类型,只要是异常就把标签设置为 1 等。
具体步骤:
环境说明:
克隆项目
git clone https://github.com/LiDan456/MAD-GANs.git
解压文件夹
需要注意解压后的是这样的,不要添加额外的路径:
直接运行
python RGAN.py --settings_file kdd99
如果是使用 notebook 的话前面添加感叹号即可,具体效果如下:
对测试数据进行异常检测
python AD.py --settings_file kdd99_test
同样需要一些时间,输出的结果大致包括:
常见问题
一般情况下肯定都会出问题,莫方莫烦,逐个解决即可。
首先确保tensorflow版本
一般情况下 1.x 即可。我自己的环境是 1.15.4
其次是 keras 的版本
一般也是 1.x 即可,我的环境是 1.1.2
scipy报错
运行训练的时候报错。具体的报错内容是 ModuleNotFoundError: No module named 'scipy.misc.pilutil'
查了一下官网,这个库是旧版本的,所以方法就是降低版本或者不使用这个库,我们选择不使用
这个库,所以前去源码指定位置进行一波注释即可。
具体的文件地址是 data_utils.py
,其中的第14行,from scipy.misc.pilutil import imresize
根本后面就没用到,所以直接注释掉就好了。
numpy报错
在进行测试的时候,看到的报错。具体报错内容是 ValueError: Object arrays cannot be loaded when allow_pickle=False
方法也非常简答,把 model.py
中所有 np.load
都添加一个参数以及值为 True。如图所示:
linux解压7z文件
如果和我一样使用的是云服务器跑代码的话,或者本身自己用的就是linux系统的话,希望通过命令行解压也非常简单。安装方法与解压请 参考。
p7zip x data.7z
需要多长时间执行完
跟自己的机器性能有关,一般情况下……很久。叫上你的小伙先去吃顿饭吧。
运行时间太长
模型的训练需要很长时间(约半个小时),而模型的测试却需要更长的时间,简直可怕,我居然非常有耐心让它跑完了(睡觉第二天出结果)。
约 4.5 小时。所以如果希望早点结束运行的话,需要修改源码文件夹中的配置文件。experiments/settings/kdd99_test.txt
找到这个文件中的 num_epochs
,默认是 100
修改为 10
或者更小即可。
其他错误
我没有遇到其他问题,如果有遇到其他问题请在后面留言。
个人认为最大的优点就是开源,让大家可以跑一下玩一下了解一下,说不定也写到自己的论文的 REFERENCE 中。
其次论文相对而言比较简单,没有高深的数学理论和复杂的推导公式。
还有很不错的地方在于提供数据集让大家解压即可使用,这一点必须给作者以及作者团队点赞。
缺点就是凑字数的嫌疑太大了,比如 f1-score 的计算公式也写到论文中而且还算是5个公式是不是有点不太好,而且在算法中更新判别器和生成器的时候那个地方应该是存在错误的,两个地方都是更新判别器参数是非常不科学的。
但总体而言虽然这只是一个普刊上的论文,但是还是值得读一下,跑一下代码,了解一下的。如果觉得作者写得可以的话也请前去 github 点星星吧。自己的论文也可以考虑引用一下。作为对比实验之类的。
不知不觉这方面的博客写了这么长时间了,存在很多很多问题,也有不少小伙伴留言与私信交流这方面的内容,对我也有一些帮助,感谢!
如果有这方面的疑问欢迎留言讨论!
感谢 您的 阅读、点赞、收藏 和 评论 ,别忘了 还可以 关注 一下哈,感谢 您的支持!
Smileyan
2021.8.5 17:02
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。