PenGym 单智能体 izumi 当日进展报告:cross-family 边界继续向前推进,tiny 适配成功,tiny-small / tiny-hard 失败模式收敛,并开始转向示范轨迹与 BC warm-start 路线

一、今天这篇记录要说明什么

今天的工作重点,不再是继续纠结 medium family 内部训练细节,也不是回到 step-level LLM 的旧接法上,而是继续沿着当前已经收敛的主线,把 cross-family / cross-scenario 的边界再往前推一层,并进一步分析失败机制,尝试寻找不换 backbone 的修复路径。这一点与前一天已经确定的主线保持一致:当前最值得继续推进的方向仍然是 纯 DRL 的 cross-family 泛化边界刻画,而 LLM 更适合作为未来候选的高层统筹项,而不是当前底层动作主线。

今天真实完成并验证的事情可以概括为:

  1. 已基于当前统一动作空间 / 统一观测主线,继续补齐 small / tiny 方向的 cross-family adaptation map;
  2. 已确认:small-honeypot 仍然是当前最稳的 small family 正结果之一;
  3. 已确认:tiny20k adaptation 下可以成功;
  4. 已确认:tiny-smalltiny-hard 在当前这套 20k adaptation 下仍然失败;
  5. 已通过失败轨迹对比进一步看到:tiny-small / tiny-hard 的失败并不是“完全不会打”,而是前期 foothold 能建立,但中期会被坏分支带偏并持续浪费动作
  6. 已尝试两条“不换策略骨干”的修复线:
    • tiny -> tiny-small 的 curriculum continuation;
    • 更强的 target-level failure-block;
      但当前都未把 tiny-small0/15 拉起来;
  7. 已开始转向 示范轨迹 / BC warm-start 路线,并确认仓库中旧的 rule-demo / BC 工具链仍然存在;
  8. 已进一步确认:现有 build_demo_dataset.py 走的是原始 observation / 原始 action id 的 legacy 路线,当前产出的 demo dataset observations shape = (22, 114),并不能直接用于现有 unified cross-family 主线,因此后续如果要做 BC warm-start,需要构建兼容 unified 主线的新 demo dataset 路线。

今天最重要的阶段性结论不是“已经把 tiny 全部打通”,而是:

当前纯 DRL 主线已经进一步显出一条更细的能力边界:tiny 已可适配成功,但 tiny-small / tiny-hard 仍然会在中期错误目标选择与坏分支循环中失效;而且轻量级 curriculum 与 failure-block 还不足以把它们直接救活。

二、今天的核心目标

今天的目标可以拆成三层:

1. 继续把当前 cross-family adaptation map 补完整

也就是把昨天已经明确的:

  • small-honeypot
  • tiny-small

继续向前扩成:

  • tiny
  • tiny-hard

并最终形成更清晰的能力层级曲线。

2. 在不更换当前 PPO / MaskablePPO 骨干的前提下,分析 tiny family 中失败与成功的分叉点

也就是说,不立刻换算法、不立刻推翻之前的训练成果,而是先回答:

  • 为什么 tiny 可以成功?
  • 为什么 tiny-small / tiny-hard 仍然失败?
  • 它们的失败是同一种问题还是不同问题?

3. 如果当前轻量修补仍无效,就尝试把“示范轨迹 / BC warm-start”作为下一阶段的新增强路线引入

注意,这一步的目标不是换掉当前 backbone,而是为当前主线增加一个更强的 warm-start / imitation 入口。

三、今天具体做了什么

1. 继续补齐 small / tiny 方向的 cross-family 结果

今天首先继续确认了 current cross-family map:

(1)small-honeypot

前一阶段已经确认 small-honeypot 在 short adaptation 下是成功的,因此今天它继续作为当前最稳定的小 family 正例保留。

(2)tiny

随后对 tiny 做了 20k adaptation 并完成评估,最终结果为:

  • success = 15/15
  • avg_steps = 15
  • avg_reward = 189

这说明:

