我正在与 Adam 在 PyTorch 中训练 CNN,初始学习率为 1e-5。我的 epoch 中有 5039 个样本,batch size 为 1。我观察到,在一个 epoch 结束时,我有一个规律的训练损失峰值模式。这是训练损失的图:
从图中可以看到清晰的尖峰模式,这些尖峰恰好发生在时代结束时。我的时代包含 5039 个样本。有趣的是,尖刺不仅会击落,有时还会向上击落。
我不认为是:
如果没有对数据集进行洗牌,这些峰值可能会得到解释。但是,我在每个时期都对我的数据集进行洗牌。
当 epoch 的最终批次小于其他批次时会发生这种行为,这会导致不同程度的损失(为什么我的训练损失有规律的尖峰?)。但是,这不是我的情况,因为我的批量大小是 1。
一种潜在的技巧可能是在更新步骤之前应用渐变裁剪。但是,对我来说,这似乎不是处理这个问题的好方法。
- 您对这种峰值模式的原因有何看法?
- 有这样的模式有多糟糕?