二十五、 查清了:"训练好、评估差"的真正原因是【奖励与判据不是同一个条件】
#★ 先说好的那部分
她【确实在读那个字】。
我把她的实际动作量出来(自校验通过):
| 指令 | 需要的位移 | 她实际走的 | 结果 |
|---|---|---|---|
| 上 | dy −43.2 | dy −42.8 | ✅ 到 |
| 右 | dy −43.2 | dy −42.7 | ✅ 到 |
| 左 | dy +14.4 | dy +11.9 | ❌ 差 2.5 px |
| 下 | dy +14.4 | dy +11.8 | ❌ 差 2.6 px |
★ 四个动作【互不相同】,而且方向【全对】。 → 所以"她没读指令"这个可能是错的。
#★ 那为什么下排失败:她提前停住了
逐刻看(下 那条):
刻 0: y=78.30 dy=+3.90
刻 1: y=82.23 dy=+3.92
刻 2: y=86.07 dy=+3.84 <- 最后一刻在动
刻 3: y=86.07 dy=+0.01 <- 停住了
...到刻 23 一直是 +0.01★ 速度完全够(+3.9/刻)。她是在刻 2 就【主动停住】的。
#★ 为什么她会停在一个"还差一点"的地方
因为两件事里那个"到了"的标准不一样:
| 名称 | 它要求的精度 | 在哪用 |
|---|---|---|
| 到过(评估判据) | 距目标中心 ≤ 4.0 px | 评估读数 |
| 末在(格内) | 落在目标【格子】里(24 × 14.4 px) | --arrive-end-bonus 奖励的 |
★ 格子比 4px 的圆【宽得多】(横向 6 倍、纵向 3.6 倍)。
★★★ 所以她的"到了"大概是"进了那个格子", 而判据要的是"进了那个圆"。
#★ 我试的那个修法失败了,但失败得有用
我加了 --arrive-end-bonus 1.0(奖励"末刻还在目标格内")。
结果:读数普遍变差 —— 她学会了停在格子里,
而那不满足严格判据。
★★★ -> 这恰恰证明了两件事: (1)两个标准确实不一样; (2)奖励一个【比判据更宽】的条件,会让策略去优化那个更宽的条件, 从而在严格判据下【更差】。
#★ 这解释了本项目一个反复出现的现象
"训练日志看起来在进步,评估却在退步。" ★ 当奖励比判据宽时,这是必然的。
#★ 下一步该做什么
| # | 做什么 |
|---|---|
| 1 | ★★★ 把奖励和判据对齐 —— 奖励也用同一个 4.0 px 条件,而不是"格内" |
| 2 | ★★ 或者把评估判据放宽到"格内"(但那会改变"到位"的含义) |
| 3 | ★ 两者必须选一个,并写进判据 |
#★ 一句话
她会读字、也会朝对的方向走,只是她"觉得到了"的地方 比我们"算到了"的地方【宽 6 倍】。