1804 字
9 分钟
启发式学习

Heuristic Learning (HL) 是一种不需要反向传播、由 coding agent 通过直接编辑代码来迭代优化程序策略的学习范式。被 HL 长期维护的产物称为 Heuristic System (HS)。作者 Jiayi Weng(EnvPool 维护者)用 Codex (gpt-5.4) 在 Atari / MuJoCo 环境中验证了 HL 的有效性,并提出它可能是继 Pretrain → RLHF → Large-scale RL/RLVR 之后的下一个范式。

核心概念#

Heuristic Learning(HL)#

HL 是一种以程序代码而非神经网络参数为更新对象的机器学习范式:

  • 策略:由代码构成——规则、状态机、controller、MPC、宏动作
  • 状态:显式写成变量、检测器、缓存等可读表示
  • 动作:执行代码逻辑生成,非神经网络 forward
  • 反馈:由 coding agent 消化,来源包括环境 reward、testcase、日志、视频回放、人类反馈
  • 更新:不走反向传播,coding agent 直接修改 policy、状态检测器、测试、配置或 memory
  • 记忆:显式记录 trials、summary、失败原因、回放、版本 diff

Heuristic System(HS)#

HS 是 HL 长期维护的对象,不只一个孤立的 policy.py。一个完整的 HS 至少包含:

  • 程序策略(programmatic policy)
  • 状态表示(state representation)
  • 反馈入口(feedback channels)
  • 实验记录(experiment records)
  • 回放或测试(replays / tests)
  • 记忆系统(memory)
  • 由 coding agent 执行的更新机制

Deep RL vs HL 对比#

维度Deep RLHL
Policy神经网络参数代码:规则、状态机、控制器、MPC、宏动作
State显式观测显式变量、检测器、缓存
ActionNN forward pass执行代码逻辑
Feedback固定 rewardcoding agent context(test、日志、回放等)
Update梯度更新coding agent 直接编辑代码
Memoryreplay buffer(off-policy)或无(on-policy)显式记录 trials、summary、失败原因、版本 diff

HL 的关键优势#

  • 可解释性:可以直接阅读和检查代码策略
  • 样本效率:一次代码修改就可能显著改变策略
  • 可回归验证:旧能力可变成 test、replay、golden case
  • 可约束过拟合:简化、回归检查、多 seed 评估形成工程正则化
  • 部分避免灾难性遗忘:旧能力可写进 rule set 和测试,不完全依赖权重记忆

实验验证#

作者用 Codex (gpt-5.4) 在多个环境中验证了 HL 的有效性:

Atari Breakout(打砖块)#

程序策略从 387 → 507 → 839 → 864,最终达到理论最高分。关键演进:

  1. 387 分:RAM 截距策略,陷入稳定循环(接球但不清砖)
  2. 507 分:加入 cycle-breaking 机制——长时间无奖励时在预测落点加扰动偏移
  3. 839 分:加入 fast_low_ball_lead_steps=3,解决高速低位球追截过度
  4. 864 分:后期「卡住偏移逐步收掉」+ 挡板漂移补偿(弥补动作-位置一步延迟)

最终策略包含多个组件:动作探测、状态读取、球/挡板检测、落点预测、卡住循环检测、回归测试、视频回放、实验记录。

纯图像版本(RGB 分割替换 RAM):通过 14,504 步迁移达到 864 分。

MuJoCo Ant(四足机器人)#

未指定 CPG 或 MPC,Codex 自行选择了四腿反相振荡器和 PD 控制器作为起点:

trialscore_meancumulative_env_steps关键改动
cpgpd_v12291.95,000左右腿反相 CPG + PD
yawaxis_grid_v22857.920,000偏航反馈 + 重调参数
h3_428_v13162.050,000二阶/三阶谐波
mpc_residual_v13635.562,000horizon=6, candidates=32
mpc_residual_cfg43964.767,000horizon=8, candidates=48
mpc_residual_narrow044871.379,000降低 z 目标,增大 kp/候选数
mpc_residual_warm025165.285,000热启动残差计划
mpc_fast0655759.495,000更快步态 + 更大残差
mpc_term0016054.5100,000终端速度代价
mpc_default_adaptive6146.2106,300速度自适应相位 + 支撑期

最终策略包含:振荡器相位、支撑期比例、速度自适应、滚转/俯仰/偏航反馈、脚部接触、短视窗模型展开、残差平滑、终端速度代价、热启动计划衰减。