tiny 并不是当前纯 DRL 主线的硬边界;在统一接口和当前 adaptation 路线上,它已经可以被成功拉起来。

(3)tiny-small

tiny-small 的现有适配模型做完整评估后,结果仍然是:

  • success = 0/15
  • avg_steps = 200
  • avg_reward = -810

之后又尝试了:

  • tiny -> tiny-small 的 curriculum continuation;
  • 更强的 target-level failure-block;

但结果仍然是:

  • success = 0/15
  • avg_reward = -806

说明:

tiny-small 在当前配置下依旧没有被真正救活。

(4)tiny-hard

继续补完 tiny-hard 的 20k adaptation 训练与评估后,结果为:

  • success = 0/15
  • avg_steps = 200
  • avg_reward = -831

说明:

tiny-hard 目前也仍然处于当前纯 DRL 主线的失败区间。

到这里,今天已经把当前这条边界进一步补清楚:

  • medium family:稳定成功
  • small-honeypot:short adaptation 成功
  • tiny:short adaptation 成功
  • tiny-small:short adaptation 失败
  • tiny-hard:short adaptation 失败。

2. 对 tiny-smalltiny-hard 做了失败轨迹分析

今天最关键的工作之一,不是停留在最终 0/15 这一行结果,而是去对比:

  • tiny 的成功轨迹;
  • tiny-small 的失败轨迹;
  • tiny-hard 的失败轨迹。

(1)tiny-small 的失败模式

tiny-small 并不是开局完全失败。实际轨迹显示:

  • (1,0) 上可以完成 e_http -> process_scan -> pe_tomcat,建立前期 foothold;
  • (2,0) 上也可以继续拿到 USER / ROOT
  • 真正开始跑偏的是之后在 (3,1)(3,0) 这些目标上不断出现:
    • permission_error
    • undefined_error
    • 重复无增量 scan / exploit

最后打满 200 步失败。

(2)tiny-hard 的失败模式

tiny-hardtiny-small 同样不是“完全不会打”。
它也能在前期:

  • (1,0) 上拿到 USER
  • (2,0) 上继续推进

但相比 tiny-small,它在 (1,0) 上的提权更早失败,随后也很快进入:

  • permission_error
  • 失败提权
  • 重复在坏目标上浪费动作

因此可以认为:

tiny-hardtiny-small 属于同一大类失败模式,只是 tiny-hard 暴露得更早、更重。

(3)今天因此得到的机制判断

当前这两个 harder tiny 变体更像是:

  • 不是 observation / unified action 接口没打通;
  • 也不是“完全学不会开局”;
  • 而是在中期扩展阶段会被错误分支拖住,坏目标抑制和高层目标排序能力都还不够

3. 在不换策略骨干的前提下,尝试了两条轻量增强路线

(1)tiny -> tiny-small 的 curriculum continuation

今天没有直接换算法,而是先尝试:

  • tiny_adapt_20k 作为新 base;
  • 继续做 tiny -> tiny-small 的 curriculum continuation;
  • 训练出:
    • maskable_ppo_izumi_tiny_small_from_tiny_curriculum_20k.zip

但评估结果仍然是:

  • success = 0/15
  • avg_reward 仅从 -810 轻微变化到 -806

说明:

单靠把初始化来源从 medium 换成 tiny,还不足以救活 tiny-small

(2)加强 target-level failure-block

随后又继续在 tiny-small 入口上做了更强的 target-level failure-block,加强对:

  • permission_error
  • undefined_error
  • 同目标重复 exploit / scan

的抑制,并训练出:

  • maskable_ppo_izumi_tiny_small_from_tiny_curriculum_failureblock_20k.zip

但最终评估仍然是:

  • success = 0/15
  • avg_reward = -806

说明:

failure-block 虽然方向正确,但当前这版最小增强还不足以把 tiny-small 从失败区间拉出来。

4. 开始转向示范轨迹 / BC warm-start 路线

(1)确认仓库中旧的 BC 工具链仍然存在

