自编码器的一项重要应用是在异常检测这类任务中,也被称为离群点检测。其基本思想巧妙而简洁:如果自编码器经过训练能够有效重构“正常”数据,那么当它尝试重构明显异于所学常规的数据点时,表现就会很差。重构质量的这种差异便成为识别异常的依据。
基本原理:学习常态
自编码器擅长学习输入数据的压缩表示(编码),然后从这些表示中重构原始数据。异常检测的策略是专门或主要使用被认为是正常的数据样本进行训练。网络学习正常数据分布中固有的潜在模式、结构和统计特性。训练期间的目标是最小化重构误差 Lrec,它衡量输入 x 与其重构 x′=D(E(x)) 之间的差异,其中 E 代表编码器,D 代表解码器。Lrec 的常见选择包括用于连续数据的均方误差 (MSE) 或用于二进制数据的二元交叉熵 (BCE)。
Lrec(x,x′)=∣∣x−x′∣∣22(例如,均方误差)
一旦训练完成,自编码器应能熟练重构训练时遇到的类似输入(正常数据),产生较低的重构误差。相反,当遇到异常输入时,即不符合学习到的模式的数据,自编码器将难以准确重构,导致重构误差明显升高。
设定异常阈值
实际操作时,需要定义一个阈值 ϵ。如果给定输入样本的重构误差超过此阈值,则该样本被标记 (token)为异常。
异常状态={异常,正常,若 Lrec(x,x′)>ϵ若 Lrec(x,x′)≤ϵ
确定一个合适的值 ϵ 是重要的一步。常见方法包括:
- 在正常训练数据集上训练自编码器。
- 计算由完全正常数据组成的单独验证集的重构误差。
- 分析这些重构误差的分布。
- 根据此分布设定阈值。例如,ϵ 可以设置为平均误差加上一定数量的标准差 (μ+kσ),或者设置为验证误差的某个高百分位数(例如,第95或99百分位数)。
阈值的选择代表着检测真实异常(灵敏度)与错误地将正常数据标记为异常(误报率)之间的权衡。
正常数据和异常数据重构误差的示例分布,显示了可能的阈值设置。
自编码器在异常检测中的适用性
自编码器为此项任务带来多项优势:
- 无监督学习 (supervised learning) (unsupervised learning): 它们通常不需要带标签的异常数据进行训练,而这类数据往往稀缺、昂贵或难以全面获取。训练侧重于正常行为的特征。
- 非线性关系: 与基于线性相关的 PCA 等方法不同,自编码器,特别是深层自编码器,能够捕获正常样本数据流形中复杂的非线性模式。
- 维度处理: 它们通过在瓶颈层学习低维表示,能自然地处理高维数据(例如图像、传感器读数或系统日志)。
架构选择
虽然基本的自编码器也能发挥作用,但根据数据类型,不同的架构可能更合适:
- 卷积自编码器 (CAE): 对图像或空间数据有效,能保留空间层次结构。异常可能表现为卷积层重构不佳的结构偏差。
- 循环自编码器 (RAE): 适合序列或时间序列数据(例如随时间变化的传感器读数、系统日志)。异常可能是异常的时间模式。
- 变分自编码器 (VAE): 虽然主要用于生成,但 VAE 也可以用于异常检测。异常分数可以从重构概率或 ELBO 损失的组成部分中得出。其概率特性有时能提供对数据典型性不同的视角。
- 去噪自编码器 (DAE): 通过学习从损坏版本中重构干净数据,DAE 可以成为潜在数据流形的学习器,这可能使其对正常数据中的微小变化不那么敏感,同时仍能突出重要的偏差。
实际考量与挑战
尽管功能强大,但自编码器在异常检测中的应用也面临一些挑战:
- 假设有效性: 核心假设是异常会产生更高的重构误差。如果某个异常出奇的简单,或者恰好接近学习到的正常数据流形,这个假设可能不成立。
- 阈值敏感性: 性能高度依赖于所选的阈值 ϵ。其选择需要仔细验证。
- 概念漂移: 如果“正常”的定义随时间变化,用旧的正常数据训练的模型将开始对新的正常样本产生高误差,需要重新训练。
- 超参数 (parameter) (hyperparameter)调整: 自编码器的架构(层数、层大小、潜在维度大小)、损失函数 (loss function)的选择、优化器以及正则化 (regularization)技术都会影响其有效建模正常数据的能力,从而影响异常检测性能。这需要仔细调整,通常以正常验证集上的误差分布为指导。
总而言之,自编码器提供了一种多功能且强大的工具,用于异常检测,特别是在涉及高维复杂数据且带标签异常稀缺的场景中。它们的有效性源于其学习表征正常数据的压缩表示的能力,使得通过增加的重构误差来识别偏离此常态的情况成为可能。要取得成功,需要在代表性的正常数据上进行仔细训练,并慎重选择异常阈值。