第九章我们教机器"看"——一张图里有没有划痕。这一章换个感官:教机器"听"和"感觉"。让设备在真正坏掉之前,先哼哼两声:"我这儿有点不对劲。"
做这件事的原料,是时序数据(time series,按时间一个接一个记下来的数值,像心电图那样一条线往前走)。电机的振动、轴承的温度、主轴的电流——每隔一秒、甚至每秒上千次,采一个数,存下来,就是一条时序。我们要从这条线里,提前看出故障的苗头。这件事有个正经名字叫预测性维护(predictive maintenance,在设备坏之前就发现苗头、提前修,而不是坏了才停机)。
时序和图像,为什么是两码事
第九章的图像问题,本质是"这一张里,有没有"。你把一堆照片打乱顺序喂给机器,不影响它学认划痕——每张照片是独立的一个个体。
时序不是。时序的顺序本身就是信息。振动值 3、5、3、5、3、5 是设备在正常地抖;同样这几个数字换个排法,3、3、3、5、5、5,讲的是完全不同的故事——前者平稳,后者是突然爬升。你要是把一段振动波形打乱重排,它就彻底没意义了,等于把心电图剪碎了重新粘。
图像看的是"里面有什么东西",一张就是一张。时序看的是"这段变化正不正常",得连着看一整段。趋势、节奏、先后,才是它要说的话。所以第九章那套"把样本打乱、随便抽"的做法,到这儿要改。
两种活儿:猜下一步,和挑出不对劲
时序上你想干的事,基本就两类,分清楚很重要,因为它们的做法不一样。
第一类是预测:照着现在的趋势,猜下一步、或者猜"还有多久会到危险线"。温度这条线一直在慢慢往上爬,你想算:照这个爬法,还有几个小时会撞到 80 度的红线?这像看着水位涨,估摸着几点会漫过堤坝。
第二类是异常检测:不管预测什么,就看这一段波形"跟平时长得一样不一样"。老师傅站在机器边听声音,说不清哪个零件坏了、也不预测什么,但他一皱眉:"这声不对。"这就是异常检测。
最关键的一个坎:你根本没有"坏"的样本
第九章我们怎么教机器认划痕?拿一大堆有划痕的照片,一张张告诉它"这是划痕"。这叫有监督(supervised,拿标好答案的样本教它,好的坏的都给看,让它学会区分)。
到了设备这儿,这条路常常走不通。原因很朴素:好设备大部分时间都是好的。一台运转三年的机床,坏的时刻可能一年就那么几次,甚至这台新设备压根还没坏过。你想收集"故障样本"来教机器,结果发现故障样本稀少得可怜,甚至一个都没有。你手里全是"正常",没有"坏"可以拿给它看。
这是时序异常检测和图像检测最不一样的地方,也是最容易让人卡住的地方。别指望攒够一堆故障录像。轴承坏一次可能要几万块、停一次产线可能几十万,你不可能为了"多几个坏样本"去把设备一台台搞坏。坏样本天然就稀缺——这不是数据没采够,是现实就这样。
换个聪明思路:只学"正常长什么样"
既然没法"拿一堆坏的教它认坏",那就反过来:拿一大堆正常的,让机器学透"正常"到底长什么样。学熟了以后,凡是明显不像正常的,就挑出来报警。这叫无监督(unsupervised,不给一条条「这是好那是坏」的答案,只让机器自己摸清"正常"的规律,不认识的就当可疑)。(较真地说,你其实还是给了一个大标签——「这一堆全是正常的」,所以业界更严格的叫法是「单类学习」,你日后查资料看到 one-class 或 novelty detection,指的就是这套;意思一样,不必纠结名字。)
为什么这招聪明?因为它把一个"你没有的东西"(各种坏法的样本),换成了"你要多少有多少的东西"(设备天天在产的正常数据)。你不需要预先知道设备会怎么坏——它可能以你从没见过的方式坏——你只需要知道"正常是什么样",任何偏离正常的,都会露馅。
这正是老师傅那套。他不是背了一本"故障声音大全",他是听了十年正常的声音,正常刻进了骨头里,所以一点不对就炸毛。机器也一样:异常检测(anomaly detection,先学会正常的样子,再把"明显不像正常"的挑出来)的核心,是先把正常吃透。
具体手法有名字,但都是一句人话:最土的一招叫"给正常划一个范围,出界就报警"——正常时振动在 2 到 6 之间,冒到 9 了,报。复杂点的会连着一段一起看:"正常时温度和电流是一起涨一起落的,现在温度涨电流不动,这个搭配没见过,可疑。"名字你不用记,记住那句人话就够了:机器在心里存了一个"正常的样子",拿眼前的和它比,差得远就喊。
头号杀手:报警报到没人看
现在讲这类系统真正会死在哪儿。不是算得不准,是误报(false alarm,其实没事,系统却报了警——狼来了)太多。
你把灵敏度调得很高,一有风吹草动就报。头一周工人还认真跑去看,跑十次有九次是虚惊。第二周他就不看了。第三周报警成了背景噪音,跟没有一样。等真出事那次报警响起,没人理——系统还活着,但已经死了。
一个天天喊狼来了的报警器,比没有报警器更糟:它既没帮上忙,还骗走了工人的信任,以后真报了也没人信。误报是这类系统的头号杀手,比漏报更阴险,因为漏报你还知道要改进,误报是慢慢把整个系统废掉。
这就接上了第八章那个绕不开的取舍:查得全(宁可错报也别放过)还是查得准(宁可放过也别错报)。调灵敏一点,漏报少了但误报多了;调迟钝一点,误报少了但可能漏掉真故障。这中间没有标准答案,只有你这台设备的答案——漏一次报废十万,还是停一次错误的机耽误五万,得你来算这笔账。
有两个保命的做法,务必记住。
- 报警要能解释。别只弹一个红灯"异常"。要说"3 号轴承振动比平时高 40%,持续 10 分钟"。工人能看懂、能判断、能去现场核对,报警才有人信。一个说不出理由的报警,等于让人凭空信你,信不了几次。
- 报警要能分级。别所有事都拉最高警报。"轻微异常,留意"、"明显异常,本班次内查"、"严重,立即停机"——分了级,工人才知道哪个要撂下手里的活去跑,哪个记一笔就行。一刀切的报警,逼着人要么全信要么全不信,最后就是全不信。
AI 帮得上什么,帮不上什么
老规矩,划清楚这条线,你才不会把命交错地方。
AI(这里指你让它写代码的那个助手)在这一章能帮你干不少体力活:从原始振动数据里算出有用的特征(feature,从原始波形里提炼的概括量,比如这一秒抖得多厉害、抖得多快)——这块代码又碎又烦,正适合让它写;搭起那个"学正常"的模型;把时序画成图让你肉眼看趋势;甚至帮你把好几种异常检测方法都试一遍,比一比哪个在你的数据上误报少。这些都让它做,你省下大把时间。
但有几件事,AI 一句都替你答不了,因为答案不在代码里,在车间里:
- 你这台设备,多少算异常?振动到 8 是正常波动还是要出事?AI 不知道。这得问天天守着这台机器的老师傅,或者查设备手册。
- 报警该多灵敏?前面那笔"漏报 vs 误报"的账,是你的生产账、你的成本账,AI 没法替你算,它不知道你停一次机赔多少。
- 什么样的异常值得管?有些"异常"是正常的——每天开机头五分钟数据都飘,那是设备在热身,不是故障。哪些飘要忽略,哪些要警觉,是经验,不是算法。
把这一章记成一句话:让机器把"正常"学透,凡是明显不像正常的挑出来提前喊;但"多不像才叫不正常""喊得多响才合适",是你和老师傅的经验,不是 AI 的活。AI 提供那双灵敏的耳朵,你提供那颗判断的脑子。
做好了,设备就会在坏之前先哼哼两声。而这两声值不值得你放下手里的活跑过去——那始终是人的判断。下一章,我们把这套算法从你的电脑,搬到设备旁边那个巴掌大的盒子里,让它真正在车间里 7×24 地听着。