当前位置: 首页 > news >正文

时序解耦自编码器:用 β‑VAE 和 TCN 实现铣削刀具磨损的可解释异常检测

模型说刀具已经失效,可它是根据哪一路振动?哪一段切削时间?

传统的异常检测方法往往将多传感器信号拼接成一个大向量,然后扔进黑箱模型,虽然能输出健康/退化/失效的标签,却无法回答一个对工程师至关重要的问题:判断依据是什么?是主轴振动异常加剧,还是电流波动超出了正常范围?

提出方法尝试从2个角度同时破局:一是利用时序卷积网络TCN捕获切削过程中的长期依赖关系,二是采用 β‑变分自编码器将信号映射到可解释的隐空间,并分别从输入空间(重构误差)和隐空间(KL 散度)给出异常分数。更重要的是,还展示了如何通过对比这两个空间的分数趋势、各传感器的单独贡献以及不同切削参数下的性能差异,让模型从黑箱变成白盒。

01 问题动机:多传感器时序数据的黑箱困境

在铣削加工中,刀具磨损是一个渐进且非线性的过程,工业现场通常安装多种传感器:主轴/工作台上的声发射传感器、加速度传感器以及驱动电机的电流传感器。这些信号的时间跨度长(数万采样点),且相互之间耦合复杂。

传统做法包括:

  • 基于统计特征:提取均方根、峭度等,然后送入 SVM 或随机森林,缺点是需要手工设计特征,且丢失了时序动态信息。

  • 端到端时序网络:如 LSTM、TCN,可以自动学习时序模式,但输出只有类别概率,工程师无从得知模型到底关注了哪个传感器、哪个时段。

目标是设计一个既保持高检测率,又能揭示故障演化过程的模型,β‑VAE 天然具备解耦表示学习的能力——通过调节 β 超参数,强制隐变量分解为相互独立的因子(如整体磨损程度、振动主频偏移量等)。而 TCN 的因果卷积结构使得网络只能利用当前及历史信息,避免未来信息的泄漏,更贴近实时监测场景。

02 方法架构:β‑VAE + TCN 的联合设计

2.1 数据预处理与滑动窗口

原始数据包含 167 次切削试验,每次切削持续约 36 秒(12kHz 采样率),提取 6 路信号:AE 主轴、AE 工作台、振动主轴、振动工作台、直流电流、交流电流。采用窗口长度 64、步长 64 进行切分,每个窗口覆盖约 0.13 秒的加工过程。根据刀具后刀面磨损量将窗口标签划分为:健康(磨损<0.2mm)、退化(0.2–0.7mm)、失效(>0.7mm)。值得注意的是,模型训练仅使用健康样本,这是典型的一类分类策略——因为很难预先获得所有可能的退化/失效模式。

2.2 编码器:TCN 下采样 + 重参数化

编码器由堆叠的 TCN 模块和最大池化层组成,TCN 采用因果空洞卷积,其感受野随层数指数增长,能够捕捉长距离的时序依赖。通过多次下采样,将 64×6 的输入压缩为一维隐向量 z(维度通常设为 10–40)。该隐向量的均值和方差分别由2个全连接层输出,再通过重参数化技巧采样得到 z。

2.3 解码器:上采样 + TCN 重构

解码器是对称结构:全连接层将隐向量放大至池化前的尺寸,随后使用 UpSampling1D 交替上采样,再由 TCN 精细还原波形。输出层采用 Sigmoid 激活函数,使重构值保持在 [0,1] 范围(信号已归一化)。损失函数由2项组成:

  • 重构误差:交叉熵(等价于 MSE,因为信号已二值化处理)。

  • β 加权的 KL 散度:衡量隐分布与标准正态分布的差异。当 β > 1 时,模型被强制学习更解耦、更紧凑的隐表示。

2.4 异常分数与阈值

对于测试样本,计算两种异常分数:

  • 输入空间分数:窗口内 6 路信号的重构均方误差MSE,MSE 越大,说明当前模式偏离健康样本越远。

  • 隐空间分数:编码器输出的 KL 散度,KL 散度反映隐变量与标准正态的偏离程度,对早期磨损更加敏感。