今天已经确认仓库里存在:

  • prototype/rl/build_demo_dataset.py
  • prototype/rl/train_bc.py
  • prototype/rl/eval_bc_dataset.py
  • prototype/rl/eval_bc_env.py

说明此前的:

rule / expert demo -> dataset -> BC
这条路线是完整存在的。

(2)确认旧 demo dataset builder 的工作方式

通过读取 build_demo_dataset.py 和历史 demo 文件,今天已经明确:

  • 旧 demo 文件是由
    • HOST_NAME
    • ActionName
      组成的二维列表;
  • build_demo_dataset.py 会把它们映射成 action id,并保存为:
    • observations
    • actions
      .npz 文件。

(3)实际构造并验证了一版 tiny-small 候选 demo

今天还基于:

  • ACTION_NAMES
  • ACTION_TARGETS
  • 现有 tiny-small 轨迹信息

写出了一版 demo_tiny_small_candidate.json,并用 build_demo_dataset.py 实际回放。
结果表明:

  • 前半段路径基本能走通;
  • 还暴露出若干错误 privilege escalation 选择;
  • 更关键的是:

最终 legacy builder 产出的 dataset 形状是:

  • observations shape = (22, 114)
  • actions shape = (22,)

这说明:

当前这条 demo dataset builder 仍然是基于原始 observation / 原始 env action id 的 legacy 路线,不能直接用于当前 unified cross-family 主线。

四、今天做对了什么

1. 没有因为 tiny-small / tiny-hard 失败就立刻推翻整个 DRL 主线

今天很重要的一点是:

  • 没有一看到 0/15 就回头换算法;
  • 而是继续沿着“medium -> small -> tiny”的主线,把能力边界真正补清楚。

2. 首次把 tiny family 的内部层级也进一步拆开了

今天真正新推进出来的,不只是“tiny 好像难”,而是把它进一步拆成:

  • tiny:可适配成功
  • tiny-small:失败
  • tiny-hard:失败

这比笼统说“tiny family 不行”要精确得多。

3. 继续把失败真正归因到策略层,而不是接口层

通过今天的轨迹分析,已经能更清楚看到:

  • unified action / unified observation 并非完全没接上;
  • harder tiny 的失败主要来自中期坏分支与错误目标选择;
  • 这属于 policy-level 问题,而不是单纯 env bug。

4. 没有在 curriculum 与 failure-block 上只停留在口头讨论

今天实际把:

  • tiny -> tiny-small curriculum
  • 更强 failure-block

都真正落到代码和实验上,虽然结果还没救活 tiny-small,但它们至少把“什么没用”也变成了可验证结论。

