用 120 秒的结果预测 600 秒排名:按步数修正,学习率另调

直接按 120 秒 loss 排,和 600 秒排名的秩相关只有 0.65。加上步数修正后升到 0.95,但只在学习率不变时成立。学习率要在 600 秒重新调。

直接按 120 秒排序,到 600 秒排名变化很大:秩相关 0.65,120 秒前 80 名内部只有 -0.03

我从跑满 4 个种子的 120 秒模型里取了最好的 80 个,再随机取 220 个,每个训练 600 秒(种子 42,其中 300 个加跑种子 43)。120 秒的值取同一次运行在第 120 秒的检查点,它和单独跑 120 秒的结果几乎一样(学习率不衰减)。

600 秒的种子噪声很小:单次运行的标准差 0.0044,两个种子的排名秩相关 0.98。所以排名的变化来自模型本身,不是噪声。

120 秒内步数最少的三分之一(< 1000 步)中间三分之一最多的三分之一(> 1312 步)
2.55 2.60 2.65 2.70 2.75 2.80 120 秒时的 loss 600 秒时的 loss
每个点是一个模型。右上角少数很差的模型被压在边上。

120 秒内步数少的模型,后面追回得多:下降量和步数的秩相关 -0.93

步数指 120 秒内完成的更新次数。每步的数据量固定(256 条 × 256 token),所以步数就是模型的速度。大模型、层多的模型每步慢,到 120 秒时还在学习曲线的前段,后面 480 秒还能降很多。快的小模型在 120 秒已经接近自己的上限。

0.10 0.15 0.20 0.25 500 1000 2000 120 秒内的更新步数(对数刻度) 120 秒到 600 秒 loss 下降了多少
每个点是迁移样本里的一个模型。

按“120 秒 loss + 0.11 × ln(步数)”排序,在学习率 0.01 下能预测 600 秒排名:没参与拟合的 8 层布局从 0.42 升到 0.90

我用迁移样本拟合了 600 秒 loss ≈ -0.63 + 0.92 × 120 秒 loss + 0.102 × ln(步数)。意思是:120 秒 loss 相同时,步数多一倍的模型,600 秒 loss 高 0.070。只看排序时常数无关,等价于按“120 秒 loss + 0.11 × ln(步数)”排。

一半拟合、一半检验,秩相关从 0.65 升到 0.95。拿到别的轮次上检验(没参与拟合,学习率同为 0.01):8 层布局 0.42 → 0.90,其他长预算轮次 -0.45 → 0.59。在 120 秒前 80 名内部,120 秒 loss 只差 0.015,直接排是 -0.03,修正后 0.92:这时排名几乎全由步数决定,越慢的模型 600 秒越好。

迁移样本(用来拟合)其他轮次,学习率 0.01(没参与拟合)其他轮次,Muon 学习率更低
2.50 2.60 2.70 2.80 2.90 2.50 2.60 2.70 2.80 2.90 预测的 600 秒 loss 实际的 600 秒 loss
虚线是“预测 = 实际”。橙点大多落在虚线下方:实际比预测好。

学习率一变,这个修正就失效:低学习率在 120 秒吃亏、在 600 秒占优,预测偏高 0.11~0.20

修正公式是在学习率 0.01 下拟合的,0.01 正好是 120 秒的最优学习率。600 秒的最优 Muon 学习率是 0.0035。学习率低的模型在 120 秒落后,到 600 秒反超,公式看不到这一点:预测比实际高(0.005 时 +0.11、0.0035 时 +0.17、0.0025 时 +0.20)。换学习率之后,两种排法的秩相关都不超过 0.38。

在最优区域抽样里,同一组学习率内的模型差别很小,两种排法只有 0.13 和 0.21,只能直接跑 600 秒。

直接按 120 秒 loss 排按 120 秒 loss + 0.11 × ln(步数) 排
-0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 和 600 秒真实排名的秩相关 迁移样本(一半拟合、一半检验) · 300 个 +0.65 +0.95 迁移样本里 120 秒最好的 80 个 · 80 个 -0.03 +0.92 8 层布局,学习率 0.01 · 44 个 +0.42 +0.90 其他长预算轮次,学习率 0.01 · 25 个 -0.45 +0.59 Muon 学习率 0.005 · 151 个 -0.16 -0.02 Muon 学习率 0.0035 · 167 个 +0.22 +0.24 Muon 学习率 0.0025 · 114 个 +0.35 +0.38 最优区域抽样,同一组学习率内 · 360 个 +0.13 +0.21
最后一组先在每组学习率内算秩相关,再按模型数加权平均。

怎么用

第一步,固定学习率,用 120 秒筛结构,按“120 秒 loss + 0.11 × ln(步数)”排,不要直接按 120 秒 loss 排。

第二步,前几十名放到 600 秒跑,在 600 秒重新调学习率。

第三步,最优区域里的比较只用 600 秒的结果,至少 2 个种子,同种子配对。

注意:分数是训练时的在线 loss,没有留出集。600 秒时,迁移样本的模型把 2 亿 token 的数据看了 1.8 遍(中位数),最快的 3.7 遍,loss 里可能有记忆的成分。快模型重复得更多,记忆只会偏向快模型,而这里看到的是慢模型追回,所以步数修正的方向不是记忆造成的。