MuJoCo HalfCheetah(猎豹跑步)#

5 局复测均值 11836.7(min 11735.0, max 12041.2),进入常见 Deep RL 结果的量级。策略核心:可解释的步态/姿态规则 + online staged-tree MPC。

Atari57 全量测试#

在大参数搜索中验证通用性:57 游戏 × 2 种输入 × 3 次运行 = 342 条 coding-agent 搜索轨迹,完全无人值守。

  • 1M 步:native_obs median HNS 0.32,ram 0.26,明显高于 PPO 早期曲线
  • 9.7M 步:native_obs 0.81,ram 0.59
  • Best input mode 汇总:Codex median HNS 0.83,PPO2 0.80,CleanRL PPO 0.98
  • Best single run:Codex median HNS 1.18

HL 在 Asterix、Jamesbond、Centipede、Bowling、Skiing、Tennis 上相对突出;在 Atlantis、VideoPinball、Assault、StarGunner 上 PPO 更强。

Montezuma’s Revenge(蒙特祖玛的复仇)#

这个实验也暴露了当前程序策略的局限:

  • 一条无人值守 run 达 400 分,但本质是 86 个宏动作组成的开环路线,1769 环境步
  • 普通 if else 状态机难以表达长程规划
  • 指向下一层抽象需求:可组合宏动作、可恢复搜索状态、长期记忆

为什么 HL 以前没发展起来#

HL 的前身是专家系统和规则系统。核心瓶颈是维护成本:

人类手工维护 heuristic:今天加规则修 case A → 明天 case B 被破坏 → 后天加 if → 大后天没人敢删。

Coding agent 可以持续分析失败、修改规则并运行测试,从而降低启发式系统的维护成本。

HL 的 Continual Learning 机制#

HL 不会自动解决灾难性遗忘,而是将其转化为工程化问题:

  • 旧能力被固化为:回归测试、固定 seed replay、golden trace、失败视频、版本 diff、显式失败方向
  • HL 的历史是显式、可读、可删、可重构的

可持续维护的 HS 需要两类操作:

  1. 吸收反馈:把新失败、新日志、新 reward 写回系统
  2. 压缩历史:把局部补丁折回更简单、更可维护的表示

只追加规则而不整理历史,会让系统越来越难修改。定期合并补丁、简化表示,与吸收新反馈同样必要。

耦合复杂度#

耦合复杂度:一次更新必须同时照顾多少相互牵连的状态、规则、测试、反馈和历史。

  • 不能按代码行数衡量:500 行代码若模块清楚、测试完整,可能比 80 行缺少日志的代码更易维护
  • 好的模块化把全局耦合切成局部耦合
  • 好的测试让 coding agent 可以局部验证改动

影响因素:

  • 代码侧:模块边界、接口稳定性、测试覆盖、可观测性、回滚成本、状态可复现
  • Agent 侧:模型能力、上下文长度、memory 质量、工具质量、迭代速度

下一个范式?#

HL 的定位是继 Pretrain → RLHF → Large-scale RL/RLVR 之后的候选范式:通过持续修改程序,探索梯度训练之外的改进方式。

但 HL 受制于代码表达力(如无法纯 Python 解决 ImageNet),未来方向是 NN + HL 协同:

以机器人为例的 System 1/2 分工:

  • System 1(快):专用浅层 NN(感知/分类/状态估计)+ HL(最新数据处理、规则、回放、安全边界、局部恢复)
  • System 2(慢):LLM agent(给 HL 反馈、改进数据、周期性提取 HL 数据更新自身)

层级分解:关节级 HL → 肢体级 HL → 全身平衡 HL → 任务级 HL

Coding agent 负责持续更新系统:分析失败视频、传感器数据和仿真结果,再据此修改代码、参数、安全规则和记忆。

引用#

@misc{weng2026learning_beyond_gradients,
title = {Learning Beyond Gradients},
author = {Weng, Jiayi},
year = {2026},
month = may,
howpublished = {\url{https://trinkle23897.github.io/learning-beyond-gradients/}},
note = {Blog post}
}

完整 artifact repo:github.com/Trinkle23897/learning-beyond-gradients

启发式学习
https://blog.lpkt.cn/posts/concepts/heuristic-learning/
作者
lollipopkit
发布于
2026-05-08
许可协议
CC BY-NC-SA 4.0