“我们的模型在 HumanEval 上比基线高 3 个点。”这句话是不是一个结论?这一篇给出判断它的工具:置信区间与显著性。它们来自第四篇的两条性质——样本均值的标准差是 \(\sigma / \sqrt{n}\)、大量独立量之和近似高斯——加上一个数字 1.96。然后讲另一件”从一组数字里找规律”的事:拟合。scaling law 那些漂亮的曲线是怎么从几十个实验点拟出来的、为什么画在双对数坐标上、以及 Chinchilla 的”每个参数配 20 个 token”是怎么算出来的。

这一篇的每个概念都用模拟来看:统计里”标准误”、”95%”、”p 值”这些词说的都是”如果把同一件事重复做一万次会怎样”——那就真的重复一万次,画出来。全部数字与图由 math-for-ai/08_inference_and_fitting.py 生成;第四章的多种子实验是实跑的 20 次训练(08_multi_seed.py);第六章的幂律拟合用的是 labs 里 7 个真实训练的小模型的 loss。

全篇的核心问题是:

HumanEval 上差 3 个点算不算提升?1 scaling law 的曲线是怎么拟出来的、\(D/N \approx 20\) 从哪来?2

一、总览

1. 两件事

本文的两件事
  问题 工具链 章
推断 从一个样本回答”真实值在哪、差异是不是噪声” 标准误 \(= \sqrt{p(1-p)/n}\) → 95% 区间 = 估计 ± 1.96 × 标准误 → 两个区间分得开吗 / 配对检验 / p 值 → 多种子实验 二、三、四
拟合 从一组 \((x, y)\) 点回答”\(y\) 和 \(x\) 是什么关系” 最小二乘 → 幂律取对数变直线 → 拟合常数的置信区间与外推 → \(L(N, D) = E + A/N^\alpha + B/D^\beta\) → 约束极值给出最优 \(N, D\) 五、六

2. 本文的章节安排

本文的章节安排
章 主题 内容
二 样本均值与标准误 抽样噪声长什么样(同一个模型评 1000 次)、标准误、中心极限定理(画出来)
三 置信区间 100 个区间里 95 个盖住真值、1.96 从哪来、benchmark 的实际数字、两个模型怎么比(独立 vs 配对的模拟)
四 假设检验与 p 值
  • 置换检验:把 p 值算出来
  • 三个误读
  • 实跑 20 次训练的多种子实验
五 最小二乘拟合 5 个点手算直线、残差、幂律与双对数坐标、非线性拟合
六 scaling law 算例 7 个真实小模型的幂律拟合与 bootstrap 区间、外推的风险;Chinchilla 的公式、代两组数字、等 loss 线与等算力线相切、\(D/N\)
七 案例:论文说提升了 1.5 个点,信不信 一张检查表
八 本文小结  
九 自测 七道题

二、样本均值与标准误

1. 从样本估真实值

评测集有 \(n\) 道题,模型答对了 \(k\) 道,正确率 \(\hat p = k / n\)。这个 \(\hat p\) 是估计值:如果换另外 \(n\) 道同类的题,结果会不一样。我们关心的是真实正确率 \(p\)——模型在”所有这类题”上的正确率——\(\hat p\) 只是它的一个带噪声的观测。

“会不一样”到什么程度?直接模拟:假设一个模型的真实正确率是 80%,给它出 164 道题(HumanEval 的题数)评一次,记下正确率;再换 164 道题评一次……评 1000 次(noise 段):

真实正确率 80% 的同一个模型,在 164 / 1319 / 14042 道题上各评 1000 次的正确率分布:HumanEval 从 0.70 散到 0.89,GSM8K 0.77–0.84,MMLU 0.79–0.81

同一个模型、同样的真实水平 80%,在 HumanEval 上一次评测能落在 0.70 到 0.89 之间。评出 0.85 和评出 0.75 的可能是同一个模型。这就是抽样噪声——本章的全部内容是给这团散布一个数字。

2. 标准误

第四篇算过:每道题对错是一次伯努利试验(方差 \(p(1 - p)\)),\(n\) 道题的平均 \(\hat p\) 的方差是 \(p(1 - p) / n\)。它的平方根叫 \(\hat p\) 的标准误(standard error):

\[\text{SE}(\hat p) = \sqrt{\frac{\hat p (1 - \hat p)}{n}}\]

