首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第120章 异常检测

第120章 异常检测

120.1 提出背景

第119章建立了异常理论,明确了异常的基本含义:实际状态、实际行为、实际结果、实际数据或实际结构偏离正常基准时,即形成异常。

但是,仅仅定义异常还不足以形成机器认知能力。机器必须能够回答一个更加具体的问题:

一个对象当前是否正常?

因此,需要建立异常检测(Anomaly Detection)机制。

异常检测不是对异常进行处理,而是机器对当前对象进行观察、建立比较基准、计算实际值与期望值之间的差异,并判断是否存在异常的过程。

其基本过程为:

对象 → 观察 → 基准 → 比较 → 偏差 → 异常判断

异常检测可以作用于不同认知层次:

数据检测 → 结构检测 → 状态检测 → 行为检测 → 结果检测

五类检测并不是互相独立的。数据异常可能导致状态异常,状态异常可能导致行为异常,行为异常可能导致结果异常,结构异常则可能直接影响整个认知对象。

因此,异常检测是连接“观察”和“异常认知”的基础机制。


120.2 异常检测的定义

异常检测(Anomaly Detection)是指机器根据预先建立的正常基准,对对象的实际数据、实际结构、实际状态、实际行为和实际结果进行比较,并判断其是否偏离正常范围、正常关系、正常状态或预期结果的认知过程。

定义异常检测函数:

AD=Detect(A,E,C)AD = Detect(A,E,C)

其中:

  • AA:Actual,实际对象或实际观测值;
  • EE:Expected,期望对象、期望值或正常基准;
  • CC:Condition,检测条件;
  • ADAD:Anomaly Detection,异常检测结果。

最基本的判断关系为:

A∈NA \in N

表示实际对象属于正常范围。

如果:

A∉NA \notin N

则:

Anomaly=TRUEAnomaly = TRUE

其中 NN 表示 Normal,即正常范围、正常结构、正常状态或正常规则集合。

因此,异常检测的核心不是“寻找异常”,而是:

建立正常基准 → 获取实际对象 → 进行比较 → 判断偏差。


120.3 异常检测对象

异常检测的对象不是单一的数据值,而是机器运行过程中产生的各种认知对象。

可以定义检测对象:

DO={D,S,B,R,T,St}DO = \{D,S,B,R,T,St\}

其中:

  • DD:Data,数据;
  • SS:Structure,结构;
  • BB:Behavior,行为;
  • RR:Result,结果;
  • TT:State,状态;
  • StSt:Relation,关系。

本章重点研究五种检测:

Detection={Dstate,Dbehavior,Dresult,Ddata,Dstructure}Detection = \{D_{state},D_{behavior},D_{result},D_{data},D_{structure}\}

即:

状态检测、行为检测、结果检测、数据检测、结构检测。


120.4 状态检测

120.4.1 状态检测定义

状态检测(State Detection)是判断对象当前状态是否属于允许状态,以及状态转换是否符合规定条件的过程。

对象状态可以表示为:

StS_t

正常状态集合表示为:

NS={S1,S2,…,Sn}N_S = \{S_1,S_2,\ldots,S_n\}

当:

St∈NSS_t \in N_S

则当前状态正常。

当:

St∉NSS_t \notin N_S

则形成状态异常。

因此:

AnomalyS={0,St∈NS1,St∉NSAnomaly_S = \begin{cases} 0,&S_t\in N_S\\ 1,&S_t\notin N_S \end{cases}

但是,仅仅检查当前状态还不够。

机器还必须检查状态转换。

例如:

S1→S2S_1 \rightarrow S_2

如果该转换属于允许转换:

Transition(S1,S2)=TRUETransition(S_1,S_2)=TRUE

则状态转换正常。

如果:

Transition(S1,S2)=FALSETransition(S_1,S_2)=FALSE

则形成状态转换异常。

因此状态检测包括:

当前状态检测 + 状态转换检测。

120.4.2 状态检测模型

状态检测过程为:

对象 → 当前状态 → 正常状态集合 → 状态比较 → 状态判断

状态转换检测过程为:

前状态 → 状态变化 → 后状态 → 合法转换表 → 转换比较 → 异常判断

120.4.3 工程映射

PHP中可以建立:

class StateDetector
{
    public function detect($currentState, $normalStates)
    {
        if (!in_array($currentState, $normalStates)) {
            return true;
        }

        return false;
    }

    public function detectTransition($from, $to, $transitions)
    {
        $key = $from . '->' . $to;

        return !in_array($key, $transitions);
    }
}

该类不负责处理异常,只负责判断状态是否异常。


120.5 行为检测

120.5.1 行为检测定义

行为检测(Behavior Detection)是判断对象实际执行的行为是否符合行为规则、当前状态、目标要求和运行条件的过程。

行为可以表示为:

B=Action(O,C)B = Action(O,C)

其中:

  • OO:行为对象;
  • CC:行为条件;
  • BB:实际行为。

正常行为集合表示为:

NBN_B

如果:

B∈NBB \in N_B

则行为正常。

如果:

B∉NBB \notin N_B

则行为异常。

但是,行为检测不能仅依赖行为名称,还必须检查行为发生条件。

例如某对象在“停止状态”下执行“启动行为”,即使“启动”本身属于合法行为,也可能因为当前状态不允许而形成异常。

因此:

BehaviorValid=f(B,S,G,R,C)BehaviorValid = f(B,S,G,R,C)

其中:

  • BB:实际行为;
  • SS:当前状态;
  • GG:目标;
  • RR:行为规则;
  • CC:环境或条件。

120.5.2 行为检测过程

行为检测过程为:

对象状态 → 行为发生 → 获取行为 → 查询行为规则 → 检查行为条件 → 比较 → 行为正常/异常

行为检测重点判断:

  1. 行为是否存在;
  2. 行为是否属于允许行为;
  3. 行为是否符合当前状态;
  4. 行为是否符合目标;
  5. 行为是否违反规则;
  6. 行为执行条件是否成立。

120.5.3 行为检测与结果检测的区别

行为检测关注:

做了什么。

结果检测关注:

做完以后得到什么。

因此:

BehaviorDetection≠ResultDetectionBehaviorDetection \neq ResultDetection

可能出现:

行为正常 → 结果异常

也可能出现:

行为异常 → 结果正常

所以两个检测机制必须独立存在。


120.6 结果检测

120.6.1 结果检测定义

结果检测(Result Detection)是将对象实际产生的结果与预期结果进行比较,并判断结果是否符合目标、规则和允许范围的过程。

设:

  • RaR_a:Actual Result,实际结果;
  • ReR_e:Expected Result,期望结果。

则:

DR=Compare(Ra,Re)D_R = Compare(R_a,R_e)

如果:

Ra=ReR_a = R_e

则结果符合预期。

如果:

Ra≠ReR_a \neq R_e

则存在结果偏差。

当偏差超过允许范围:

∣Ra−Re∣>TR|R_a-R_e| > T_R

则判定为结果异常。

其中 TRT_R 为结果允许偏差阈值。

120.6.2 结果检测模型

结果检测过程为:

目标 → 期望结果 → 执行行为 → 实际结果 → 结果比较 → 偏差计算 → 异常判断

结果检测实际上是认知闭环中的重要验证机制:

Goal→Behavior→Result→CompareGoal \rightarrow Behavior \rightarrow Result \rightarrow Compare

如果:

Result≠ExpectedResult \neq Expected

则:

ResultAnomaly=TRUEResultAnomaly = TRUE

120.6.3 结果异常等级

结果偏差可以进一步计算:

D=∣Ra−Re∣D = |R_a-R_e|

根据不同的偏差范围,可以建立:

LevelR=f(D)Level_R=f(D)

例如:

  • Level 0:无偏差;
  • Level 1:轻微偏差;
  • Level 2:一般偏差;
  • Level 3:严重偏差;
  • Level 4:关键异常。

这样,结果检测就可以直接向第119章建立的异常等级模型提供数据。


120.7 数据检测

120.7.1 数据检测定义

数据检测(Data Detection)是判断输入数据、运行数据、存储数据和输出数据是否满足数据类型、范围、格式、完整性、一致性和关系约束的过程。

数据检测对象可以表示为:

D={V,T,F,R,C}D=\{V,T,F,R,C\}

其中:

  • VV:Value,数据值;
  • TT:Type,数据类型;
  • FF:Format,数据格式;
  • RR:Relation,数据关系;
  • CC:Constraint,数据约束。

120.7.2 数据检测类型

1. 数据存在性检测

检查数据是否存在:

Exist(D)=TRUE/FALSEExist(D)=TRUE/FALSE

缺失数据可能形成异常。

2. 数据类型检测

例如:

age = 25

属于数值数据。

如果系统要求:

age = integer

但实际数据为:

age = "unknown"

则属于类型异常。

3. 数据范围检测

设允许范围为:

L≤V≤HL \leq V \leq H

如果:

V<LV<L

或者:

V>HV>H

则形成范围异常。

4. 数据格式检测

例如日期要求:

YYYY-MM-DD

如果输入:

2026/09/06

而系统规则不允许该格式,则形成格式异常。

5. 数据一致性检测

如果两个相关数据:

D1,D2D_1,D_2

必须满足:

Relation(D1,D2)=TRUERelation(D_1,D_2)=TRUE

而实际:

Relation(D1,D2)=FALSERelation(D_1,D_2)=FALSE

则形成数据一致性异常。

120.7.3 数据检测过程

数据输入 → 类型检测 → 格式检测 → 范围检测 → 完整性检测 → 一致性检测 → 数据正常/异常

数据检测通常位于机器认知过程的较前位置,因为错误的数据可能继续传播到结构、状态、行为和结果层。


120.8 结构检测

120.8.1 结构检测定义

结构检测(Structure Detection)是判断对象内部组成、层级、字段、节点、关系和组织方式是否符合预定义结构模型的过程。

一个对象可以表示为:

O={E,A,R,S}O=\{E,A,R,S\}

其中:

  • EE:Element,元素;
  • AA:Attribute,属性;
  • RR:Relation,关系;
  • SS:State,状态。

结构检测需要判断:

Structureactual=?StructureexpectedStructure_{actual} \stackrel{?}{=} Structure_{expected}

但实际系统中不一定要求完全相等,而可能要求满足结构约束:

Structureactual∈StructureallowedStructure_{actual}\in Structure_{allowed}

120.8.2 结构检测内容

结构检测包括:

元素检测

检查对象所需元素是否存在。

属性检测

检查对象是否具有规定属性。

层级检测

检查元素之间的上下级关系是否正确。

关系检测

检查对象之间的关系是否符合定义。

数量检测

检查元素数量是否符合要求。

组织检测

检查对象内部组织方式是否符合结构模型。

120.8.3 结构异常

例如一个对象正常结构为:

O={E1,E2,E3}O=\{E_1,E_2,E_3\}

实际结构为:

O′={E1,E3}O’=\{E_1,E_3\}

则:

E2∉O′E_2\notin O’

形成结构缺失异常。

如果实际结构为:

O′={E1,E2,E3,E4}O’=\{E_1,E_2,E_3,E_4\}

E4E_4 不属于允许结构,则形成结构增加异常。

因此结构检测不仅检测“有没有”,还检测:

有什么、缺什么、多什么、关系是否正确、层级是否正确。


120.9 五类异常检测的关系

五类检测可以形成一个完整的检测体系:

Data→Structure→State→Behavior→ResultData \rightarrow Structure \rightarrow State \rightarrow Behavior \rightarrow Result

即:

数据 → 结构 → 状态 → 行为 → 结果

数据是对象运行的基础,结构决定对象的组织方式,状态表示对象当前条件,行为表示对象正在执行的动作,结果表示行为产生的实际效果。

因此可以建立异常传播关系:

AnomalyD→AnomalySAnomaly_D \rightarrow Anomaly_S AnomalyS→AnomalyBAnomaly_S \rightarrow Anomaly_B AnomalyB→AnomalyRAnomaly_B \rightarrow Anomaly_R

例如:

数据错误 → 对象状态错误 → 行为错误 → 结果错误

但这种关系并不是必然的。

因此,WSaiOS必须分别保留五种检测结果,而不能只保留最终结果。


120.10 统一异常检测模型

五类检测可以统一表示为:

ADi=Compare(Ai,Ni,Ci)AD_i=Compare(A_i,N_i,C_i)

其中:

  • AiA_i:第 ii 类实际对象;
  • NiN_i:第 ii 类正常基准;
  • CiC_i:检测条件;
  • ADiAD_i:检测结果。

五类检测分别为:

ADS=Compare(Sa,Sn,Cs)AD_S=Compare(S_a,S_n,C_s) ADB=Compare(Ba,Bn,Cb)AD_B=Compare(B_a,B_n,C_b) ADR=Compare(Ra,Rn,Cr)AD_R=Compare(R_a,R_n,C_r) ADD=Compare(Da,Dn,Cd)AD_D=Compare(D_a,D_n,C_d) ADSt=Compare(Sta,Stn,Cst)AD_{St}=Compare(St_a,St_n,C_{st})

其中:

  • SS:状态;
  • BB:行为;
  • RR:结果;
  • DD:数据;
  • StSt:结构。

最终异常检测结果可以表示为:

AD=ADS∨ADB∨ADR∨ADD∨ADStAD = AD_S \lor AD_B \lor AD_R \lor AD_D \lor AD_{St}

即只要任意一个检测维度确认存在异常,整体对象就进入异常认知状态。

如果需要进一步区分异常类型,则不应该简单地使用布尔值,而应该生成异常对象:

Anomaly={Type,Object,Expected,Actual,Deviation,Severity,Source}Anomaly= \{ Type, Object, Expected, Actual, Deviation, Severity, Source \}

这样才能继续进入第119章之后的异常处理系统。


120.11 异常检测规则

可以建立基础检测规则。

规则1:

IF ActualState NOT IN NormalState
THEN StateAnomaly = TRUE

规则2:

IF ActualBehavior NOT IN AllowedBehavior
THEN BehaviorAnomaly = TRUE

规则3:

IF ActualResult OUT OF ExpectedRange
THEN ResultAnomaly = TRUE

规则4:

IF DataType INVALID
THEN DataAnomaly = TRUE

规则5:

IF DataValue OUT OF Range
THEN DataAnomaly = TRUE

规则6:

IF Structure NOT MATCH ExpectedStructure
THEN StructureAnomaly = TRUE

规则7:

IF AnyDetection = TRUE
THEN CreateAnomaly

因此:

检测 → 分类 → 建立异常对象 → 进入异常处理。


120.12 异常检测工程对象

在WSaiOS工程中,可以建立统一的 AnomalyDetector

class AnomalyDetector
{
    public function detectState($actual, $normal)
    {
        return !in_array($actual, $normal);
    }

    public function detectBehavior($behavior, $allowed)
    {
        return !in_array($behavior, $allowed);
    }

    public function detectResult($actual, $expected, $threshold = 0)
    {
        return abs($actual - $expected) > $threshold;
    }

    public function detectData($value, $rule)
    {
        return !$rule->validate($value);
    }

    public function detectStructure($object, $structure)
    {
        return !$structure->match($object);
    }
}

该类只承担“检测”职责。

它不负责:

  • 异常处理;
  • 异常恢复;
  • 风险处理;
  • 冲突解决;
  • 自我保护。

这样可以保持WSaiOS认知模块的职责边界。


120.13 异常检测对象模型

可以进一步建立:

class AnomalyDetection
{
    public $detectionId;
    public $detectionType;
    public $targetObject;
    public $expectedValue;
    public $actualValue;
    public $deviation;
    public $severity;
    public $status;
    public $createdAt;
}

其中:

  • detectionId:检测编号;
  • detectionType:检测类型;
  • targetObject:检测对象;
  • expectedValue:期望值;
  • actualValue:实际值;
  • deviation:偏差;
  • severity:异常严重程度;
  • status:检测状态;
  • createdAt:检测时间。

检测类型可以定义为:

STATE
BEHAVIOR
RESULT
DATA
STRUCTURE

这样机器就能够把一次异常判断保存为结构化认知数据。


120.14 异常检测状态机

异常检测自身也具有运行状态:

Idle→Observing→Comparing→Detecting→Classified→ReportedIdle \rightarrow Observing \rightarrow Comparing \rightarrow Detecting \rightarrow Classified \rightarrow Reported

具体过程为:

空闲 → 观察 → 比较 → 检测 → 分类 → 输出检测结果

如果没有发现异常:

Detecting→NormalDetecting \rightarrow Normal

如果发现异常:

Detecting→AnomalyDetecting \rightarrow Anomaly

如果发现多个异常:

Detecting→MultipleAnomalies→ClassifyDetecting \rightarrow MultipleAnomalies \rightarrow Classify

随后进入异常处理系统。


120.15 异常检测与认知闭环

异常检测不是孤立模块,而是机器认知闭环的一部分:

Observation→Baseline→Compare→Detection→Anomaly→Decision→Action→Result→RecheckObservation \rightarrow Baseline \rightarrow Compare \rightarrow Detection \rightarrow Anomaly \rightarrow Decision \rightarrow Action \rightarrow Result \rightarrow Recheck

其中异常检测承担的是:

Observation→Compare→DetectionObservation \rightarrow Compare \rightarrow Detection

它负责告诉机器:

当前对象是否偏离正常基准。

而异常处理负责进一步回答:

发现异常以后应该做什么。

因此必须严格区分:

AnomalyDetection≠AnomalyTreatmentAnomalyDetection \neq AnomalyTreatment

异常检测负责发现,异常处理负责处理,异常恢复负责恢复,异常验证负责确认恢复是否成功


120.16 异常检测的工程模块

在WSaiOS架构中,可以建立如下模块:

Anomaly Detection System
│
├── StateDetector
├── BehaviorDetector
├── ResultDetector
├── DataDetector
├── StructureDetector
├── DetectionRule
├── DetectionBaseline
├── DeviationCalculator
├── AnomalyClassifier
└── AnomalyRecord

其运行关系为:

实际对象 → 检测器 → 比较基准 → 偏差计算 → 异常判断 → 异常分类 → 异常对象

进一步形成:

DataDetector → StructureDetector → StateDetector → BehaviorDetector → ResultDetector

但五类检测也可以并行运行:

DS∥DB∥DR∥DD∥DStD_S \parallel D_B \parallel D_R \parallel D_D \parallel D_{St}

最终由统一异常检测管理器汇总。


120.17 异常检测案例

假设机器控制一个具有“运行”和“停止”状态的设备。

正常状态:

NS={Running,Stopped}N_S=\{Running,Stopped\}

允许行为:

NB={Start,Stop,Operate}N_B=\{Start,Stop,Operate\}

设备正常运行时:

State = Running
Behavior = Operate
Result = Normal

机器进行五类检测:

数据检测

检查传感器数据是否存在、类型是否正确、数值是否在允许范围。

结构检测

检查设备对象是否具有规定的元素、属性和关系。

状态检测

判断:

Running ∈ NormalState

结果正常。

行为检测

判断:

Operate ∈ AllowedBehavior

并检查当前 Running 状态是否允许 Operate

结果正常。

结果检测

比较:

ActualResult
ExpectedResult

如果结果处于允许范围,则结果正常。

如果某个传感器突然产生非法数据:

Da∉DnD_a\notin D_n

则首先产生:

DataAnomalyDataAnomaly

如果该错误数据进一步导致设备状态变成非法状态:

Statea∉NSState_a\notin N_S

则产生:

StateAnomalyStateAnomaly

此时机器不是简单地知道“设备坏了”,而是知道:

数据检测发现异常 → 状态检测发现异常 → 建立两个独立异常对象 → 进入异常处理。

这就是结构化机器异常认知。


120.18 本章总结

异常检测是机器从正常运行状态进入异常认知状态的基础机制。

本章建立了五种核心检测:

状态检测→行为检测→结果检测→数据检测→结构检测\boxed{ 状态检测 \rightarrow 行为检测 \rightarrow 结果检测 \rightarrow 数据检测 \rightarrow 结构检测 }

同时也建立了统一检测模型:

实际对象→正常基准→比较→偏差→异常判断\boxed{ 实际对象 \rightarrow 正常基准 \rightarrow 比较 \rightarrow 偏差 \rightarrow 异常判断 }

其中:

  • 状态检测判断对象当前状态及状态转换是否正常;
  • 行为检测判断实际行为是否符合状态、目标和规则;
  • 结果检测判断实际结果是否符合预期;
  • 数据检测判断数据值、类型、格式、范围和一致性是否正常;
  • 结构检测判断对象内部元素、属性、关系和组织方式是否正常。

五类检测共同构成WSaiOS的异常检测基础。

最终形成:

Data→Structure→State→Behavior→ResultData \rightarrow Structure \rightarrow State \rightarrow Behavior \rightarrow Result

以及:

Observation→Baseline→Compare→Deviation→AnomalyObservation \rightarrow Baseline \rightarrow Compare \rightarrow Deviation \rightarrow Anomaly

由此,机器不再只是获得一个“正常/异常”的简单判断,而能够知道:

什么对象异常、哪一个维度异常、实际值是什么、期望值是什么、偏差是多少、异常来源是什么,以及异常应该进入哪个后续认知流程。

因此,第120章建立的是异常发现能力。在此基础上,后续系统才能进一步建立异常分类、异常等级、异常处理、异常恢复和异常验证机制,从而形成完整的异常认知闭环。

Leave a Reply

Your email address will not be published. Required fields are marked *