十五、 真相反转(同一天内,第二十次更正)
★
1.7k 字 ·
源文件 进度.md 第 493 行起 ·
arch read selfcorrect
#我发现:她其实会写,而我今天测的是一个"坏掉的配置"
| 检查点 | 有回显 | ★ 无回显 | "抄"的贡献 | 留出(无回显) | 认字 |
|---|---|---|---|---|---|
var_s0(早先那条基线) | 1.0000 | ★★ 1.0000 | ★ 0.0000 | 0.4583 | 1.0000 |
P0v2old | 0.5208 | 0.0104 | 0.5104 | 0.0000 | 1.0000 |
P0v2new | 0.6250 | 0.0104 | 0.6146 | 0.0000 | 0.9896 |
★★★
var_s0不需要回显也会写(1.0),而且在没见过的字体上还有 0.4583。 → "照抄屏幕"不是这个任务的缺陷 —— 是我把配置搞坏了。
#★★★ 我错在哪(这是今天最该记的一条)
var_s0 和我今天用的配置有 12 个参数不同,而我只看见了 1 个:
| 参数 | var_s0(好的) | 我今天(坏的) | 性质 |
|---|---|---|---|
★ pred_coef | 1.0 | 0.0 | ★★ "预测下一刻"这个自监督项被【整项关掉】 |
★ echo_drop | 0.5 | 0.0 | ★★ 回显增广被关掉 |
★ emit_cost | 0.15 | 0.0 | 出手代价被关掉 |
batch | 256 | 128 | ★ 我为了"固定 batch"选的值 |
steps | 700 | 1400 | — |
★★★ 我把两条差 12 个参数的跑次拿来比,还把结果归因给"回显"。 这正是我一整天都在警告自己的那个错(一次只改一个变量)—— 而我在最关键的那次比较上又犯了。
#★★ 而最可疑的真凶是 pred_coef
"预测下一刻"这个辅助目标,正好就是"记住目标并保持"所需要的压力。 把它关掉,"靠回显抄"就变成了捷径 —— 因为没有别的东西迫使她记住。
★ 这与另一个读数方向一致:
认字两条都是 ~1.0(她认得出), 但"写完整"靠的是【保持】,而保持正是pred_coef施加的压力。
#★ 这意味着:今天几乎全部结论都要重估
| 今天的结论 | 状态 |
|---|---|
units 加 4 倍没用 | ⚠️ 在坏配置上测的 |
| 线性 vs 非线性读出无差 | ⚠️ 同上 |
pi-init-std 无效应 | ⚠️ 同上 |
| "她写不完一个汉字" | ★★ 在 var_s0 上:她能写 |
#★ 两个新工具(这轮最值钱的产出)
| 工具 | 作用 |
|---|---|
★★ tools/eval_clean.py | 独立评测:跑完训练直接测检查点,一次测完"有/无回显 × 训练/留出"<br>★ 为什么需要:曲线 json 里只有"能作弊"的那一版读数 -> 只看曲线必然被带偏 |
★ tools/diff_two_runs.py | 比较两条跑次前,先把所有不同参数列出来(12 个差异里我只看见了 1 个) |
#正在跑:复现 var_s0 的配方(判据:无回显 acc 是否又是 ~1.0)
★ 下一步一律一次只改一个变量:pred_coef 1.0→0.0(最可疑)→ echo_drop → batch。
★ 而全部在无回显下取数(用 eval_clean.py,不看曲线)。