(真实的 \(p\) 不知道,用 \(\hat p\) 代。)标准误就是上图那团散布的标准差——”估计值围绕真实值抖动的典型幅度”。模拟与公式对得上:

标准误的模拟值与公式值
\(n\) 1000 次评测的正确率标准差(模拟) \(\sqrt{0.8 \times 0.2 / n}\)(公式) 最低 – 最高
164 0.0310 0.0312 0.701 – 0.890
1319 0.0108 0.0110 0.766 – 0.836
14042 0.0035 0.0034 0.789 – 0.810

它随 \(\sqrt{n}\) 缩小:题数翻四倍,标准误减半;从 164 到 14042 题数翻了 86 倍,标准误缩了 9 倍。

3. 中心极限定理

\(\hat p\) 是 \(n\) 个独立 0/1 之和除以 \(n\)。中心极限定理(第四篇)说:\(n\) 大时它近似高斯,均值 \(p\)、标准差 \(\text{SE}\)。把 \(n\) 从 1 加到 100 画出来(clt 段):

n = 1 时只有 0 和 1 两根柱子;n = 3 时四根;n = 10 时已有钟形轮廓;n = 100 时与红色的高斯曲线几乎重合

\(n = 1\) 时平均值只能是 0 或 1;\(n = 3\) 时是 0、1/3、2/3、1 四种;\(n = 10\) 时已经有钟形的轮廓;\(n = 100\) 时与高斯曲线几乎重合。不管每道题的对错是多么”非高斯”的 0/1,很多道题的平均一定近似高斯——这就是中心极限定理,于是高斯的那条性质可用:95% 的概率落在均值 \(\pm 1.96\) 个标准差内。

三、置信区间

1. 定义与 1.96

95% 置信区间是

\[\hat p \pm 1.96 \times \text{SE}(\hat p)\]

读法:真实的 \(p\) 有 95% 的把握在这个范围里。严格的说法要小心一点——真实值 \(p\) 是一个固定的数,不会”有 95% 的概率在哪”;抖动的是区间。正确的读法是:按这个方法反复构造区间,95% 的区间会盖住真实值。模拟 100 次(ci 段):

左:100 次评测(真实 p = 0.8,n = 164)各自的 95% 区间——94 根蓝线盖住了真值,6 根红线没有;右:标准正态分布,中间 95% 的面积落在 ±1.96 之间,两侧各 2.5%

100 根线里 94 根盖住了 0.8,6 根(红色)没有——与”95%”相符。注意红线不是”算错了”,它们是正常的 5%:任何一次评测的区间都可能是那 5% 之一,你不知道自己拿到的是哪一种。

1.96 来自标准正态分布——右图中间 95% 面积的边界:\(P(-1.96 < Z < 1.96) = 0.95\),两侧各留 2.5%。想要 99% 就换 2.58,90% 换 1.64。

2. 常用 benchmark 的实际数字

常用 benchmark 的样本数、标准误与显著差异
Benchmark \(n\) 假设 \(\hat p\) 标准误 95% 区间半宽 两个模型独立比较时的显著差异
HumanEval 164 0.80 3.1% ±6.1% 约 8.7 个点
GSM8K 1319 0.90 0.8% ±1.6% 约 2.3 个点
MMLU 14042 0.70 0.4% ±0.8% 约 1.1 个点

算一行给你看(HumanEval):\(\text{SE} = \sqrt{0.8 \times 0.2 / 164} = \sqrt{0.000976} = 0.031\);区间半宽 \(1.96 \times 0.031 = 0.061\)。所以”HumanEval 80.0%”的真实含义是”真实正确率在 74% 到 86% 之间”。

3. 两个模型怎么比

独立比较:两个模型各有自己的估计与标准误,差值 \(\hat p_1 - \hat p_2\) 的标准误是 \(\sqrt{\text{SE}_1^2 + \text{SE}_2^2}\)(独立量之差的方差相加);两者都约 3.1% 时是 \(3.1\% \times \sqrt{2} = 4.4\%\),显著差异要 \(1.96 \times 4.4\% \approx 8.7\) 个点。表里最后一列就是这么算的。

模拟看一遍(compare 段):模型 A 真实正确率 80%、模型 B 77%——A 确实比 B 好 3 个点。各自在 164 道题上评一次、相减,重复 5000 次:

左:A(真 80%)与 B(真 77%)各评 164 题相减,5000 次里观测到的差从 −0.10 散到 +0.15,24% 的次数 B 反而看起来更高;右:配对比较时判为显著的比例随两模型错题重叠程度上升,从 9% 到 26%

观测到的差平均 0.029(对,真实差就是 0.03),但标准差 0.046——24% 的次数 B 反而看起来更高,只有 10% 的次数能”显著地”判出 A 更好。结论直接而残酷:HumanEval 上差 3 个点在噪声范围内;GSM8K 上差 2 个点勉强;只有 MMLU 这种规模才能分辨 1 个点。

配对比较:两个模型如果在同一套题上评,可以逐题比较——看有多少题是”A 对 B 错”、多少是”A 错 B 对”(两个都对或都错的题不提供信息)。这叫配对检验(McNemar 检验是一种),比独立比较灵敏:两个模型答错的题高度重叠时,它们的差异主要来自少数几道”分歧题”,噪声比独立估计小。上图右边模拟了四种重叠程度:错题几乎不重叠时(\(\rho = 0\),平均 55 道分歧题)配对与独立一样只有 9% 能判出;错题高度重叠时(\(\rho = 0.95\),平均 13 道分歧题)升到 26%。所以”164 题分辨不出 3 个点”是独立比较的结论,配对时要看分歧计数,不能一概而论;配对能分辨多细,边界是分歧题数,不是总题数。

McNemar 的算法很简单:分歧题里 A 独对 \(n_{10}\) 道、B 独对 \(n_{01}\) 道,若两者一样好,这两个数应该差不多,\(z = (n_{10} - n_{01}) / \sqrt{n_{10} + n_{01}}\) 超过 1.96 才显著。A 独对 12、B 独对 7:\(z = 5 / \sqrt{19} = 1.15\),不显著;A 独对 5、B 独对 0:精确双侧 \(p = 2 \times 0.5^5 = 0.0625\),接近显著。

4. 为什么读论文要保持怀疑

上表是 L5 评测系列与横切”实验方法论”里”差异多大才算显著”的数学来源,也是读论文时对”提升 1.5 个点”保持怀疑的依据:如果 benchmark 只有几百题、论文没报区间或多次运行的方差,那个 1.5 个点大概率是噪声。同一套工具还用在别处:多个随机种子的结果报均值与标准差;A/B 测试的显著性;scaling law 拟合参数的置信区间(第六章)。

四、假设检验与 p 值

1. 含义

假设检验把问题反过来问:”如果两个模型其实一样好(零假设),观察到这么大的差异有多大可能?”这个概率叫 p 值。p 值很小(惯例 < 0.05)说明”一样好”的假设与观测不符,拒绝它,宣布差异显著。

p 值可以不用任何公式直接算出来——置换检验(pvalue 段):拿一次真实的配对评测(A 对 142 题 = 0.866,B 对 138 题 = 0.841,差 0.024),如果两个模型真的一样好,那么每道题上”谁对谁错”的标签是可以互换的。随机交换每道题两个模型的答案,重新算差值,做 10,000 次:

打乱标签 10000 次后 A − B 的分布,中心在 0;实际观测到的 0.024 落在分布中间,两侧比它更极端的占 54%——这就是 p 值

实际观测到的 0.024 落在这个分布的中间——两侧比它更极端的占 53.6%。p = 0.54:两个模型一样好时,这么大的差每两次就出现一次,什么都说明不了。如果观测到的差落在分布的尾巴上(比如 0.08,比它更极端的只占 1%),p = 0.01,才能说”不像噪声”。

它与置信区间是一回事的两种说法:差值的 95% 置信区间不包含 0 \(\Leftrightarrow\) p < 0.05(同一种检验、同一种区间构造下)。注意这里说的是差值的区间——”两个模型各自的区间重叠”不能推出差异不显著:两个区间半宽各 3 个点、中心差 5 个点,看起来重叠,差值的半宽却只有 \(3\sqrt{2} \approx 4.2\),差异是显著的。

2. 不是什么

三个常见误读,各配一个数字:

  • p 值不是“零假设为真的概率”,而是”零假设为真时看到这种数据的概率”——条件反了(第四篇的贝叶斯公式说过两者不同)。上面 p = 0.54 不是说”两个模型有 54% 的概率一样好”,而是”若一样好,有 54% 的概率看到 ≥ 0.024 的差”。
  • p < 0.05 不是“效果大”,只是”差异不像噪声”。MMLU 上 1.1 个点可以显著(题多,噪声小),但 1.1 个点的意义要另论。
  • 不显著不是“没有差异”,只是”这么少的题分辨不出来”。上面模拟里 A 确实比 B 好 3 个点,164 题上 90% 的次数都”不显著”。

