Monitoring of a Dynamic System Based on Autoencoders

作者:神秘网友 发布时间:2020-10-26 00:13:54

Monitoring of a Dynamic System Based on Autoencoders

Monitoring of a Dynamic System Based on Autoencoders

这篇论文主要解决的是工业设备的异常检测问题。工业设备的异常检测主要面临2个问题:一是,模型需要具有 实时性,能够适应工业设备和生产环境的突然变化;二是,模型需要能够适应工业设备的 长期演化

为了解决上述2个问题,该论文提出了基于自编码器(LSTM-Autoencoder)的二阶(two-level)模型,使用ISO-20816标准定义的阈值来诊断异常,损失函数中加入了正则化项以提高模型的泛化性,超参数使用了贝叶斯优化的方法进行了调优。

Introduction

在该论文中作者主要关注的是涡轮压缩机的振动控制问题,涡轮压缩机的振动控制(vibration control)一直以来都是一个难以解决的问题,转子不平衡、轴快速制动、机械故障(如叶片破裂)、转子永久变形是造成转子振动的4个主要原因,这些振动又会进一步加速转子的老化。下图是论文中所使用的涡轮压缩机示意图,10个传感器用来持续地监控涡轮压缩机的运动。

Monitoring of a Dynamic System Based on Autoencoders
在ISO20816标准中,涡轮压缩机的振动分为4个等级,分别是Not allowed red Limit(18mm/S RMS 以上)、Threshold Limit(7.1至18mm/S RMS)、Average Threshold(2.8至7mm/S RMS)、Good Threshold(2.8mm/S RMS以下),这些阈值在本论文中作为异常检测的阈值。

Proposed Approach

设M个传感器被用来监控涡轮压缩机的实时状态,每个传感器 m i m_i mi?生成一段时间序列 ( x 1 i , x 2 i … ? ) (x^i_1, x^i_2 \dots) (x1i?,x2i?…)。每个传感器 m i m_i mi?都对应一个LSTM-Autoencoder模型 A E i AE_i AEi?。

编码器的结构是一个LSTM单元,它接受一批或者一段时间序列作为输入,然后更新隐状态,即 h t = L S T M ( h t ? 1 , x t ) h_t = LSTM(h_{t - 1}, x_t) ht?=LSTM(ht?1?,xt?),在时间序列的最后一步(记为 t 2 t_2 t2?),LSTM生成的细胞状态包含了之前序列的全部信息,即 c m i = L S T M ( h t 2 ? 1 , x t 2 ) c_{m_i} = LSTM(h_{t_2 - 1}, x_{t_2}) cmi??=LSTM(ht2??1?,xt2??),该隐状态在机器翻译里也被称作上下文向量(context vectors),解码器通过上下文向量来重构编码器的输入。

Monitoring of a Dynamic System Based on Autoencoders
解码器和编码器一样,也是一个LSTM单元,但是,在解码的时候论文里采用了teacher-forcing模式,也就是每一步的输入是上一步的预测或者是上一步的标签,解码器更新隐状态可描述为 h t = L S T M ( h t ? 1 , y t ? 1 , c m i ) h_t = LSTM(h_{t - 1}, y_{t - 1}, c_{m_i}) ht?=LSTM(ht?1?,yt?1?,cmi??),记传感器 m i m_i mi?生成的时间序列为 x i = ( x t 1 i , … , x t 2 i ) x_i=(x^i_{t_1}, \dots, x^i_{t_2}) xi?=(xt1?i?,…,xt2?i?),对应自编码器输出的预测时间序列为 y i = ( y t 1 i , … , y t 2 i ) y_i=(y^i_{t_1}, \dots, y^i_{t_2}) yi?=(yt1?i?,…,yt2?i?),那么损失函数定义为二者的MSE,即 M S E ( x i , y i ) = 1 t 2 ? t 1 ∑ t = t 1 t 2 ( x t i ? y t i ) 2 MSE(x_i, y_i) = \frac{1}{t_2 - t_1}\sum^{t_2}_{t=t_1}(x^i_t - y^i_t)^2 MSE(xi?,yi?)=t2??t1?1?t=t1?∑t2??(xti??yti?)2

