我可以在自动编码器中使用ReLU作为激活功能吗?


11

当使用神经网络实现自动编码器时,大多数人将使用Sigmoid作为激活函数。

我们可以改用ReLU吗?(由于ReLU对上限没有限制,因此基本上意味着输入图像的像素可以大于1,这与使用Sigmoid时自动编码器的限制条件不同)。

Answers:


5

这是一个讨论线程(从2013年7月开始),表明它可能存在一些问题,但是可以解决。

ÇağlarGülçehre(来自Yoshua Bengio实验室)说,他成功地将以下技术用于知识领域:优化先验信息的重要性

像往常一样训练第一个DAE,但在隐藏层使用整流器: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) 比较g1(f1(corrupt(x)))和x,以最小化交叉熵或MSE损失。sigmoid是可选的,具体取决于数据。

h2 = f2(h1) = rectifier(W2 h1 + b2) g2(h2) = softplus(V2 h2 + c2) F1个X-G2F2[RËCŤ一世F一世Ë[RCØ[R[RüpŤ一个1个X2+λ1个w ^1个+λ2w ^2

泽维尔Glorot,还从Bengio实验室,说他只是用相同的与罚“的激活值”(大概两个?)领域适应性的大规模情感分类:深度学习方法(ICML 2011)和深度稀疏整流器神经网络(AISTATS 2011)。w ^1个大号1个G21个


感谢您的快速回复!因此,您说的是在使用ReLU而不是Sigmoid时优化auteencoder时存在一些问题吗?
RockTheStar

看来这可能会引起问题,是的,但是如果您正确地设置了学习过程,那么绝对可以完成。阅读链接的文章可能会有所帮助。
Dougal

我正在对MNIST数据集使用简单的自动编码器进行实验。我使用具有784-128-64-2-64-128-784架构的完全连接的网络。我在所有地方都使用relus,但是我正在试验瓶颈层(relu或线性)和输出层(relu或Sigmoid)。在输出中使用整流器会导致性能下降;乙状结肠效果更好。对于S型输出,线性瓶颈似乎表现得更好。因此,对于这两层,我最喜欢的组合是线性/ S型。(顺便说一句,在所有层上使用S形显然会更糟。)
amoeba

@ameoba relu输出很糟糕,这不足为奇:如果您知道输出具有一定范围,那么使用激活函数将您限制在这些范围内就很有意义。我在这方面经验不是很丰富,但是我可能会为隐藏层尝试ELU或泄漏的ReLU。
Dougal

2
哦,哇,我不知道ELU!非常感谢小费,Dougal。我尝试了它们,它们的效果更好。深度学习是惊人的:每年都有新的花样出现,而且没人知道为什么有些方法比其他方法更好。(抄送@RockTheStar)。顺便说一下,我还发现Adam优化器的性能非常出色。
amoeba
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.