3. 多种子实验:实跑 20 次训练

训练本身有随机性(初始化、数据顺序、dropout),同一个配方跑两次结果不同。报一个数字是不够的:跑 3–5 个种子,报均值 ± 标准差。多大的差算差?用一个实跑的例子(08_multi_seed.py):在莎士比亚字符数据上训一个 0.1M 参数的小 GPT 400 步,四个配方各 5 个种子:

四个配方各 5 个种子的 val loss 散点与均值的 95% 区间:A(lr 1e-3)2.337 ± 0.003;B(weight decay 改 0.1)2.345 ± 0.003;C(lr +2%)2.331 ± 0.006;D(lr +20%)2.305 ± 0.014

四个配方各 5 个种子的实跑结果
配方 改动 val loss(5 种子均值 ± 标准差) 与 A 的差 差值的标准误 \(t\) p(Welch t 检验) 结论
A 基线:lr \(10^{-3}\),wd 0.01 2.3370 ± 0.0027 —        
B weight decay 0.01 → 0.1 2.3454 ± 0.0025 +0.0084 0.0016 5.1 0.001 显著变差
C lr +2% 2.3308 ± 0.0055 −0.0062 0.0028 2.3 0.066 分不出来
D lr +20% 2.3050 ± 0.0139 −0.0320 0.0063 5.1 0.006 显著变好

三个读法:

  • 种子噪声有多大:同一配方 5 个种子的 val loss 标准差 0.003–0.014,D 的最好与最差种子差 0.03。所以两个配方各跑一个种子相差 0.01,什么都说明不了。
  • 差值的标准误:\(\sqrt{s_A^2 / 5 + s_B^2 / 5}\),与 \(t\) = 差值 / 标准误。\(t\) 到 5 是”差 5 个标准误”,噪声几乎不可能造出来;\(t = 2.3\) 在边界上。C 的 +2% 学习率:5 种子均值好了 0.006,但如果 A、C 各只跑一个种子再相减,25 种组合里有 8% 的组合符号是反的——这就是单种子对比会得出相反结论的例子。
  • 多少种子够:看差值的标准误相对差值有多大——要它降到差值的一半以下。C 要判出来大概需要 20 个种子;D 用 3 个种子就够了。

这是横切”实验方法论”的核心规则之一,数学根源就是本章。

五、最小二乘拟合

1. 直线拟合

有一组点 \((x_i, y_i)\),想找一条直线 \(y = a x + b\) 尽量穿过它们。”尽量”的标准是最小二乘:让所有点到直线的竖直距离(残差)的平方和最小,

\[\min_{a, b} \sum_i (y_i - a x_i - b)^2\]

对 \(a, b\) 求导令为零(上一篇的工具),得到闭式解:

\[a = \frac{\sum_i (x_i - \bar x)(y_i - \bar y)}{\sum_i (x_i - \bar x)^2}, \qquad b = \bar y - a \bar x\]

用 5 个点手算一遍(lsq 段):\(x = (1, 2, 3, 4, 5)\),\(y = (2.5, 3.6, 6.4, 7.5, 10.4)\)。\(\bar x = 3\),\(\bar y = 6.08\);\(\sum (x - \bar x)(y - \bar y) = 19.70\),\(\sum (x - \bar x)^2 = 10\);所以 \(a = 1.97\),\(b = 6.08 - 1.97 \times 3 = 0.17\)。numpy.polyfit 给出同样的 \((1.97, 0.17)\)。

5 个点、最小二乘直线 y = 1.97x + 0.17 与每个点的残差(红色竖线,+0.36、−0.51、+0.32、−0.55、+0.38),残差平方和 0.939;随手画的 y = 1.6x + 1.4 残差平方和 2.38

红色竖线是残差,平方和 0.939——换任何别的直线平方和都更大(图中虚线 2.38)。平方和让大偏差被重罚、小偏差几乎不计,与第二篇的 \(L_2\) 范数是同一个偏好。任何统计库一行代码,但要知道它在做什么:拟合就是最小化一个 loss(残差平方和),与训练模型是同一件事,只是参数只有两个、有闭式解。

