三十四、 她学得会,但留不住 —— 这是本轮最重要的一件事

★★★★★★★ 2.3k 字 · 源文件 进度.md 第 1748 行起 · goal ground memory

#★ 先说结论(一句话)

★★★★★ 她不是学不会。她是在一段训练里学得很好,然后【忘掉了】。

★★★ 同一个她、同一段训练:最会的时候考试 68.8% 到位, 训练结束时的她是 0.0%。(瞎猜的地板是 0.0%–0.8%)

★ 这两件事必须分开说,因为它们的证据是同一条曲线的两端 —— 只看一端都会得出错的结论。(我这次差点就这么做了。)

#★★ 我是怎么测出来的

训练日志里那条曲线,和 "把保存下来的她重新加载、重新考一遍",是两件事。

做法结果
★ 读训练日志★ 只看到一条起伏的曲线
★★ 把每个检查点重新加载、用【同一批世界】重考★★ 才看清"最会的时候"和"最后的时候"差多少

★ 为什么必须"同一批世界":每次训练的考试用的是它自己的随机题目。 拿两条日志的分数直接比,等于在比"两场考试的难度",而不是"两个人的水平"。 (我为此专门写了一个固定题目的复考工具。)

#★★★ 三个支架,四条线

任务:她最擅长的那个 —— 屏幕上一个字,把方块开到对应的格子里。 每次只改一件事:

线改了什么★ 最会的时候★★ 训练结束时
★ A(对照)★ 什么都没改38.0%★★ 38.0%(守住了)
★ B★ 不给她看老师的示范35.9%★ 0.0%
★ C★ 中途撤掉"进度条"★★★ 68.8%★ 0.0%
★ D★ 两样都不给(跑到一半)(跑到一半)
★ 瞎猜—0.0%–0.8%—

★★★★★ 看这条线:两条"撤掉了不同东西"的线【都崩了】。 唯一守住的是【什么都没撤】的那条。

★★★ 所以答案不是"她靠哪根支架撑着"。 而是:她能学,但【没有一个把学到的东西保存下来的机制】。

#★★ 顺便说一件我原以为的事,现在要改口

★ 我原以为"撤掉支架之后她还能学会"是最重要的问题。 现在发现更重要的问题是"学会之后能不能留住"。

★ 三个数字都很高:68.8%、38.0%、35.9%,而瞎猜是 0.8% —— 她确实在自己做事,不是碰运气,但她留不住。

#★★★ 还有一个我必须自己认的错

我在中途一度说"奖励项比监督项小两个数量级", 依据是日志里两个数字(pi=-0.000 和 sup=+0.770)。

★ 这个依据是错的。 项目自己的代码注释里早就写着: "损失的数值尺度对 Adam 几乎无影响 —— 真正决定谁说了算的是【梯度范数】。" ★ 而且项目里早就写好了测它的工具(--gn-split),我却是自己推理的。

★★★ -> 所以那条结论现在【不算数】,要用梯度范数重测。 我把它写在这里,是因为"用自己的推理替代项目已有工具"这件事本身比那条结论更值得记。

#★★ 她现在的"记忆"有多长

我把她真实的时间常数测出来了:2.0 刻(一次"刻"是 5 毫秒)。

概念数字
★ 她的记忆长度2.0 刻 = 10 毫秒
★ 一个回合有多长48 刻 = 240 毫秒
★★ 她的记忆能覆盖回合的★★ 4.2%

★ 这个数字可以在一个参数上改(ts),我试了:

ts记忆长度覆盖回合
5(她一直以来的值)2.0 刻4.1%
2510 刻20.8%
5020 刻41.5%

★★ 而且它确实有用:记忆变长后,"一个两步任务里的第二步"从 15.6% 涨到 31.2% (有条件正确率 48.4%,而瞎猜是 25%)。 ★ 但代价是第一步变弱了(100% → 64.6%)。 ★ -> 所以单一的 ts 只能在"记得住"和"反应快"之间二选一 —— 这恰好是"给记忆单独一个地方"这个想法的动机。

#★★★★★ 我这一轮学会的最重要的一件事

★★★ 一个坏掉的测量工具,如果它恰好总是返回"0", 那么它和"被测对象确实不行"在读数上【完全一样】。

★ 这一轮我写的复考工具曾经取错一个键,于是它对【任何】检查点都报 0% —— 而我当时正在等一个"她可能确实不行"的结果。

★★ 是"拿一个已知会成功的例子去试工具"这一步把它揭开的。 这个规矩我以前就会,这次是它救了我。

#★ 一句话

她学得会。她现在缺的不是信息、不是参数、不是更大的模型, 而是一个【把学到的东西留下来】的地方。


← 返回《进度.md》目录