Deep-SVDD:深度单分类异常检测模型
论文标题 | Deep One-Class Classification
论文来源 | ICML 2018
论文链接 | http://proceedings.mlr.press/v80/ruff18a.html
源码链接 | https://github.com/lukasruff/Deep-SVDD-PyTorch
TL;DR
基于核的单分类异常检测方法难以处理高维样本特征而且计算效率低,因此论文中对此类方法进行优化提出了深度 Deep SVDD 模型。主要想法是利用神经网络训练来最小化计算样本特征空间的划分超球面,然后根据球心和测试样本点间的距离来判定样本点是否是异常。实验部分在 MNIST 和 CIFAR-10 图片数据集中验证了 Deep SVDD 模型的有效性。
Algorithm/Model
传统基于核方法的 SVDD 方法可以参考另一篇文章:SVDD:支持向量数据描述
论文中提出的模型架构如下图所示:
首先需要将样本点的特征点映射到体积最小的超球面中,论文中采用了神经网络的方法。当然这一步可以有不同的方法做 embedding。
假设输入样本空间,输出,神经网络的特征映射函数为,对应的参数为,对于样本 的特征表示为,Deep SVDD 的目标是使输出特征空间中的样本点在最小的体积的超球面中,超球面可以使用球心 和半径 进行表示。
对于给定的训练样本点集合,定义 Deep SVDD 的 soft-boundary 的优化函数为
这种范式下训练数据中既可以存在正样本也可以存在负样本,和传统 SVDD 相差不大。第一项表示最小化超球面体积;第二项表示位于超球面外的惩罚项,其中超参数 来平衡边界;第三项表示网络权重正则化防止过拟合。
由于训练数据中大部分样本点都是正常的,因此论文对目标函数进行简化提出 One-Class Deep SVDD 范式
对于测试样本点,可以定义异常分数为输出空间中样本点到超球面球心的距离
其中 表示训练后模型的权重。
训练
- One-Class Deep SVDD 直接利用 SGD 进行优化。
- soft-boundary 范式在进行优化时需要借用 minimization/block coordinate descent 的方法,即固定 R,网络训练 k 轮优化参数 W;每经过 k 轮,利用最新更新的 W 来优化参数, 可以通过 line search 进行搜索。
优化
权重是全0的话,网络产生一个常数函数映射到超球中心,导致超球崩溃,因为超球半径为0,因此网络权重不可以为 0。
网络中的隐藏层有偏移项 bias,将会学习到一个常数函数映射导致超球崩溃,,因此不需要偏移项。
具有有界激活函数的网络单元,会在后续层中模拟偏移项, 因此在 Deep SVDD 中应首选无界激活函数如 ReLU,以避免由于“学习”偏移项导致的超球崩溃。
Experiments
实验部分论文将 Deep SVDD 与一些浅层模型和深度模型进行比较,实验结果如下所示
整体而言优于之前的 baselines,详细的实验配置和分析参考原文,不再分析。
Thoughts
- 论文中提出的模型针对异常检测任务优化,感觉比一些基于重构或者生成模型的方法新颖点;👍
- 对于样本点映射这一步可以考虑下优化?例如正常的样本同样的可以分为多个类别,映射到一个超球体中是不是不太合理?可以映射到多个超球体来计算异常,感觉有点像聚类!
推荐下 KDD CUP 2021 的时间序列异常检测竞赛 https://compete.hexagon-ml.com/practice/competition/39/,mark!🤭