2. 幂律与双对数坐标

scaling law 的形式是幂律 \(y = c\, x^{-\alpha}\):loss 随参数量按某个负指数下降。两边取对数:

\[\log y = \log c - \alpha \log x\]

——在双对数坐标上是一条直线,斜率是 \(-\alpha\)。这是为什么 scaling law 的图横纵轴都是对数刻度:幂律在那里是直线,直线可以用上一节的最小二乘拟合,斜率就是指数。看到一张双对数图上的直线,读它的斜率就读出了”规模翻十倍 loss 降多少”:斜率 \(-0.07\) 意味着参数量 ×10,loss ×\(10^{-0.07} = 0.85\)。

幂律在普通坐标上是弯曲线,在双对数坐标上是直线,斜率就是指数

左图的六个点和右图的六个点是同一组数据。左边只能看出”越来越平”,右边一眼看出它们在一条直线上,斜率 \(-0.3\) 就是指数 \(\alpha\)——这也是判断”这组数据是不是幂律”的最简单办法:画到双对数坐标上,直不直。

3. 非线性拟合

\(L(N, D) = E + A/N^\alpha + B/D^\beta\) 有五个未知常数,且不能整体取对数变成直线(有常数项 \(E\))。这类问题用非线性最小二乘:从一个初始猜测出发,用梯度法迭代地调五个常数让残差平方和最小——就是上一篇的梯度下降用在”拟合”上。Chinchilla 实际用的是 Huber loss(对离群点不那么敏感的平方和变体)和 L-BFGS 优化器,细节不重要,重要的是:拟合就是最小化一个 loss,与训练模型是同一件事。

六、scaling law 算例

1. 先拟一条自己的:7 个真实小模型

labs 的 scaling_law_fit.py 在 CPU 上训了 7 个尺寸的字符级 Transformer(非 embedding 参数 14K 到 889K,每个训 10.2M token),记下 final loss。用前 6 个点在双对数坐标上拟直线、外推第 7 个(powerlaw 段):

左:7 个模型的 (N, loss) 在双对数坐标上近似一条直线,斜率 −0.104;右:用前 6 点拟合并外推,bootstrap 95% 区间窄到几乎看不见,但第 7 个模型的实测 1.341 落在直线预测 1.296 的区间之外;虚线是带不可约项 E 的三参数拟合,外推更贴近

7 个真实小模型的幂律拟合
  结果
双对数直线斜率 \(-0.104\),即 \(\alpha = 0.104\):参数 ×10,loss ×\(10^{-0.104} = 0.79\)
\(\alpha\) 的 95% 区间(bootstrap 5000 次) [0.101, 0.107]——很窄
外推到第 7 个模型(\(N\) = 889K,实测 1.3415) 直线预测 1.296,95% 区间 [1.286, 1.305]——实测值在区间外,误差 −0.045
带不可约项的三参数拟合 \(E + A/N^\alpha\) \(E = 0.62\),\(\alpha = 0.166\);外推第 7 点 1.317,误差 −0.025

两个教训比数字本身重要。第一,区间窄不等于对。 bootstrap 的区间只回答”如果噪声重来一遍,拟出的直线会抖多少”——6 个点几乎在一条直线上,抖得很少,区间就很窄。但第 7 个点还是落在了区间外:误差不来自噪声,来自公式的形式——loss 不会无限下降(数据本身有熵,第六篇),纯幂律没有这一项,往大模型外推必然越来越乐观。加上 \(E\) 项后外推误差减半。第二,外推越远越不可信。 就算形式对,再往外 ×10 时区间也在张开(右图),而真实工作里 scaling law 要从几亿参数外推到几千亿——三个数量级。读 scaling law 的论文,看指数的置信区间、看拟合点的范围、看有没有留出验证点,与看 benchmark 的置信区间是同一种习惯。

2. Chinchilla 的公式

Chinchilla(Hoffmann 等 2022)拟合的形式是

\[L(N, D) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta}\]

\(N\) 是参数量,\(D\) 是训练 token 数。三项各有含义:\(E\) 是不可约的损失——数据本身的熵(第六篇第三章),模型再大数据再多也降不到它以下;\(A/N^\alpha\) 是模型太小带来的损失,随 \(N\) 幂律下降;\(B/D^\beta\) 是数据太少带来的损失,随 \(D\) 幂律下降。论文用几百组 \((N, D, L)\) 的实验点拟出:

