我刚刚为我自己的深度神经网络库实现了 AdaDelta ( http://arxiv.org/abs/1212.5701 )。论文有点说带有 AdaDelta 的 SGD 对超参数不敏感,并且它总是收敛到好的地方。(至少 AdaDelta-SGD 的输出重建损失可以与微调动量方法相媲美)
当我在 Denoising AutoEncoder 中使用 AdaDelta-SGD 作为学习方法时,它确实在某些特定设置中收敛,但并非总是如此。当我使用 MSE 作为损失函数,使用 Sigmoid 作为激活函数时,它收敛得非常快,经过 100 个 epoch 的迭代,最终的重建损失优于所有普通 SGD、带有 Momentum 的 SGD 和 AdaGrad。
但是当我使用 ReLU 作为激活函数时,它并没有收敛,而是继续堆叠(振荡),具有高(坏)重建损失(就像你使用具有非常高学习率的普通 SGD 时的情况一样)。它叠加的重建损失的幅度大约是动量方法产生的最终重建损失的 10 到 20 倍。
我真的不明白为什么会这样,因为论文说 AdaDelta 很好。请让我知道这些现象背后的原因,并教我如何避免它。