直觉:模型不学「世界」,只学「你给的分布」

工程师常说「数据是燃料」,但这个比喻容易误导——燃料只管多少,数据却同时管分布、规模、质量三件事,且三者会互相吃掉收益。一个更准确的说法是:监督学习模型是数据分布的压缩器。它不理解世界,它拟合你采样给它的那个分布 D\mathcal{D}。训练-部署一旦分布错位,再大的模型也会自信地犯错。

下面从三个维度拆开:为什么分布决定上限,规模如何带来收益又如何递减,质量为何常常比规模更值钱。

机制:分布——泛化的数学前提

监督学习的目标是最小化期望风险(在真实分布上的误差):

R(f)=E(x,y)D[L(f(x),y)]R(f) = \mathbb{E}_{(x,y)\sim \mathcal{D}}\big[\mathcal{L}(f(x), y)\big]

但我们拿不到 D\mathcal{D},只能用训练集近似为经验风险

R^(f)=1Ni=1NL(f(xi),yi)\hat{R}(f) = \frac{1}{N}\sum_{i=1}^{N} \mathcal{L}(f(x_i), y_i)

整个机器学习能成立,依赖一个隐含假设:训练数据与部署数据来自同一分布(i.i.d. 假设)。一旦部署时 DtestDtrain\mathcal{D}_{\text{test}} \neq \mathcal{D}_{\text{train}},最小化 R^\hat{R} 不再保证小的 RR。这就是分布漂移(distribution shift),常见三类:

  • 协变量漂移P(x)P(x) 变了,P(yx)P(y\mid x) 不变(例如模型在白天图像上训练,部署到夜间)。
  • 标签漂移P(y)P(y) 变了(欺诈率随季节波动)。
  • 概念漂移P(yx)P(y\mid x) 本身变了(用户偏好、攻击者策略随时间改变)。

结论:数据分布决定了模型能力的天花板。你的数据没覆盖的区域,模型只能瞎猜(外推),而神经网络的外推行为通常不可靠。

公式:规模——幂律与递减收益

规模确实有用,但回报是幂律递减的。在很多任务上,测试误差随数据量 NN 近似服从:

\text{误差}(N) \approx \varepsilon_{\infty} + c \cdot N^{-\alpha}

其中 ε\varepsilon_\infty 是不可约误差(数据噪声、任务本身的歧义性决定的下界),α>0\alpha>0 是数据规模的收益指数。这个式子有两个工程含义:

  1. 对数坐标下是直线,线性坐标下急剧递减。把数据从 1 万翻到 10 万,提升明显;从 100 万翻到 1000 万,可能只换来零点几个点。
  2. 存在 ε\varepsilon_\infty 这个硬底。再多数据也越不过去——它由标注噪声和任务固有歧义决定。想突破,得改任务定义或提升标注质量,而非堆量。

一个简单的实践判断:先画学习曲线,看曲线是否还在下降。

1
2
3
4
5
6
7
8
9
10
11
# 用不同数据子集量训练,观察验证误差走势,决定是否值得继续标注
import numpy as np

sizes = [1_000, 2_000, 5_000, 10_000, 20_000, 50_000]
val_errors = [train_and_eval(n) for n in sizes] # 你的训练+评估函数

# 拟合幂律 误差 ≈ a * N^(-α) + ε∞,看斜率是否趋平
log_n = np.log(sizes)
log_e = np.log(np.maximum(val_errors, 1e-6))
slope = np.polyfit(log_n, log_e, 1)[0] # 斜率越接近 0,加数据越不划算
print(f"幂律斜率 ≈ {slope:.3f}")

工程权衡:质量常常比规模更值钱

同样的标注预算,清理 1 万条噪声 vs 新增 5 万条脏数据,前者往往更划算。原因在于损失函数对错误标签很敏感:

  • 标签噪声放大方差。错误标签提供互相矛盾的梯度,模型要么被带偏,要么浪费容量去「记住」噪声(过拟合)。
  • 重复与近重复样本虚增规模。去重前的「100 万」可能等效于「20 万」,还会让评估集泄漏到训练集,制造虚高指标。
  • 长尾覆盖比总量更关键。100 万条都是高频场景,不如 10 万条里塞进足够的边缘/罕见情形——决定线上事故的往往是长尾。

几个反复踩的坑:

  • 训练-测试泄漏:去重、时间切分没做好,验证集里混入了训练样本,离线指标好看,上线翻车。时间序列务必按时间切分,不能随机切。
  • 类别不平衡:99% 负样本时,模型全预测负也有 99% 准确率。要看 PR 曲线、召回,而非裸准确率,并考虑重采样或加权损失。
  • 标注一致性:多个标注员对同一样本给不同标签,意味着任务定义本身有歧义,这部分会直接进入 ε\varepsilon_\infty。先量化标注者间一致性(如 Cohen’s Kappa),低了就先修标注规范。
  • 「无监督就不用管数据质量」是错觉:自监督/预训练同样继承语料里的偏见、重复和有毒内容,只是问题更隐蔽。

小结

「数据是燃料」要拆成三件事来看:分布决定模型能力的上限与泛化是否成立(i.i.d. 假设一破,全盘失效);规模带来幂律递减的收益,存在由噪声决定的硬底 ε\varepsilon_\infty质量——去重、标签准确性、长尾覆盖、无泄漏——常常比单纯堆量更能换来真实提升。下次想「再标 50 万条」之前,先画学习曲线、查分布漂移、做误差分析,往往会发现钱该花在清洗和长尾上,而不是规模上。