\[E = 1.69, \quad A = 406.4, \quad B = 410.7, \quad \alpha = 0.34, \quad \beta = 0.28\]

3. 代两组数字

\(N = 8\text{B}\) 时 \(A / N^\alpha = 406.4 / (8 \times 10^9)^{0.34} = 406.4 / 2326 = 0.175\),两种数据量:

8B 模型在两种数据量下的 Chinchilla 预测 loss
\(D\) \(B / D^\beta\) \(L = 1.69 + 0.175 + B/D^\beta\)
160B(Chinchilla 最优的 20 倍) \(410.7 / (1.6 \times 10^{11})^{0.28} = 410.7 / 1372 = 0.299\) 2.16
15T(Llama-3 的实际用量) \(410.7 / (1.5 \times 10^{13})^{0.28} = 410.7 / 4886 = 0.084\) 1.95

多花 94 倍的训练数据(160B → 15T)换 0.21 nat。值不值?取决于推理成本:一个 8B 模型每次推理比”同样 loss 但更大的模型”便宜得多,如果模型要被调用几万亿次,训练时多花的算力很快回本。这就是 Llama-3 选择”过训练”(训练远超 Chinchilla 最优的 token 数)的算术,L4 预训练系列的第三篇展开。注意这组常数拟合自 Chinchilla 自己的数据与分词器,对其他模型只有量级上的参考价值——上面两个数字是”用公式做算术”,不是 Llama-3 真实的 loss。

4. 约束极值:算力固定时 \(N\) 与 \(D\) 怎么配

训练算力约为 \(C \approx 6ND\)(第一篇:前向 \(2N\),反向 \(4N\),乘 \(D\) 个 token)。问:算力 \(C\) 固定,\(N\) 和 \(D\) 怎么分配让 \(L\) 最小?先看图(chinchilla 段):

L(N, D) 的等 loss 线(灰)与三条等算力线 6ND = 1e21 / 1e23 / 1e25(彩);每条等算力线上 loss 最小的点是它与某条等 loss 线相切的地方;三个最优点连成一条斜线

灰线是 \(L\) 相等的点(等 loss 线),彩线是算力相等的点(\(6ND = C\),双对数坐标上是斜率 −1 的直线)。沿一条等算力线走——参数多一点、数据少一点,或反过来——loss 先降后升,最低点是它与等 loss 线相切的地方,与上一篇拉格朗日乘子那张图是同一个几何。这是上一篇第七章的带约束极值:

\[\mathcal{L}(N, D, \lambda) = E + \frac{A}{N^\alpha} + \frac{B}{D^\beta} - \lambda\,(6ND - C)\]

对 \(N\)、\(D\) 求导令为零,两式相除消去 \(\lambda\),得到最优点的条件

\[\alpha \frac{A}{N^\alpha} = \beta \frac{B}{D^\beta}\]

——”模型太小的损失”与”数据太少的损失”按 \(\alpha : \beta\) 的比例平衡。代入 \(C = 6ND\) 解出

\[N_{\text{opt}} \propto C^{\,\beta / (\alpha + \beta)} = C^{\,0.45}, \qquad D_{\text{opt}} \propto C^{\,\alpha / (\alpha + \beta)} = C^{\,0.55}\]

算力翻倍时参数量和数据量应该差不多同步增长(指数都接近 0.5)——图上三个最优点连成一条斜线就是这个意思。这是 Chinchilla 的核心结论,推翻了之前”算力主要该花在更大的模型上”的做法。\(D / N \approx 20\) 是他们在实验规模(几亿到几百亿参数)上用另外两种更直接的方法(固定 \(N\) 扫 \(D\) 看最优点;固定算力扫 \(N\) 看最优点)得到的经验比例,70B 参数对应 1.4T token。

5. 拟合结果的不确定性

一个诚实的注脚:图上三个相切点的 \(D/N\) 分别是 51、77、124——如果把那组常数直接代进上面的条件解 \(D/N\),得到的比例远大于 20。参数式拟合(论文的第三种方法)与前两种实验方法的结论并不完全一致,后来的复现工作(Besiroglu 等 2024)指出这组常数的估计有偏、且给出的置信区间很宽。这恰好是第 1 节的教训在真实论文里的样子:拟合出来的常数是估计值,有标准误,还依赖公式形式;用它们外推到实验范围之外时,不确定性会被放大。

