我刚刚实施了 AdaDelta (http://arxiv.org/abs/1212.5701 http://arxiv.org/abs/1212.5701)用于我自己的深度神经网络库。
这篇论文说的是 AdaDelta 的 SGD 对超参数不敏感,并且它总是收敛到好的地方。 (至少AdaDelta-SGD的输出重建损失与经过良好调整的Momentum方法相当)
当我在去噪自动编码器中使用 AdaDelta-SGD 作为学习方法时,它确实在某些特定设置中收敛,但并非总是如此。
当我使用 MSE 作为损失函数,Sigmoid 作为激活函数时,它收敛得非常快,经过 100 个 epoch 迭代后,最终的重建损失优于所有普通 SGD、带有 Momentum 的 SGD 和 AdaGrad。
但是当我使用 ReLU 作为激活函数时,它没有收敛,而是继续以高(坏)重建损失堆叠(振荡)(就像您使用具有非常高学习率的普通 SGD 时的情况一样)。
它叠加的重建损失的大小比Momentum方法生成的最终重建损失大约高10到20倍。
我真的不明白为什么会发生这种情况,因为报纸上说 AdaDelta 很好。
请让我知道这些现象背后的原因,并教我如何避免它。
ReLU 的激活是无界的,这使得它在自动编码器中的使用变得困难,因为您的训练向量可能没有任意大且无界的响应! ReLU 根本不适合这种类型的网络。
您可以通过对输出层应用一些转换来强制 ReLU 进入自动编码器,如下所示在这里完成 http://eprints.pascal-network.org/archive/00008596/01/glorot11a.pdf。然而,嘿,不要讨论自动编码器的结果质量,而只是作为分类的预训练方法。因此,尚不清楚构建自动编码器是否值得付出努力。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)