8. 训练流程(标准协议)
1.4k 字 ·
源文件 PROJECT.md 第 1568 行起 ·
goal discipline arch optim memory
#8.1 铁律:先过"可学性阶梯",再谈比较
| 级别 | 内容 | 若失败说明 | 状态 |
|---|---|---|---|
| L0 | 平凡任务(读一个通道) | 训练代码有 bug | ✅ 100% |
| L1 | 纯比较任务(one-hot 比较) | 编码或读出层有问题 | ✅ 100% |
| L2 | 本任务·延迟=0ms | 任务逻辑有问题 | 待测 |
| L3 | 本任务·短延迟 | 记忆能力不足 | 待测 |
| L4 | 本任务·完整延迟集 | 需要课程或更长训练 | 待测 |
L0/L1 已通过,所以任何失败都定位在 L2 以上。
#8.2 批构造:按延迟分桶
各延迟序列长度不同(100/300/600ms → 60/100/160 步),混批需要 padding。 按延迟分桶,每个 batch 内延迟统一,无 padding → 零浪费 + 可追踪每个桶的损失。
#8.3 优化器与超参
| 项 | 选择 | 依据 |
|---|---|---|
| 优化器 | Adam | — |
| lr | 3e-3 | 阶段 A 实测:1e-2 全失败 |
| lr 下限 | ≥ 5% 初始值 | §5 第 14 条(余弦退火锁死) |
| 梯度裁剪 | clip_grad_norm_(1.0) | 防门控爆炸 |
| batch | ≥512(GPU 上几乎免费) | §6.9 |
backbone_units | 16 | §6.1(128 全部失败) |
units | 16 起 | §6.1 |
| 读出结构 | 必须有乘法项 | §6.2 |
| 线程数 | cfc/ssm = 1;lstm/gru = 8 | §6.9 |
| 权重衰减 / dropout | 先不加 | 避免多变量 |
#8.4 评测协议
| 指标 | 定义 |
|---|---|
| 外推准确率 | 未见延迟上的平均 ← 主判据 |
| 内插准确率 | 训练见过的延迟 |
| 打断后准确率 | 按最终指令算 |
| 状态自主动力学 | 零输入下有效秩、末段每步变化 |
| tau 跨度 | 多时间尺度是否自发涌现 |
| 消融·冻结 tau | "液态"是否真在工作 |
必须 ≥3 种子并报成功率(约 12% 的种子完全失败)。
#8.5 全程日志与动态调整
训练进程每 N 步写 metrics.jsonl(每周期日志,含完整延迟扫描),
并读 control.json 实现不重启的动态调整:
| 可热改 | 作用 |
|---|---|
lr_scale | 学习率倍数 |
delay_weights | 训练延迟分布 |
eval_every | 评估频率 |
stop / note | 优雅停止 / 记录调整原因 |
工具:core/logger.py、experiments/watch_run.py