在验证集上,将失效类(label=2)视为正类(异常),健康类(0)视为负类,通过网格搜索最大化 PR‑AUC 来选择最佳阈值。然后使用该阈值在测试集上评估最终性能。

03 可解释性:四个维度的白盒分析

设计了4组互补的分析实验,分别验证模型的物理合理性。

3.1 输入空间 vs 隐空间:哪一个更早预警?

在一次完整的切削试验中,沿着时间轴绘制 MSE 和 KL 散度的变化曲线。观察到KL 散度在磨损进入退化阶段(≈0.2mm)时即出现明显抬升,而 MSE 直到失效阶段(>0.7mm)才剧烈变化。这说明隐空间对早期异常更敏感,适合做预警;而输入空间更适合确认失效。两者搭配可以形成早期预警+后期确认的双重保险。

3.2 各路信号的独立贡献:是电流还是振动出了问题?

将解码器的输出改为只重构某一路信号(其余通道留空),计算该路的单独 MSE。结果发现:在健康→退化阶段,AE 工作台的 MSE 率先升高;而在退化→失效阶段,直流电流和振动主轴的 MSE 贡献最大。这一发现与切削物理一致——早期刀具磨损表现为高频声发射变化,后期则引起主切削力(电流)和颤振(振动)的显著改变,工程师可以据此定位需要优先检修的子系统。

3.3 不同切削参数的影响:模型泛化能力检验

铣削实验涵盖 16 种不同的切削条件(铸铁/钢、进给率 0.25/0.5 mm/齿、切削深度 0.75/1.5 mm)。我们将测试集按照这些参数分组,分别计算每组在隐空间上的 PR‑AUC。结果显示:

  • 铸铁的性能(PR‑AUC=0.92)优于(0.86),可能是因为铸铁的断屑更规则,信号信噪比更高。

  • 高进给率(0.5)的性能高于低进给率(0.91 vs 0.84),高进给加剧了磨损进程,使异常特征更容易被捕获。

  • 不同切削深度之间的差异较小(0.90 vs 0.88)。

这些对比不仅验证了模型的鲁棒性,也为实际应用中针对不同工况单独校准阈值提供了依据。

3.4 对比输入空间与隐空间的 PR‑AUC

在测试集上,输入空间(MSE)的 PR‑AUC 为 0.89,隐空间(KL)的 PR‑AUC 为 0.92。两者显著优于随机猜测(0.07)。若将两种分数做简单平均,PR‑AUC 可进一步提升至 0.94。这证明两个空间提供了互补信息,融合是有益的。

class Sampling(layers.Layer): """重参数化采样层:从 N(mean, exp(log_var)) 采样""" def call(self, inputs): mean, log_var = inputs epsilon = tf.random.normal(tf.shape(log_var)) return mean + tf.exp(0.5 * log_var) * epsilon def build_beta_vae(input_shape, codings_size=10, beta=1.25, conv_layers=3, filters_start=32, kernel_size=2, dilations=[1,2,4]): """构建 β-VAE,编码器和解码器均采用 TCN + 上采样/下采样""" window_size, feat = input_shape # ---------- 编码器 ---------- inputs = keras.Input(shape=(window_size, feat)) x = inputs # 多层 TCN + 最大池化(降维) for _ in range(conv_layers): x = TCN(nb_filters=filters_start, kernel_size=kernel_size, dilations=dilations, padding='causal', use_skip_connections=True, return_sequences=True, activation='selu')(x) x = layers.BatchNormalization()(x) x = layers.MaxPool1D(pool_size=2)(x) x = layers.Flatten()(x) mean = layers.Dense(codings_size)(x) log_var = layers.Dense(codings_size)(x) z = Sampling()([mean, log_var]) # 隐变量 encoder = keras.Model(inputs, [mean, log_var, z], name='encoder') # ---------- 解码器 ---------- decoder_input = keras.Input(shape=(codings_size,)) # 全连接重塑回池化前的维度 pool_steps = window_size // (2 ** conv_layers) h = layers.Dense(filters_start * pool_steps, activation='selu')(decoder_input) h = layers.Reshape((pool_steps, filters_start))(h) # 上采样 + TCN for _ in range(conv_layers): h = layers.UpSampling1D(size=2)(h) h = layers.BatchNormalization()(h) h = TCN(nb_filters=filters_start, kernel_size=kernel_size, dilations=dilations, padding='causal', use_skip_connections=True, return_sequences=True, activation='selu')(h) outputs = layers.Conv1D(feat, kernel_size=1, padding='same', activation='sigmoid')(h) decoder = keras.Model(decoder_input, outputs, name='decoder') # ---------- 完整 β-VAE ---------- _, _, z = encoder(inputs) recon = decoder(z) vae = keras.Model(inputs, recon) # 添加 β 加权的 KL 散度损失 kl_loss = -0.5 * beta * tf.reduce_sum(1 + log_var - tf.exp(log_var) - tf.square(mean), axis=-1) vae.add_loss(tf.reduce_mean(kl_loss) / (window_size * feat)) vae.compile(optimizer='adam', loss='binary_crossentropy') return vae, encoder, decoder

