0、引言(全文约6800 字,图 43张)
先说结论:这套方法能装进 40 块钱的板子;大模型也能用,但搜 18 轮只涨得动 1 个百分点。
这两个数字放在一起,就是这一章要讲的全部内容。
第三章结尾我说过,手里还有几个开源仓库可以当素材。这一章用掉两个:
·vibrolab——回答"范式能不能落地"。前三章反复在说特征机器学习这条线便宜、可解释、够准,但便宜到什么程度、准到什么程度、边界在哪里,得把整条链路从头做完才有资格说。这个仓库把 CWRU 跨工况诊断从数据加载一路做到烧进 MCU,并且把每一步的边界都摆在明面上——包括哪些是真测出来的、哪些是软件模拟的、哪些是数据集本身的天花板。
·diagnosis-agent——回答"智能的边界在哪"。第二章判了大模型两条路(解释器、分类器)的死活,这一章让它干第三件事:当 Agent,自己去搜一个比我更好的特征选择方案。结果它没搜到——而"没搜到"这件事,比搜到更值得写。
先给刚进来的读者垫一句。我这几章说的特征范式指的是:把振动信号翻译成一组物理量——RMS、峭度、频带能量、倒谱这些(我攒的 120 维 CFD 特征),再用便宜的经典分类器做判断。前三章它一直在赢:第一章同域谁都是 100%,跨域四招对决里稳住阵脚;第二章它活过了 PINN 的对照;第三章它扛住了 RUL 的死局。但它始终欠着一个回答:赢是偶然还是范式?能落到真东西上吗?落到多小的东西上?
这一章不教方法,就回答这两个问题。看完之后你应该能带走一个判断:故障诊断这条链上,谁是主体,谁是配角。
1、vibrolab:把一条链路做完,再把每一步的边界摆出来
1.1、跨工况:78.93% → 98.96%,中间只隔了一次选维
CWRU 10 类轴承,0 HP 训练 → 3 HP 测试,严格无重叠切分(训练测试不共享 .mat 文件)。先看一个糟糕的现场:
SVM-RBF | LinearSVM | LR | KNN | |
同工况 5-fold CV | 100.00% | 100.00% | 100.00% | 100.00% |
同工况留一文件(严格) | 99.77% | 99.93% | 99.70% | 99.70% |
全 120 维直接跨负载 | 78.93% | 84.66% | 84.66% | 85.96% |
Bot-40 稳定子集 | 98.96% | 89.34% | 98.83% | 99.35% |
前两行是第一章的老朋友:同域数据四平八稳,谁都 100%。第三行是第一章反复讲过的碎前提:负载一变,120 维特征里一部分的分布跟着漂,直接跨过去就是 78.93%——对 10 分类来说,这个数字不能用。
第四行就是这一章的第一个主角。做法一句话能说完:逐维统计特征从 0 HP 到 3 HP 的分布漂移量(用 Cohen's d,统计学里衡量"两组分布差多远"的标准量,差得越大越不稳),把漂移最大的 80 维扔掉,只留最稳的 40 维——这就是 Bot-40。78.93% → 98.96%,+20 个百分点,中间没有任何新算法,就是"把前提碎掉的维度扔掉"。
这其实就是第一章那句话的老动作:前提不满足,处理一下让它满足——创新的动作。只不过这次的"处理"是减法:不满足前提的维度,直接不要。
顺带交代一个防杠点。有人会问:这个 98.96% 是不是挑出来的?所以仓库里补了 12 任务全负载矩阵——全部 12 个(源工况,目标工况)组合、四路分类器全跑,平均 98.1%–99.2%,最差单点约 89%。不是挑数据挑出来的。
图1 · 12 任务全负载矩阵: 4 路分类器 × 全部(源,目标)组合, Bot-40 平均 98.1–99.2%, 最差单点约 89% — 非 cherry-picking
(再防一杠:跨工况实验属于标准的 transductive 设定——选维阶段允许看目标域的分布,不碰目标域标签。另外流式部署场景有 5% 目标域预热的对照实验,1.3 节说。严格 inductive——完全零目标样本——不在这个仓库的作业范围里。)
最后说明一下为什么精度数字在这章不是重点。CWRU 上刷 99%,任何方法都能刷到,单看精度说明不了什么——我在仓库里管这个叫数据集工程:当数据集本身就易分的时候,用什么方法都无所谓。就像小学期末考试,小学生能拿满分,大学生也能拿满分,你能因此说大学生厉害吗?题太简单,谁都可以。所以 vibrolab 的价值从来不在 98.96% 这个数,在它后面那几件事:边界、效率、和一块真的能跑的板子。
1.2、边界:三盆冷水
先泼第一盆:加噪声。全 120 维特征在信噪比 +10 dB 时直接崩到 7.7%——10 类均匀猜测的下限;Bot-40 在同一噪声档位保持 94–99%。
图2 · 加噪声鲁棒性: 信噪比 +10 dB 时全 120 维崩到 7.7% (10 类随机猜下限), Bot-40 保持 94–99% — 扔掉不稳维度的减法动作, 顺手把抗噪也挣到了
这个结果我本来没指望:选维的初衷是跨工况稳定,抗噪是捎带的——漂移大的维度往往也是噪声敏感的维度,扔掉它们等于顺手把噪声入口堵了一半。
第二盆冷水:传感器。算法效率解决了,整机成本另一半在传感器。CWRU 数据用的是工业级 IEPE 压电加速度计(万元级),真部署不可能每台设备都配一支,所以拿软件对信号做降级模拟,看不同档次的传感器喂进来,模型还剩几成:
传感器档 | 带宽 | 成品单价(RMB) | Held-out 精度 |
IEPE 基线(工业压电) | 6 kHz | 3000–10000 | 100.00% |
ADXL1002(工业 MEMS) | 11 kHz | 500–800 | 99.80% |
ADXL355(低带宽高精度 MEMS) | 1.9 kHz | 700–1000 | 38.98% |
MPU6050(消费级 IMU) | 260 Hz | 50–200 | 10.17% |
最有信息量的是中间两行。ADXL355 的噪声底不比 ADXL1002 差,按"噪声越小越好"的直觉它应该更好——结果 38.98%,直接崩了。原因:带宽只有 1.9 kHz,把 2–5 kHz 的轴承高频冲击信号整个滤掉了。噪声再低,信号没了就是没了。MPU6050 更干脆,260 Hz 带宽,10.17%,不如蒙眼猜。
结论一句话:带宽是硬约束,噪声可以用算法扛,带宽扛不了。选传感器先看带宽,别看噪声底。这个结论把整机成本打了下来——ADXL1002 级工业 MEMS(500–800 元)就能撑住算法,整机 BOM 约 700–900 元档,对比工业 CMS 系统单点上万到十万,差 1–2 个数量级。
但必须叠甲:这一整段是软件模拟,不是真机测量。降级是软件做的,传感器参数是从各家 datasheet 抄的。真机还有运放前端、ADC 有效位数、安装耦合、温漂、EMI 一堆坑,综合下来预期精度会从 99.80% 掉到 90–95% 范围。方向不会错,数字要打折。
第三盆冷水最狠,是我主动公开的阴性结果:未见损伤尺寸外推,崩了。留一损伤尺寸交叉验证——训练时把某种损伤直径整个藏起来,测模型能不能外推到没见过的尺寸。9 组均值只有 37.8%–63.8%,内圈中大尺寸(IR014、IR021)直接崩到 0%。
这不是方法的锅,是 CWRU 数据集的结构性天花板:每类故障只有 3 种损伤直径,中间尺寸的连续外推本来就无法完成。第一章四招对决里的直径断崖,在这里又一次现形。我把它写进仓库显眼的位置,是为了给其他实验里所有的"99%"一个正确的心理锚点:这些 99% 的适用域,到"未见损伤尺寸"为止。
1.3、部署:2 KB,0.6 ms,40 块钱
三盆冷水泼完,剩下的就是把它塞进尽量小的东西里。
先看算法效率这一头。和主流迁移方法摆在一起:
迁移学习方法 | 模型体积 | 能否进 MCU | 3HP 精度 |
vibrolab(Bot-40+LR) | 3 KB | 能(ESP32) | 98.8% |
CORAL(浅层 DA) | 118 KB | 能 | 49.21% |
1D-CNN / DCDAN / AMDA 类(深度 DA) | 1–2 MB | 不能 | ~99%(要 GPU) |
这张表其实是个三难困境:深度域适应精度高,但 1–2 MB 塞不进 MCU,还要 GPU;CORAL 体积够小,但跨工况只有 49.21%(本地复测约 41%,同一个结论);Bot-40 + LR 是唯一"体积小、精度不掉"的格子。能进 MCU 且精度不掉——这是整个技术路线选型的全部理由。
PC 端实测(单核 CPU,100 次采样中位数):LR 单窗 0.69 ms,部署产物 4.2 KB,推理耗时不到窗口时长的 1%(一个窗口是 2048 点 @ 12 kHz,等效 170.7 ms 的物理时长)。四路对照里 LR 综合最优:延迟最短、产物最小、12 任务平均精度最高(99.17%)、方差最小,默认选型。
然后是真的烧进板子。ESP32-S3,2 KB 的模型(LR 权重 + scaler + Bot-40 索引),板上推理0.6 ms。每窗全链路约 5.6 ms:2048 点原始信号 → 120 维 CFD 特征(float32 FFT,约 5 ms)→ Bot-40 选维 + 标准化(约 50 μs)→ LR 10 类(0.6 ms)→ OLED 显示波形、中文故障标签、置信度条,串口回传诊断。流式收窗,逐窗诊断。
图3 · ESP32-S3 + 0.96 寸 OLED 实时诊断: 波形、"外圈007"、置信度条、延迟 — 训练用 0+3HP 双工况合训, 现场流式喂任意工况 (含没见过的 1/2HP) 全泛化 100%
(这张 100% 和图 1 的 12 任务矩阵不冲突,仓库里专门注了一笔:矩阵是单工况训→单工况测的最悲观协议,给的是下界;板子 demo 用 0+3HP 双工况合训,泛化到 1/2HP 属于插值场景——两个数测的是不同的东西。)
硬件合计 40 元出头:ESP32-S3-DevKitC-1 约 24 元,0.96 寸 OLED 约 10 元,数据线加杜邦线约 6 元。CWRU 数据集公开免费,train_export_model.py 十秒出 model.h,seed 固定逐字节可复现,训练双工况、现场流式喂任意工况(含没见过的 1/2HP)全泛化 100%。部署这个动作本身没什么玄学——模型小到 2 KB 的时候,部署就不再是工程问题。
流式部署还剩一个"上来要不要先喂数据"的问题,也测了:预热样本比例从 5% 扫到 100%,5% 就已足够,三路分类器的精度衰减在 0.5 个百分点以内。
到这里必须把最重的那块甲叠了,不叠这篇文章就成吹牛了:
1.板子上跑的是"特征提取 + 推理 + 显示"这条链,信号是 PC 从 CWRU .mat 流式喂进去的(上位机模式,PC 相当于数据采集卡)。真实传感器 → 运放前端 → ADC 采样这条硬件链路没有闭环——缺一支 IEPE 当"金标准参照",没有金标准,就分不清精度掉了 X% 是传感器的锅还是算法的锅。
2. firmware README 里那个"领导提需求"的小故事是虚构的工作场景,写它是为了交代需求逻辑,精度数字全部来自软件模拟。
3. 甚至"传感器成本论断的真机验证"是我主动放弃的:工业现场对可靠性、防爆认证、EMI、供应商责任的要求,决定了 ESP32 + 廉价 MEMS 不会被现役检测系统采纳——这个逻辑链没有下游出口,做完也转化不成决策价值。所以这个仓库的定位是"算法可行性 + 边缘部署可行性的工程报告",不是"接上就能用的产品"。
顺手交代仓库末端的另一个部件:流水线预留了一个可选的 LLM 接口——把结构化诊断结果(故障类型 + 置信度 + 关键特征)翻译成自然语言维修建议,本地小模型或云端 API 都能插,示例跑一遍约 0.16 元。注意它跟第二章的关系:第二章判死的是"让小模型从特征自己推理出为什么"——那是能力性问题,实测它编造选择题复读手册;这里的接口只做"把已经算出来的结论翻译成人话",是个模板活,且是纯可选组件,不影响诊断精度。判断不交给模型,模型只管把结论说成人话——这句话是第二章和这一节的共同底色,也是第 2 节的引子。
2、diagnosis-agent:让大模型接手一局,看它涨多少
2.1、先考迁移:同一套方法,零改动换数据集
vibrolab 证明的是"这套范式在 CWRU 上能落地"。但同一份数据上跑出来的结果只能证明内部一致性,不能证明外部有效性——方法是不是 CWRU 专属,得换一个数据集才知道。
diagnosis-agent 干的第一件事就是这个:把 vibrolab 的 Cohen's d + Bot-40零改动搬到 PU 数据集(Paderborn 大学轴承数据,和 CWRU 不同机构、不同试验台、不同传感器、不同采样率),N09→N15 跨域,3 类:
方法 | 精度 | 说明 |
全 120 维 SVM-Linear | 0.7518 | 基线 |
Bot-40(Cohen's d) | 0.8319 | vibrolab 方法直接迁移,未经 Agent 优化 |
Agent 搜索(SCA ON,18 轮) | 0.8357 | fisher + 80d + RF |
Agent 搜索(SCA OFF,18 轮) | 0.8407 | fisher + 50d + LR |
两个读法。先读好的一面:Cohen's d 选维在 PU 上照样比全 120 维高 8 个点——这套"统计漂移、扔掉不稳维"的范式不是 CWRU 专属,是跨数据集有效的。第三章说过"分布偏移必须由基线消除",这里是同一句话在另一个数据集上应验。
再读扎心的一面:天花板变了。CWRU 上 98–99% 的成绩,在 PU 上平推不过去,整套方法的极限就停在 0.83–0.84。数据集一换,特征空间的景观就换了——第一章说过"特征的判别性换个工况还成立吗",这里给的是它的数据集版本:换个数据集,连"能到多少分"都换了。
2.2、再考智能:Agent 上桌
然后是正题。写 vibrolab 的时候我在碎碎念里提过一句"已经有人在做故障诊断 Agent 了"。学术界的创新压力大家都懂,我当时就想:Bot-40 是人工一刀切——能不能让 LLM 自己找到每个任务的最优解?让它用我的方法,做到我做不到的事?
于是有了这个仓库。架构三层:
LLM Agent(决策层)──> SCA 守卫(约束层)──> 诊断管道(特征选择+分类)
▲ │ │
└───────── 结果反馈 ───┴──────────────────────┘
Agent 每轮从工具箱里挑方案:7 种特征选择算法(Cohen's d / fisher / 互信息 / Lasso / RFE 等)、4 种域适应、若干分类器,自己组 pipeline,跑 evaluate,看分数,进下一轮。
光看架构你可能会觉得这就是个普通的 AutoML 循环。真正的难点在中间那层——SCA守卫。跑起来之后我发现 Agent 有几个毛病:它会偷懒,不会主动思考,只会穷举;给它最优解它会原地打转;试了一个方向拿了高分就赖着不走。所以 SCA 的工作不是"建议它做什么",是拦住它不经思考的探索:
· 消融不足 → "你都不知道哪个模块是噪音"
· 重复探索 → "selector+n_dims 已试过,区别?"
· 路径依赖 → "未试 fisher/l1_lasso,凭什么更差?"
· 区间盲区 → "只在 low 搜,如果最优是 40 维?"
· 停滞 → "N 轮未破 X.XXXX,极限?"
· 消融发现超优不追 → 硬拦:"为什么不追这个方向"
这套东西的设计基因来自我另一个仓库(桌面具身机器人)的硬件安全层——硬件里它钳舵机,软件里它钳探索,同一套思路换个战场。
2.3、结果:18 轮,不到 1pp
结果就写在 2.1 那张表里:Agent 探索 18 轮,SCA ON 拿到 0.8357,SCA OFF 拿到 0.8407。对照人工 Bot-40 的 0.8319——折腾 18 轮,涨了不到 1 个百分点。
我原本期待的是"LLM 找到比我一刀切更聪明的组合"。没找到。原因不在 Agent 笨,在Cohen's d 建立的基线太强:跨工况最该扔的维度,逐维统计漂移已经替你扔了,剩下 40 维附近的组合优化空间本来就没多大。这不是 LLM 的问题,是问题本身没有那么多肉。
但 SCA 那组对照里藏着一个比精度有意思的发现。ON 和 OFF 两次最终精度几乎一样(0.8357 vs 0.8407),过程质量差得很远。SCA ON 的日志里,Agent 被追问了 13 次。最有代表性的是第 9–11 轮:
[9] fisher n=108 → KNN-7 = 0.8334 ← 新高
[challenge] 区间盲区:只在 low 搜,如果最优是 40 维?
[10] fisher n= 80 → RF = 0.8357 ← 响应追问下探,再创新高
[11] fisher n= 40 → KNN-3 = 0.8307
没有那声"区间盲区?"的追问,Agent 大概率停在 108 维不再下探。SCA 的价值就此看清了:它不改变结果精度,改变探索路径的完备性。ON 那次分数略低于 OFF(0.8357 vs 0.8407),但两次各跑 18 轮,这个量级的差距谈不上谁真的更强(仓库自己的结论也是"ON/OFF 最终精度相近")。ON 真正赢的是过程:把搜索空间走全了——对"要知道极限在哪"这件事来说,走全比碰巧高分重要。
还有一层更根本的边界,我在日志里看得清清楚楚:维度耦合的现象,我看得见,AI 看不出来。它所有的尝试都在我给的工具箱框架内执行——selector 换一种、维度数变一变、域适应换一个,但没有一次跳出"在 CFD 特征空间里做选择"这个框架本身。它的天花板是框架的天花板。
这轮探索里倒是真撞出过一个物理发现:跨转速场景下,能量类特征和形态类特征的漂移方向可预测(能量维随转速升高而涨、形态维反向)。这是个"物理规律层面"的发现——但把它转成工程精度的时候发现另一件事:sklearn 的 StandardScaler 本身已经把主要的对齐工作干完了,在这个基础上加物理先验,增益接近零。物理规律确实存在,但已经被标准工程基线吸收掉了。这个发现比"我提出了新方法"更硬——它精准画出了物理先验的适用边界(只有在做不了全量目标域标准化的场景下才有独立价值)。更完整的探索留在私有工作簿里,这个仓库和这篇博客都不展开,算一个明说的留白。
2.4、合上第二章的话头:大模型到底该站哪
现在可以把第二章欠的账结了。两章加起来,大模型在故障诊断里试了四个岗位:
岗位 | 结果 | 出处 |
分类器(数值 token) | 同域 99.6%,跨域 1-shot 18.8%,低于随机 | 第二章 |
解释器(生成诊断理由) | 0.5B 编造选择题 + 复读手册,能力性死路 | 第二章 |
特征选择器(Agent 搜索) | 18 轮,+0.9pp,基线太强顶住天花板 | 本章 |
决策层搜索工具 + 过程质量驱动 | 可行:框架内搜索、SCA 追问逼出完备路径 | 本章 |
前三行全是死路或者条件性失败,但我不排除用高参数量的大模型可以做到理解故障本质,但我觉得它的理解大概不会超出人的理解(峭度等信号处理理论),第四行是活着的那个。翻译成人话:大模型不要碰诊断本体——分类、选维、解释推理这些"出结论"的活它干不了或干不便宜;它该站在决策层,在人工方法划好的框架里做搜索、做自动化、被 SCA 拷问着把流程走完备。
而且"不能"本身有两重价值。第一重:Agent 搜了 18 轮都顶不过人工 Cohen's d,反过来证明了这套人工方法的鲁棒性——换数据集、被智能体围攻,天花板都还在。第二重:它把 LLM 的角色边界画出来了,这条边界比任何精度数字都值钱,因为拿着它你可以直接判断手头那个"大模型 + 故障诊断"的项目靠不靠谱:如果它的卖点是大模型替代诊断,2.4 节那张表的前三行就是它的下场;如果大模型只是决策层的配角,那这个项目至少站在了能站的位置上。
3、结尾:主体与配角
两个仓库讲完了,可以合题了。
这一章的全部证据指向同一个结构:故障诊断这条链上,主体是"传感器 → 物理特征 → 边缘推理"这条物理链,大模型是站在链条末端的配角。
主体这边的证据:2 KB 模型、0.6 ms 推理、40 元硬件、98–99% 跨工况精度、94%+ 抗噪、跨数据集 0.83——每一个数字都便宜、可解释、边界清楚。配角那边的证据:18 轮搜索 1pp、四个岗位死活名单、以及一个 2 KB 模型根本不需要大模型就能部署的事实。
写 vibrolab 碎碎念的时候我写过一段焦虑:所有研究领域最后都会指向大模型,我们能做的常态研究,是不是只是给大模型加一个 skill?这一章算是我的答案:传感器、特征、边缘推理这条物理链,大模型替代不了——不是因为它是传统方法所以舍不得扔,是因为它便宜一到两个数量级、每个数都有物理含义、还塞得进 40 块钱的板子。大模型站在链条末端,干它擅长的:搜索、自动化、把结构化结论翻译成人话。第二章判它死的是"出结论"的岗位,这一章补上的是"不出结论"的岗位——合在一起,它的位置就画全了。
回收一下整个系列,这一章其实是三句老话的第三次应验:
1. 第一章说"前提不满足,处理一下让它满足"——Bot-40 就是那个动作:前提碎在 80 个维度上,扔掉它们,前提就满足了。
2. 第二章说"特征派活下来,是因为只碰出厂定死的数"——本章的 120 维 CFD 全是这类数,所以它能烧进 MCU、能扛噪声、能跨数据集。
3. 第三章说"分布偏移必须由基线消除"——Cohen's d 选维、健康基线 z-score,是同一个思想在不同任务上的两次显形。
系列写到这,大概是故障诊断的全部图景都完全了,这章算是水一篇吧,毕竟到了该找工作的时候了,最近也没时间做新东西了,其实要继续写的话,我可能就讲一讲神经坍缩(NC)领域了,这个就纯偏理论了,我对于NC这个领域的看法就是用几何结构去解释算法的黑箱,还是说更喜欢看工程应用的东西?也许下一章拆算法?
两个仓库都在 GitHub 上,数据、代码、CSV、阴性结果全部公开,欢迎考据:[vibrolab](https://github.com/kanglongh/vibrolab)、[diagnosis-agent](https://github.com/kanglongh/diagnosis-agent)。