七、案例:论文说提升了 1.5 个点,信不信

把本文的工具排成一张检查表。读到”我们的方法在 X 上比基线高 1.5 个点”时按顺序问:

读一个”提升”时的检查表
问 怎么算 例
1. benchmark 有多少题? 标准误 \(\approx \sqrt{p(1-p)/n}\) 164 题、\(p \approx 0.8\):3.1 个点;1.5 个点连半个标准误都不到
2. 是独立比较还是配对? 独立:差值 SE = \(\sqrt{2} \times\) 单个 SE;配对:看分歧题数 独立比较 164 题上要差 8.7 个点才显著
3. 报了区间 / 标准差 / 多次运行吗? 没报就按第 1 问自己算 大多数论文表格没有
4. 采样设置固定了吗? 温度、top-p、few-shot 数、prompt 格式不同就是不同的分布(第五篇) “greedy” 与 “temperature 0.6” 的分数不能直接比
5. 是一次训练的结果还是多种子? 训练随机性的标准差可能与提升同量级(第四章第 3 节) 单种子 +2% 学习率的对比有 8% 的概率符号是反的
6. 在多少个 benchmark 上比? 20 个 benchmark 里总有一个碰巧显著(多重比较) 只报最好的那个是常见操作
7. 如果是 scaling 曲线,拟合点的范围?外推了几个数量级? 第六章第 1 节 6 个点、外推一档就偏了 0.045

七问下来,”HumanEval 上 +1.5 个点、单次运行、没报区间”基本可以当作没有结论;”MMLU 上 +1.5 个点、5 个种子均值、报了标准差 0.3”则值得认真对待。这不是苛刻——是把”噪声有多大”算出来之后的正常反应。

八、本文小结

  • 抽样噪声:真实 80% 的模型在 164 题上一次评测能落在 0.70–0.89;标准误 \(\sqrt{p(1-p)/n}\) 就是这团散布的标准差(模拟 0.031,公式 0.031),随 \(\sqrt n\) 缩小。中心极限定理:很多个 0/1 的平均近似高斯,\(n = 100\) 时已与钟形重合。
  • 95% 置信区间 = 估计 ± 1.96 × SE;正确读法是”反复构造,95% 的区间盖住真值”(模拟 100 个,94 个盖住)。1.96 是标准正态中间 95% 的边界。
  • 两个模型怎么比:独立比较时差值 SE 是 \(\sqrt 2\) 倍——真差 3 个点,164 题上 24% 的次数看起来反而是 B 更好;配对比较看分歧题数,错题重叠越多越灵敏(9% → 26%)。
  • p 值是”零假设为真时看到这种数据的概率”,置换检验能直接算(打乱标签 10000 次);不是”零假设为真的概率”,不是”效果大”,不显著不是”没差异”。
  • 多种子:实跑 20 次训练,同配方种子标准差 0.003–0.014;+20% 学习率 \(t = 5\) 显著,+2% 学习率 \(t = 2.3\) 分不出来、单种子对比 8% 会反向。看差值的标准误相对差值的大小决定要几个种子。
  • 最小二乘:残差平方和最小,\(a = \sum(x - \bar x)(y - \bar y) / \sum(x - \bar x)^2\),5 个点手算 = polyfit;幂律在双对数坐标上是直线,斜率是指数。
  • scaling law 拟合:7 个真实小模型,\(\alpha = 0.104\),bootstrap 区间很窄但第 7 点落在区间外——误差来自公式形式(缺 \(E\) 项)不是噪声;外推越远越不可信。Chinchilla \(L = E + A/N^\alpha + B/D^\beta\),等 loss 线与等算力线相切给出最优 \(N, D \propto C^{0.5}\);\(D/N \approx 20\) 是实验值,参数式拟合给出的比例更大且区间很宽。
  • 读一个”提升”:题数 → 独立还是配对 → 有没有区间 → 采样设置 → 单种子还是多种子 → 多重比较 → 外推范围。

