关于“基于自编码器的异常检测算法”的一些想法

发布时间 2023-04-23 12:06:45作者: 澳大利亚树袋熊

最近在看自编码器相关的文章,我对这种算法的原理产生了极大的疑惑,为什么选择loss作为判断异常的标准呢?

我想,原作者肯定是这么想的:

1)只输入正常数据,那么模型将只会学习到正常数据的分布。推理时,模型可以很好地重构正常信号,正常信号引起的loss值会很小。

2)模型没有学习到异常数据的分布,也不能够重构异常信号,异常信号引起的loss值会很大。

但实际上,正常数据和异常数据的分布是相近的,只输入正常数据,编码器也会学到异常数据的分布。

因此,我猜测:如果采用一些特定的网络学习一些特定的信号,只训练正常数据,也可以重构异常信号,异常信号和正常信号的loss没区别。此时,使用自编码器进行异常检测是必然失效的。

恰好,我手头上有一些正常电机和故障电机的振动频谱数据,这个故障类型是未知的(我猜测可能是定转子或轴承故障),正好拿来做训练,以验证我们的想法。

首先,我搭建了一个全卷积层的网络,这个网络没有pool、BN,原因很简单:1)pool层其实是一种滤波,会丢失一些细节,在后续的重构中,也许没办法恢复这些细节。事实上,使用pool层的网络的重构损失确实大于没有使用的。2)加入BN层重构损失也会变大,但为何变大尚不明确。总之,为了确保重构损失够小,这个全卷积网络,仅有卷积层和激活函数。