在大模型训练中,数据采样方法直接影响模型性能和训练效率。本文将对比几种主流采样策略:均匀采样、加权采样和分层采样。
均匀采样 vs 加权采样
均匀采样简单直接,但忽视了数据分布差异。例如,对于不平衡的数据集,可以使用 torch.utils.data.WeightedRandomSampler 实现加权采样:
import torch
from torch.utils.data import DataLoader, WeightedRandomSampler
# 假设样本权重已计算
weights = [0.1, 0.3, 0.6] # 示例权重
sampler = WeightedRandomSampler(weights, num_samples=1000, replacement=True)
loader = DataLoader(dataset, sampler=sampler, batch_size=32)
分层采样实践
分层采样适用于类别分布复杂场景。使用 torch.utils.data.SubsetRandomSampler 可实现:
from torch.utils.data import SubsetRandomSampler
# 按类别划分索引
class_indices = [indices for indices in class_wise_indices]
# 分别为每类采样
sampled_indices = []
for indices in class_indices:
sampled_indices.extend(
np.random.choice(indices, size=min(500, len(indices)), replace=False)
)
性能对比建议
实际应用中,建议先进行数据分布分析,再选择采样方法。可以使用 matplotlib 绘制类别分布图辅助决策。
实践总结
- 小数据集:优先考虑加权采样
- 大数据集:可尝试分层采样优化
- 混合策略:结合多种方法提升效果

讨论