动态二次特征筛选算法(Dynamic Secondary Feature Filtering Algorithm)
在 HY-Ego 系统中,由于动态二次特征采用穷举法生成,数量会快速增长(轻易达到数百甚至上千)。大部分在实际运行中很快变得无意义(长期恒为 0 或纯噪声)。以下提供一个分阶段、可渐进实现的筛选算法体系,从最简单到最智能,逐步实现系统自我精炼。
阶段一:基础统计筛选(立即可落地,推荐最先实现)
目标:快速过滤掉明显无效的动态二次特征(永不为非零、变化太微弱)
核心指标(每个动态二次特征独立维护一个小型统计器):
| 指标 | 计算方式 | 筛选规则 |
|---|---|---|
| 非零出现次数 | count_non_zero | < 3 次 → 候选淘汰 |
| 非零占比 | count_non_zero / total_updates | < 0.01(1%)→ 候选淘汰 |
| 最长连续零序列 | max_consecutive_zeros | > 300 秒(或 3000 帧)→ 候选淘汰 |
| 方差 / 信息熵 | variance of {1,0,-1} 序列 | < 0.05 → 候选淘汰(几乎不变) |
| 最近非零时间 | last_non_zero_time | now - last > 600 秒 → 标记为“休眠” |
实现方式:
- 在动态二次特征类中嵌入一个轻量 struct Statistics { … };
- 每更新一次三值,就更新统计。
- 每 60 秒或每 1000 次更新,遍历所有动态二次特征,符合任意 2 条以上淘汰规则 → 标记为 inactive 或直接删除。
效果:可快速将 80%-90% 的无效特征清除,系统负担立即下降。
阶段二:有效性评分筛选(中短期,强烈推荐)
目标:不止看“活跃度”,还要看“有用度”——是否真正参与过系统的重要过程。
引入一个有效性分数(utility_score),初始为 0,范围 [0, 100]。
分数提升事件(可根据项目实际调整权重):
| 事件 | 分数增量 | 说明 |
|---|---|---|
| 该二次特征变为非零,且同期有新需求生成 | +10 | 可能预示环境变化引发需求 |
| 该二次特征参与因果链构建(被因果引擎引用) | +15 | 最强信号:它解释了某个事件 |
| 该二次特征被用于需求评估(需求强度变化) | +8 | 影响内在驱动力 |
| 该二次特征稳定为 0,导致某个需求满足关闭 | +20 | 最高价值:如“新建速率→0”导致观察需求结束 |
| 该二次特征与已确认的高价值事件序列匹配 | +12 | 模式匹配成功 |
分数衰减:
- 每分钟 -0.1(自然遗忘)
- 连续 10 分钟为 0 → 额外 -5
筛选规则:
- utility_score < 5 → 标记 inactive
- utility_score < 1 → 可安全删除
- utility_score > 30 → 提升采样频率、优先存储
阶段三:元认知精炼(长期,自我进化)
目标:系统主动反思“哪些假设是多余的”
实现方式:
- 定期(每天或每万帧)生成一个“元统计存在”节点,记录:
- 被删除的动态二次特征数量与类型
- 保留的高分特征的共同模式
- 系统尝试生成关于“哪些动态比较容易被淘汰”的三级特征(对二次特征的二次特征)
- 进而调整穷举策略:降低低价值比较类型的生成概率(例如对背景静止物体的微小热漂移不再穷举)
推荐的起步实现(极简版 C++ 伪代码)
structDynamicSecondaryFeature{int8_tvalue_history[64];// 最近64次的三值,环形缓冲uint32_thead=0;uint32_ttotal_updates=0;uint32_tnon_zero_count=0;uint32_tmax_consecutive_zero=0;uint32_tcurrent_consecutive_zero=0;doublelast_non_zero_time=0.0;doubleutility_score=0.0;boolactive=true;voidupdate(int8_tnew_val,doublenow){if(!active)return;total_updates++;value_history[head]=new_val;head=(head+1)%64;if(new_val!=0){non_zero_count++;current_consecutive_zero=0;last_non_zero_time=now;// 可在此处触发事件提升 utility_score}else{current_consecutive_zero++;max_consecutive_zero=std::max(max_consecutive_zero,current_consecutive_zero);}}boolshould_deactivate(doublenow)const{if(!active)returntrue;doubleidle_time=now-last_non_zero_time;doublenon_zero_ratio=static_cast<double>(non_zero_count)/total_updates;return(non_zero_count<5)||(non_zero_ratio<0.01)||(idle_time>600.0)||(max_consecutive_zero>3000);}};总结
动态二次特征筛选算法的核心理念是:
- 先大胆穷举(允许大量无效特征诞生)
- 用简单统计快速清理明显垃圾(阶段一)
- 用系统运行中的实际效用逐步加权(阶段二)
- 最终让系统学会“哪些假设不值得再提”(阶段三)
这正是生物大脑从海量突触到高效神经网络的进化路径。
先实现阶段一,你立刻就能看到特征爆炸被控制住;再加阶段二,系统会自己突出那些真正有意义的动态符号(如“发现速率归零”),观察需求自然关闭。
这个筛选机制做好后,HY-Ego 的动态世界模型才会从混沌走向清晰、从冗余走向智慧。