在该论文中,模型既需要有足够的敏感度来恢复原始信号,也需要保证模型具有一定的泛化性,但实际上Autoencoder里的神经元大部分处于未激活状态,所以,为了探索更多的隐空间表征,作者加入了正则化项。具体而言,记输入 x ( i ) x^{(i)} x(i)经过隐含层单元以及激活函数后得到的值为 a j ( x ( i ) ) a_j(x^{(i)}) aj?(x(i)),那么该隐含层单元的平均激活值为 ρ j ^ = 1 m ∑ i = 1 m [ a j ( x ( i ) ) ] \hat{\rho_j} = \frac{1}{m}\sum^m_{i=1}[a_j(x^{(i)})] ρj?^?=m1?∑i=1m?[aj?(x(i))]。我们期望每个隐含层单元的激活值都接近于我们预设的稀疏参数 ρ \rho ρ,于是,我们可以借助KL散度来衡量偏离的程度,即 ∑ j = 1 n h u K L ( ρ ∣ ∣ ρ j ^ ) = ∑ j = 1 n h u ρ l o g ρ ρ j ^ + ( 1 ? ρ ) l o g 1 ? ρ 1 ? ρ j ^ \sum^{n_{hu}}_{j=1}KL(\rho||\hat{\rho_j}) = \sum^{n_{hu}}_{j=1}\rho log\frac{\rho}{\hat{\rho_j}} + (1 - \rho) log\frac{1 - \rho}{1 - \hat{\rho_j}} j=1∑nhu??KL(ρ∣∣ρj?^?)=j=1∑nhu??ρlogρj?^?ρ?+(1?ρ)log1?ρj?^?1?ρ?它可以看作2个伯努利分布之间的KL散度。将正则化损失与重构损失结合,就得到了整体的损失函数 J s p a r s e = J + λ ∑ j = 1 n h u K L ( ρ ∣ ∣ ρ j ^ ) J_{sparse} = J + \lambda\sum^{n_{hu}}_{j=1}KL(\rho||\hat{\rho_j}) Jsparse?=J+λj=1∑nhu??KL(ρ∣∣ρj?^?)但是,我在作者开源的代码里并没有找到上文提到的稀疏正则化处理,损失函数也只是普通的MSE。

def train(model,
          dataset,
          temperature=0.2,
          weight_decay=0.1,
          learning_rate=0.1,
          sparsity=0.05,
          sparsity_penalty=0.5,
          n_epochs=1,
          test_dataset=None):
    criterion = torch.nn.MSELoss()
    optimizer = torch.optim.Adam(
        model.parameters(), lr=learning_rate, weight_decay=weight_decay)

    train_losses = []
    test_losses = []
    for i in range(n_epochs):
        print('I: [train]@epoch {:3}'.format(i))
        config.epoch_idx = i
        train_loss = train_epoch(model, dataset, criterion, optimizer)
        train_losses.append(train_loss)
        if test_dataset is not None:
            test_loss = test(model, test_dataset, criterion)
            test_losses.append(test_loss)
    return np.array(train_losses), np.array(test_losses)

利用Introduction里提到的阈值,将系统和模型之间的差距超过阈值的定义为异常。同时为了减少系统突变对模型告警的影响,该论文在原本的阈值上加入了一个容忍度 ? ( t ) \epsilon(t) ?(t),它是前2个采样点之间二阶差分的绝对值,即 ∣ x i ( t ) ? y i ( t ) ∣ < θ + ? ( t ) ? ( t ) = α ∣ x i ( t ) + x i ( t ? 2 ) ? 2 x i ( t ? 1 ) ∣ |x_i(t) - y_i(t)| < \theta + \epsilon(t) \\ \epsilon(t) = \alpha|x_i(t) + x_i(t - 2) -2x_i(t - 1)| ∣xi?(t)?yi?(t)∣<θ+?(t)?(t)=α∣xi?(t)+xi?(t?2)?2xi?(t?1)∣

最后,由于系统状态是持续变化的(例如,零件的老化),所以模型需要适应这种持续的演化,为此,该论文提出了一种二阶模型,其基本思路是:首先在标准数据上训练模型,然后用训练好的模型监控系统的状态,在监控过程中未超过阈值的数据被收集起来用作新的训练集,模型继续拟合新的训练数据,使用贝叶斯优化调整超参数。

Monitoring of a Dynamic System Based on Autoencoders

Experiment

该论文的实验设计部分,我认为还比较有意思,实验验证了摘要中提到的实时性和捕捉系统持续变化的能力。

论文使用的实验装置在Introduction中已经有介绍,数据来自10个传感器,每个传感器的采样频率是1Hz,对于每个传感器生成的时间序列,作者还按照固定的时间窗口进行切片,相邻的切片之间有一部分重叠。

