我刚刚为我自己的深度神经网络库实现了AdaDelta (http://arxiv.org/abs/1212.5701)。这篇论文说,使用AdaDelta的SGD对超参数不敏感,并且它总是收敛到好的地方。(至少AdaDelta-SGD的输出重建损失与良好的动量法相当)
当我在去噪AutoEncoder中使用AdaDelta作为学习方法时,它确实在某些特定的设置下收敛,但并不总是收敛。当我使用均方误差作为损失函数,Sigmoid作为激活函数时,它非常快地收敛,并且经过100个时期的迭代,最终的重建损失比所有的平面SGD,动量SGD和AdaGrad都要好。
但是当我使用ReLU作为激活函数时,它没有收敛,而是继续堆叠(振荡),具有高(差)重建损失(就像你使用具有非常高学习率的普通SGD时的情况一样)。它叠加的重建损失的大小大约是动量法最终重建损失的10到20倍。
我真的不明白为什么会发生这样的事情,因为报纸上说AdaDelta很好。请告诉我这些现象背后的原因,并教我如何避免它。
发布于 2014-07-20 02:03:44
ReLU的激活是无界的,这使得它在自动编码器中的使用变得困难,因为您的训练向量可能没有任意大的和无界的响应!ReLU根本不适合这种类型的网络。
与done here一样,您可以通过对输出层应用一些转换来强制将ReLU转换为自动编码器。然而,嘿并没有从自动编码器的角度来讨论结果的质量,而只是作为一种分类的预训练方法。因此,这是不是值得努力建立一个自动编码器也不清楚。
https://stackoverflow.com/questions/24830365
复制相似问题