自编码器(autoencoder)是如何工作的?
别担心,我们有一种易于理解的解释!
让我们一起探索自编码器的世界。
1、概述
自编码器是人工神经网络。它们通常用于异常检测。
此外,它们属于半监督方法,因为你只用数据的正常状态来训练它们。
自编码器的训练主要依赖于正常状态的数据。这意味着,虽然可能有大量的交易数据可用,但是在训练阶段,只选用没有异常或欺诈标记的数据。这些数据被认为是“未标记”的,因为它们没有直接用于表示数据是正常还是异常的标签。
这种方法被称为半监督的,因为它不完全依赖于有标签的数据(例如,完全标记为正常或异常的数据)来进行学习。相反,它主要使用未标记的数据(在这种情况下,假设所有训练数据都是正常的,因此没有明确的异常标签)来学习数据的正常模式。然而,与传统的无监督学习相比,这种方法的目的是明确的——检测异常或偏离正常模式的数据点。
2、工作原理是什么?
自编码器模型尝试有效地压缩输入(编码),最后重建这种压缩(解码),以便重建尽可能地与输入数据匹配。压缩层称为潜在表示(latent representation)。
3、编码器和解码器
因此,网络由两部分组成:
编码器函数 z = g(x) 和解码器函数 x′ = f(z)
图表显示了自编码器的一般结构。
4、使用Tensorflow的实现(I)
这是一个自编码器的逐步实现。
?代码展示了编码器和解码器的实现。
编码器将数据压缩为两个特征。然后,自编码器基于这两个特征进行解码。在这个上下文中,自编码器尝试重建输入。
自编码器的目标是尽可能好地重建输入。我们使用ELU作为激活函数。激活函数的选择取决于用例和数据。
ELU,即指数线性单元(Exponential Linear Unit),是一种用于神经网络中的激活函数,由Djork-Arné Clevert, Thomas Unterthiner, 和Sepp Hochreiter在2015年提出。ELU旨在解决ReLU(Rectified Linear Unit,修正线性单元)激活函数在训练过程中可能遇到的一些问题,尤其是“死亡ReLU”问题,即某些情况下神经元永久不激活的问题。
5、使用Tensorflow的实现(II)
接下来,我们可以训练我们的模型。
看看以下Python代码:
?首先,我们用特征数量初始化我们的模型。然后,我们定义我们的优化器并设置学习率。在我们的案例中,我们使用Adam优化器。
最后,我们用优化器和损失函数编译我们的模型。此外,我们使用MSE作为损失函数。
我们还通过在五个连续的周期中验证损失不变时停止训练来定义一个早停(early stopping)。
6、使用Tensorflow的实现(III)
接下来,我们可以在我们的测试数据上使用我们的自编码器。
你可以用以下代码做到这一点:
?一旦自编码器经过训练和验证,我们可以在测试数据上试用模型。
自编码器尝试尽可能好地重建测试数据的输入。自编码器很好地重建了正常观察。另一方面,它必须差地重建异常观察。
我们可以使用MSE计算输入和重建之间的错误。异常观察产生大的MSE,而正常观察产生小的MSE。
7、用例
一个典型的例子是使用自编码器进行工业设备的异常检测。在制造业中,设备故障可能导致生产中断、成本增加和安全风险。通过监测设备状态数据(如温度、振动、压力等传感器数据)来识别潜在的异常或故障模式,可以及时进行维护或干预,从而避免这些问题。
案例背景
在一个具体的工业设备异常检测案例中,假设我们有来自多个传感器的时间序列数据,这些传感器安装在关键的生产线设备上。这些数据包括但不限于设备的温度、振动频率、功耗等指标。正常运行条件下的数据已经被收集和标记,但异常状态的数据较少或未知。
方案步骤
- 数据预处理:
- 特征提取:从原始时间序列数据中提取有意义的特征,如统计量(平均值、标准差等)、频域特征等。
- 数据标准化:标准化或归一化特征数据,确保模型训练的效果。
- 构建自编码器模型:
- 设计一个自编码器架构,其中编码器部分用于学习输入数据的压缩表示,解码器部分用于尝试重建原始输入。
- 模型可以是全连接的神经网络,具体取决于输入数据的性质和复杂度。
- 训练模型:
- 使用正常运行条件下的数据训练自编码器。目标是最小化重建误差,即原始输入和重建输出之间的差异。
- 异常检测:
- 在模型训练完成后,使用它来重建新的传感器数据。计算重建误差,即原始输入和重建输出之间的差异。
- 基于训练数据集上的重建误差分布,设定一个阈值来判断异常。重建误差高于此阈值的情况被标记为异常状态。
- 部署与监控:
- 将训练好的自编码器部署为实时监控系统,持续监控设备状态。
- 当系统检测到异常时,发出警报并通知维护团队进行检查或采取预防措施。
优势
- 早期识别:通过持续监控,可以在问题成为显著故障之前识别出设备的微小变化或异常。
- 减少停机时间:通过预防性维护减少意外停机,提高生产效率。
- 降低维护成本:避免了大规模故障的发生,减少了维护成本和潜在的安全风险。
本文暂时没有评论,来添加一个吧(●'◡'●)