九、自测

  1. 一个 500 题的评测,模型正确率 60%,95% 置信区间是多少?

    答案

    \(\text{SE} = \sqrt{0.6 \times 0.4 / 500} = 2.2\%\),区间 \(60\% \pm 4.3\%\)。

  2. 上题里两个独立模型分别得 60% 和 65%,差异显著吗?

    答案

    差值 5 个点,差值的 SE \(\approx \sqrt{2.2^2 + 2.1^2} = 3.0\%\),\(1.96 \times 3.0 = 5.9\) 个点——不显著(勉强)。

  3. 同一套 500 题,A 对 B 错的有 40 题、A 错 B 对的有 15 题,其余两者一致:这个差异比第 2 题的独立比较更可信还是更不可信?为什么?

    答案

    更可信:分歧题 55 道里 40 : 15 的偏向,\(z = 25 / \sqrt{55} = 3.4\),在”两者一样好”(应为 27.5 : 27.5)的假设下概率很小;配对检验只看分歧题,噪声更小。

  4. 一个同事说:”我把置信区间算出来了,真实正确率有 95% 的概率在 74% 到 86% 之间。”这句话哪里不严谨?

    答案

    真实正确率是一个固定的数,不是随机的;随机的是区间。严格说法是”按这个方法反复构造区间,95% 的区间会盖住真实值”——他手里这一个区间要么盖住了要么没有,只是不知道是哪种。日常交流里第一种说法通常无害,但要知道它的严格含义,否则容易滑向第四章第 2 节里”p 值是零假设为真的概率”那类条件反了的误读。

  5. 双对数图上一条斜率 \(-0.1\) 的直线:参数量翻 100 倍,loss 变成原来的多少?如果作者只用 3 个数量级内的点拟出这条线,再往外推 2 个数量级,你会担心什么?

    答案

    \(100^{-0.1} = 10^{-0.2} = 0.63\)。担心两件事:噪声导致的斜率误差在外推时被放大(bootstrap 区间张开);更重要的是公式形式——纯幂律没有不可约项 \(E\),loss 不会无限下降,外推必然偏乐观(第六章第 1 节第 7 个点的例子)。

  6. 用 Chinchilla 的公式:\(N = 70\text{B}\)、\(D = 1.4\text{T}\) 时三项各是多少、\(L\) 是多少?(\(70 \times 10^9\) 的 0.34 次方约 4855,\(1.4 \times 10^{12}\) 的 0.28 次方约 2510。)

    答案

    \(A/N^\alpha = 0.084\),\(B/D^\beta = 0.164\),\(L \approx 1.69 + 0.084 + 0.164 = 1.94\)。

  7. 你改了一个超参,跑了一个种子,val loss 从 2.337 降到 2.331。要不要把它写进配方?

    答案

    不要(还)。第四章的实跑里同配方种子间的标准差就有 0.003–0.014,0.006 的差在噪声范围内;+2% 学习率的例子正好是这个量级,5 个种子的 \(t = 2.3\)、p = 0.07,单种子对比有 8% 的概率符号反过来。至少各跑 3–5 个种子,看差值相对差值标准误有多大。

配套代码:math-for-ai/08_inference_and_fitting.py(抽样噪声、CLT、置信区间、独立 vs 配对、置换检验、最小二乘、幂律 bootstrap、Chinchilla 等高线)与 08_multi_seed.py(20 次实跑训练);输出在 expected/。

  1. 分辨不出。164 题、准确率约 50% 时,标准误 \(\sqrt{0.5 \times 0.5 / 164} \approx 3.9\) 个点,95% 区间约 \(\pm 7.7\) 个点——3 个点在噪声里;模拟里真差 3 个点的两个模型,24% 的次数看起来是差的那个更高。配对比较(同一批题两个模型各自对错)比独立比较灵敏得多,是正确的做法。详见第二至四章。 ↩

  2. 把 \((N, D, L)\) 的实验点代入 \(L = E + A/N^\alpha + B/D^\beta\),在双对数坐标上幂律是直线,最小二乘拟出五个常数。\(D/N \approx 20\):固定算力 \(C = 6ND\),用拉格朗日乘子对 \(L\) 求极值——几何上是等 loss 线与等算力线相切——得到 \(N^*, D^*\) 都随 \(C\) 的约 0.5 次幂增长,比值由 \(A, B, \alpha, \beta\) 决定——Chinchilla 用实验方法得到约 20;拟合常数有标准误、依赖公式形式,所以 20 是一个区间不是常数。详见第五章、第六章。 ↩

这篇对你有用?

本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/statistical-inference-and-fitting-scaling-laws.html)的前提下,欢迎各种形式的转载、翻译或商业引用。


COMMENTS

评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。

×