下图(b)是使用t-SNE对隐空间表征进行降维后的结果,颜色的深浅表示时间的先后,从图中确实可以看出二阶的自编码器能够捕捉到系统的持续变化。

Monitoring of a Dynamic System Based on Autoencoders
在摘要中作者提到,模型不仅要能够捕捉系统的演变,还需要具有实时性,下图的实验就是为了验证系统的实时性,从图中可以看出当系统发生突变时,模型能够在较短的延迟内跟进系统的突变,从而证明该模型具有实时性。实时性是由公式(7)中的阈值和容忍项所共同决定的。

Monitoring of a Dynamic System Based on Autoencoders
最后一个实验,作者使用fANOVA对影响模型表现的超参数进行了比较,发现LSTM隐含层数以及teacher-forcing的随机参数对模型的影响较大。更进一步,作者发现隐含层维度超过输入数据的维度时能够取得更加好的重构效果。

Monitoring of a Dynamic System Based on Autoencoders
参考文献:
[1] Osmani, A., Hamidi, M. and Bouhouche, S., 2019, August. Monitoring of a Dynamic System Based on Autoencoders. In IJCAI (pp. 1836-1843).
[2] Ng, A., 2011. Sparse autoencoder. CS294A Lecture notes, 72(2011), pp.1-19.

Monitoring of a Dynamic System Based on Autoencoders相关教程

  1. training 01 recursion and dynamic programming

    training 01 recursion and dynamic programming recursion: find a recursion base and try to using recursion function to simplify the problem POJ 1664 放苹果: base: n=1 return 1 recursion function: case1: one disk without any apples thenre

  2. Response.Redirect(string url)报错:System.Threading.ThreadAb

    Response.Redirect(string url)报错:System.Threading.ThreadAbortException: 正在中止线程。 今天用Response.Redirect(string url)重定向时,生产环境总是报ThreadAbortException异常,而调试时没问题。在网上查了很久,都是一样的解决方案,写的貌似很详细

  3. Appscan 扫描时出现 Exception of type ‘System.OutOfMemoryExc

    Appscan 扫描时出现 Exception of type ‘System.OutOfMemoryException‘ was thrown. mscorlib解决方案 1.磁盘要求:修改临时文件路径 有时候大家会发现,已经把上面的地址都修改到了其他盘,但是在扫描过程中,还是会发现 C 盘的空间快速被消耗,分析原因,

  4. EventSystem

    EventSystem 简介 Input IPointerEnterHandler等接口 键盘,鼠标,操作杆 Input GetAxis:返回float,对应的name为InputSetting对应的 GetButton:返回bool,对应的name为InputSetting对应的 GetKey:返回bool - KeyCode:对应键值- string:对应InputSetting

  5. Hadoop:loadFileSystems error exception: ExceptionUtils::ge

    Hadoop:loadFileSystems error exception: ExceptionUtils::getStackTrace error 问题分析 hadoop版本:hadoop-2.5.0 jdk:jdk1.8.0_51 在用hdfs.h中的C接口连接hadoop集群时出现以下问题: loadFileSystems error: (unable to get stack trace for java.lang

  6. Abp.AbpBootstrapper - System.MissingMethodException: Method

    Abp.AbpBootstrapper - System.MissingMethodException: Method not found: ‘Void Ab Abp报错: FATAL 2020-10-22 14:06:42,494 [1 ] Abp.AbpBootstrapper - System.MissingMethodException: Method not found: 'Void Abp.Configuration.SettingDefinition..

  7. 攻防世界 web高手进阶区 10分题 Background_Management_System

    攻防世界 web高手进阶区 10分题 Background_Management_System 前言 继续ctf的旅程 开始攻防世界web高手进阶区的10分题 本文是Background_Management_System的writeup 进入界面 根据提示 应该要想办法获取管理员权限 与数据库有关,可能存在sql注入 关键词过

  8. D - Access System(排序)ZOJ

    D - Access System(排序)ZOJ 原题链接: Access System 测试样例 Sample Input 3 2 1 12:30:00 12:30:01 5 15 17:00:00 17:00:15 17:00:06 17:01:00 17:00:14 3 5 12:00:09 12:00:05 12:00:00 Sample Output 2 1 2 3 1 2 4 2 2 3 题意: 当门是关闭的时候学