多数据集训练深度学习模型时,拼接后打乱还是按顺序训练效果更好?
多数据集训练采样方式效果对比结论
绝大多数情况下,将三个数据集拼接后全局打乱采样的效果,会明显优于按A→B→C顺序分批次采样的方案,具体原因和适用场景如下:
原有采样方式的核心问题
你当前使用的按数据集顺序取batch的方式属于非独立同分布采样,很容易触发两个训练缺陷:
- 灾难性遗忘:模型训练前期连续接收A分布数据、中期全为B分布、后期全为C分布,学习C的特征时很容易覆盖掉前期学到的A数据集特征,三个数据集分布差异越大,遗忘问题越严重
- 梯度震荡:不同数据集分布差异较大时,不同阶段的梯度更新方向会频繁跳变,不仅拖慢收敛速度,还可能让模型收敛到局部次优点,最终泛化效果变差
全局打乱采样的优势
全局打乱后每个batch都可能同时包含A、B、C三个数据集的样本,每一步训练的输入都符合所有数据的整体分布,梯度更新方向更稳定,既能避免单数据集特征遗忘的问题,也能加快收敛速度,常规多数据集联合训练同任务的场景下,最终泛化效果普遍更好。
如果三个数据集的规模差异过大,还可以不用直接拼接,改用加权随机采样的方式,给小数据集更高的采样权重,避免大数据集主导训练过程。
例外场景
如果你当前的训练属于阶段性迁移学习、或是三个数据集存在明确的上下游任务依赖,按顺序采样反而会有针对性优势,除此之外都更推荐用全局打乱的采样方案。
内容的提问来源于stack exchange,提问作者Manveru
相关产品推荐
相关产品推荐

