第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 行为检测过程
行为检测过程为:
对象状态 → 行为发生 → 获取行为 → 查询行为规则 → 检查行为条件 → 比较 → 行为正常/异常
行为检测重点判断:
- 行为是否存在;
- 行为是否属于允许行为;
- 行为是否符合当前状态;
- 行为是否符合目标;
- 行为是否违反规则;
- 行为执行条件是否成立。
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章建立的是异常发现能力。在此基础上,后续系统才能进一步建立异常分类、异常等级、异常处理、异常恢复和异常验证机制,从而形成完整的异常认知闭环。