5. 及时把示范轨迹 / BC 路线从“想法”推进到了“可执行工具链层面`

今天不是只说“也许可以做 BC”,而是已经确认:

  • demo builder 在;
  • train_bc 在;
  • eval_bc 在;
  • 候选 demo 也实际回放生成过一版数据集。

因此,后续转向 BC warm-start 已经不是空想,而是有可接的代码起点。

五、今天的问题与不足

1. tiny-small / tiny-hard 仍然没有被真正救活

今天虽然做了:

  • curriculum
  • failure-block

但它们仍然在 0/15
说明当前 problem 不是靠一层小修补就能解决的。

2. 当前示范轨迹路线虽然打开了工具链,但 expert demo 还不够成熟

今天构造的 demo_tiny_small_candidate.json 还只是候选版本:

  • 其中某些 privilege escalation 选择仍然是错的;
  • 轨迹还没形成完整稳定的成功样本。

3. legacy BC dataset 目前与 unified cross-family 主线不兼容

今天最关键的不足其实是这个:

  • 当前 build_demo_dataset.py 产出的 observation 是 114 维;
  • 而当前 unified cross-family 主线使用的是 unified observation;
  • 因此不能直接拿这个 legacy dataset 去 warm-start 当前 unified PPO 主线。

4. 当前还没有真正完成 “unified-compatible demo dataset builder”

也就是说,今天虽然把路找到了一半,但还没完成最后一步:

  • 如何把 tiny-small / tiny-hard 的 expert 路径,
  • 转成当前 unified cross-family 可直接使用的 imitation dataset。

六、今天得到的阶段性结论

今天真正能站住脚的结论可以收成六条:

1. 当前 pure DRL 主线的能力边界又往前推进了一层

已经不只是:

  • medium family 成功
  • small-honeypot 成功

而是进一步确认:

  • tiny 成功
  • tiny-small / tiny-hard 失败。

2. tiny-smalltiny-hard 属于同一类 harder tiny failure

它们都不是完全不会开局,而是:

  • 建立一部分 foothold 后;
  • 被坏分支带偏;
  • 在错误 exploit / scan 上持续浪费动作。

3. 轻量 curriculum 与最小 failure-block 还不足以解决当前 harder tiny failure

它们是正确方向,但当前强度还不够。
也就是说,后续如果继续这条路,需要更强版本,而不能指望 20k 轻量 continuation 自己把问题消化掉。

4. 当前不需要立刻换 backbone,但也不能继续只靠小修补

今天的结果说明:

  • 现在还没到必须换 PPO / MaskablePPO 的程度;
  • 但也已经过了“继续微调一点点就会自动变好”的阶段。

5. 示范轨迹 / BC warm-start 是一条值得继续推进的新候选增强线

因为它针对的正是当前 hardest cases 的核心弱点:

  • 不是开局不会;
  • 而是中期不会正确扩展。

6. 当前 BC 路线真正的关键,不是训练脚本,而是构建兼容 unified 主线的 demo dataset

这才是下一阶段最关键的新工程点。

七、下一步最合理的推进方向

今天的结果已经足够说明:当前主线不该再简单重复:

  • 再做一轮同样的 20k
  • 再加一点小 failure-block
  • 或者回头再试 step-level LLM override

更合理的后续方向有四类:

1. 先把 today 的 harder tiny failure 机制继续分析到底

也就是继续精确区分:

  • 哪些动作是稳定错误分支;
  • 哪些 host 上的 exploit / scan 应该整组压掉;
  • harder tiny 之间是否还存在更细的失败差异。

2. 把示范轨迹路线真正推到 unified 主线兼容

最重要的不是继续看 train_bc.py,而是:

  • 基于当前 unified observation / unified action;
  • 写出一套新的 demo dataset builder;
  • tiny-small / tiny-hard 的 expert path 可以直接喂给当前主线。

3. 在不换 backbone 的前提下,尝试更强的 imitation + PPO 组合

一旦 unified-compatible demos 到位,后面最自然的增强路径就是:

  • demo / BC warm-start
  • 然后 PPO fine-tune

而不是二选一地“纯 BC”或“纯 PPO”。

4. 等单智能体 harder tiny 的增强线更明确之后,再重新考虑 LLM 的高层引入方式

今天之后,LLM 仍然不该回到底层动作环;
它更适合等单智能体 harder tiny 失败机制看得更清楚以后,再作为:

  • 高层规划
  • 失败反思
  • 跨 family 抽象总结

这一层重新接入。

八、明天开始时的第一件事

明天继续时,不要回头重跑已经明确无效的轻量 continuation,也不要回到旧的 step-level LLM 讨论。

直接从这里接:

第一目标

实现一套 兼容 unified cross-family 主线的 demo dataset builder

它要解决的问题

把:

  • tiny-small / tiny-hard 的 expert path
  • 从当前 legacy 的 raw env / 114-dim dataset
  • 转成当前 unified observation / canonical action space 下可直接使用的 imitation dataset

这样做的意义

一旦这层统一 demo 数据管线打通,后面就可以在不更换当前 PPO backbone 的前提下,真正开始做:

  • harder tiny 的 BC warm-start
  • imitation + PPO fine-tune
  • 再验证 tiny-small / tiny-hard 是否能被真正救活

这才是下一阶段最实在、也最值得继续推进的工作。