参考文章:

时序解耦自编码器:用 β‑VAE 和 TCN 实现铣削刀具磨损的可解释异常检测

如果你对信号滤波/降噪,机器学习/深度学习,时间序列预分析/预测,设备故障诊断/缺陷检测/异常检测有疑问,或者需要论文思路上的建议,欢迎学术付费咨询(kang20224)

工学博士,《MSSP》《中国电机工程学报》《宇航学报》《控制与决策》等期刊审稿专家,擅长领域:信号滤波/降噪,机器学习/深度学习,时间序列预分析/预测,设备故障诊断/缺陷检测/异常检测

http://www.zskr.cn/news/1408327.html

相关文章:

  • novel-downloader:全网小说下载终极方案,一站式解决离线阅读难题
  • Kubernetes日志管理与分析:构建全面的日志体系
  • 从像素到地图:解析航摄比例尺、地面分辨率与成图精度的三角关系
  • C语言--day20
  • 仿生六足机器人分层网络控制:从CPG原理到工程实现
  • 组合导航 | 基于matlab的开源卫惯组合导航算法总结汇总
  • 实测DeepSeek V4 Pro接入CodeX,今后CodeX也可以使用Deepseek了。
  • 20260527 之所思 - 人生如梦
  • 从传感器配置到Rviz可视化:深入解析Xsens MTI-G-710在ROS中的坐标系与数据流(附display.launch详解)
  • 27考研408计算机历年真题PDF
  • 都在说油车不行,可是经销商倒闭、夸张的1亿订单都与电车有关!
  • 非对称双向DC/DC转换器主动功率均分控制:原理、模式与实现
  • 靠谱的缙云电视机柜定制厂家
  • 编程的基石:探究新手程序员为何需要学习C语言?
  • REIS:基于存储内处理的高性能RAG检索系统优化
  • Unity 3D基础:3D模型的导入与材质赋值
  • PHP技术周刊 2026年第17周
  • 大模型入门必看:小白程序员转岗AI Agent的完整学习路径,速收藏
  • 034、实例分割重叠粘连难以区分?Mask R-CNN 输出后处理与轮廓精修方案
  • 告别默认安装:用RStudio 1.3.959 + R 3.0.1复现经典数据分析环境
  • Claude智能体API成本优化:从架构设计到监控的实战指南
  • Go测试工具:从单元测试到集成测试
  • 分数阶Sigma-Delta调制器设计与实现【附代码】
  • 【数据挖掘实战】从二元变量到相似度矩阵:Jaccard系数与简单匹配系数的场景化选择指南
  • 面向医疗诊断 Agent 的 Harness 危急值优先通道
  • 光伏CF-DAB转换器效率优化:最小RMS电流与ZVS的协同控制策略
  • 全双工大规模MIMO中联合波束成形与天线选择的自干扰抑制技术
  • 保姆级教程:用ROS和MAVROS在Gazebo中实现PX4无人机Offboard模式起飞(附完整代码)
  • CentOS 7从VMWare搬到Hyper-V后卡在dracut?手把手教你修复硬盘驱动问题
  • 卡梅德生物技术快报|镍柱纯化蛋白的原理:原核表达实操:融合蛋白构建与镍柱纯化蛋白的原理落地工艺