直觉:模型不学「世界」,只学「你给的分布」
工程师常说「数据是燃料」,但这个比喻容易误导——燃料只管多少,数据却同时管分布、规模、质量三件事,且三者会互相吃掉收益。一个更准确的说法是:监督学习模型是数据分布的压缩器。它不理解世界,它拟合你采样给它的那个分布 。训练-部署一旦分布错位,再大的模型也会自信地犯错。
下面从三个维度拆开:为什么分布决定上限,规模如何带来收益又如何递减,质量为何常常比规模更值钱。
机制:分布——泛化的数学前提
监督学习的目标是最小化期望风险(在真实分布上的误差):
但我们拿不到 ,只能用训练集近似为经验风险:
整个机器学习能成立,依赖一个隐含假设:训练数据与部署数据来自同一分布(i.i.d. 假设)。一旦部署时 ,最小化 不再保证小的 。这就是分布漂移(distribution shift),常见三类:
- 协变量漂移: 变了, 不变(例如模型在白天图像上训练,部署到夜间)。
- 标签漂移: 变了(欺诈率随季节波动)。
- 概念漂移: 本身变了(用户偏好、攻击者策略随时间改变)。
结论:数据分布决定了模型能力的天花板。你的数据没覆盖的区域,模型只能瞎猜(外推),而神经网络的外推行为通常不可靠。
公式:规模——幂律与递减收益
规模确实有用,但回报是幂律递减的。在很多任务上,测试误差随数据量 近似服从:
\text{误差}(N) \approx \varepsilon_{\infty} + c \cdot N^{-\alpha}其中 是不可约误差(数据噪声、任务本身的歧义性决定的下界), 是数据规模的收益指数。这个式子有两个工程含义:
- 对数坐标下是直线,线性坐标下急剧递减。把数据从 1 万翻到 10 万,提升明显;从 100 万翻到 1000 万,可能只换来零点几个点。
- 存在 这个硬底。再多数据也越不过去——它由标注噪声和任务固有歧义决定。想突破,得改任务定义或提升标注质量,而非堆量。
一个简单的实践判断:先画学习曲线,看曲线是否还在下降。
1 | # 用不同数据子集量训练,观察验证误差走势,决定是否值得继续标注 |
工程权衡:质量常常比规模更值钱
同样的标注预算,清理 1 万条噪声 vs 新增 5 万条脏数据,前者往往更划算。原因在于损失函数对错误标签很敏感:
- 标签噪声放大方差。错误标签提供互相矛盾的梯度,模型要么被带偏,要么浪费容量去「记住」噪声(过拟合)。
- 重复与近重复样本虚增规模。去重前的「100 万」可能等效于「20 万」,还会让评估集泄漏到训练集,制造虚高指标。
- 长尾覆盖比总量更关键。100 万条都是高频场景,不如 10 万条里塞进足够的边缘/罕见情形——决定线上事故的往往是长尾。
几个反复踩的坑:
- 训练-测试泄漏:去重、时间切分没做好,验证集里混入了训练样本,离线指标好看,上线翻车。时间序列务必按时间切分,不能随机切。
- 类别不平衡:99% 负样本时,模型全预测负也有 99% 准确率。要看 PR 曲线、召回,而非裸准确率,并考虑重采样或加权损失。
- 标注一致性:多个标注员对同一样本给不同标签,意味着任务定义本身有歧义,这部分会直接进入 。先量化标注者间一致性(如 Cohen’s Kappa),低了就先修标注规范。
- 「无监督就不用管数据质量」是错觉:自监督/预训练同样继承语料里的偏见、重复和有毒内容,只是问题更隐蔽。
小结
「数据是燃料」要拆成三件事来看:分布决定模型能力的上限与泛化是否成立(i.i.d. 假设一破,全盘失效);规模带来幂律递减的收益,存在由噪声决定的硬底 ;质量——去重、标签准确性、长尾覆盖、无泄漏——常常比单纯堆量更能换来真实提升。下次想「再标 50 万条」之前,先画学习曲线、查分布漂移、做误差分析,往往会发现钱该花在清洗和长尾上,而不是规模上。