当你的模型只有 10 亿参数时,数据分布更加重要
700 亿参数的模型可以靠蛮力处理嘈杂数据。5 亿参数的模型则不行。以下是小语言模型对数据分布问题指数级更敏感的原因,以及如何通过针对性过滤和质量评分来解决。
700 亿参数的模型很宽容。给它嘈杂的数据、不平衡的类别、不一致的格式和变长的示例——它会透过噪声学习。它有 700 亿个参数来吸收模式、补偿数据质量问题,并仍然产生合理的输出。
5 亿参数的模型没有这种奢侈。它只有 5 亿个参数来编码完成任务所需的一切。每个嘈杂的训练示例都浪费容量。每个类别不平衡都会创建盲点。每个格式不一致都会引入一种失败模式。
这不是一个微小的差异。它是模型在生产中能否工作的区别。
容量问题
将模型参数想象为预算。700 亿模型有 700 亿美元的预算来学习模式。它能负担花 5 亿美元在噪声容忍上,仍然有足够的预算用于实际任务。5 亿模型只有 5 亿美元的预算。如果它花 5000 万学习嘈杂示例,那就是总容量的 10%——没了。
这个类比直接映射到实际结果:
700 亿规模: 在训练集中添加 20% 的嘈杂示例通常会将准确率降低 1-3 个百分点。模型有足够的容量来尽管有噪声仍能学习信号。
5 亿规模: 同样 20% 的嘈杂示例将准确率降低 8-15 个百分点。模型没有足够的容量在这个比例下区分信号和噪声。它将噪声作为信号来学习。
这意味着对于不到 10 亿参数的模型,数据整理不是锦上添花的优化步骤。它是模型能否正常运作的必要工程步骤。
类别不平衡的影响更大
考虑一个二分类任务——检测客服消息是否需要升级。在真实数据中,15% 的消息需要升级,85% 不需要。
在此分布上训练的 700 亿模型: 总体准确率 94%,升级类别召回率 87%。模型有足够的参数,尽管看到的示例较少,仍能很好地学习少数类模式。
在此分布上训练的 5 亿模型: 总体准确率 91%,但升级类别召回率仅 62%。模型实际上学会了将"不升级"作为默认预测,只捕获最明显的升级信号。在生产中,38% 需要升级的消息被遗漏。
解决方案不是更多数据。在相同 85/15 分布下再增加 100,000 个示例没有帮助——模型已经学习了分布,而且学错了。解决方案是重新平衡:过采样少数类或欠采样多数类,以实现 50/50 或 60/40 的训练分布。
对于不到 10 亿参数的模型,训练数据中的类别平衡不是最佳实践——它是少数类获得可接受性能的先决条件。
长度分布导致静默失败
如果你的生产部署处理 50-200 token 的输入,但训练数据包含从 10 到 4,000 token 不等的示例,模型学习的模式跨越了整个长度范围。对于 700 亿模型,这没问题——它有容量优雅地处理变长输入。
对于 5 亿模型,长训练示例产生两个问题:
容量浪费。 模型花费参数学习处理它在生产中永远不会见到的 2,000 token 输入。这些参数无法用于提高 50-200 token 输入的性能。
注意力稀释。 在 Transformer 模型中,注意力分布在上下文中的所有 token 上。长训练示例教模型广泛分散注意力。短生产输入因此获得过度分散的注意力,降低了模型对重要 token 的关注度。
解决方案:过滤训练数据以匹配生产长度分布。测量你生产输入长度的第 10-90 百分位。丢弃该范围之外的训练示例。对于处理 50-200 token 输入的模型,你的训练数据应包含 30-250 token 的示例——比生产略宽以提供余量,但不会大幅偏离。
词汇覆盖和嵌入浪费
700 亿模型有一个可以有效表示超过 100,000 个唯一 token 的嵌入层。5 亿模型理论上通常具有相同的词汇量大小,但其较小的嵌入维度意味着它无法以相同的丰富度表示每个 token。