3

我刚刚为我自己的深度神经网络库实现了 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 很好。请让我知道这些现象背后的原因,并教我如何避免它。

4

1 回答 1

2

ReLU 的激活是无界的,因此很难在自动编码器中使用它,因为您的训练向量可能没有任意大且无界的响应!ReLU 根本不适合这种类型的网络。

您可以通过对输出层应用一些转换来强制 ReLU 进入自动编码器,就像在此处所做的那样。但是,他们没有根据自动编码器来讨论结果的质量,而只是作为分类的预训练方法。因此,也不清楚构建自动编码器是否值得。

于 2014-07-19T18:03:43.897 回答