ReLU 可以处理负输入吗?

Posted

技术标签:

【中文标题】ReLU 可以处理负输入吗?【英文标题】:Can ReLU handle a negative input? 【发布时间】:2017-09-08 05:52:29 【问题描述】:

我正在用负值和正值的数据训练神经网络。

有没有什么方法可以将数据输入到 ReLU 网络中,而不会将其全部转换为正数,并且有一个单独的输入来说明数据是负数还是正数?

我看到的问题是输入层的负输入意味着除非您已将权重初始化为负,否则 ReLU 节点永远不会被激活并且永远死亡。

【问题讨论】:

【参考方案1】:

我不能 100% 确定您的要求,因为有许多激活功能,您可以轻松编写自己的代码。如果您不想自己编写代码,不妨尝试一些替代方案:

泄漏的 ReLU

参数化 ReLU

基本上看here

【讨论】:

对不起不在输入层,而是在第一层。由于 ReLU 权重是从小的正值开始初始化的,它几乎迫使我的 ReLU 始终输出 0。我尝试使用 Leaky ReLU,但它没有用。但我想这是一个单独的问题,因为从概念上讲,泄漏的 ReLU 应该可以工作。链接到新问题...***.com/questions/43371117/…【参考方案2】:

如果您真的对输入层使用激活函数,我建议您使用另一个激活函数,例如 ELU,或者将您的数据转换为 [0,1] 范围。 如果 ReLU 函数在某个隐藏层,ReLU 函数应该只是暂时失效。

假设您在前馈网络的最后一个隐藏层中有一个 ReLU 函数。使用反向传播算法,前一个隐藏层的输出应该有可能以这样的方式改变,最终,ReLU 函数的输入将再次变为正数。那么 ReLU 就不会死了。我很可能在这里遗漏了一些东西。

无论如何,你一定要试试 ELU!与 ReLU 相比,我使用它获得了更好的结果。

【讨论】:

以上是关于ReLU 可以处理负输入吗?的主要内容,如果未能解决你的问题,请参考以下文章

这是joda time中的错误吗?处理非常古老(0000 年)的即时/负纪元

《计算机视觉和图像处理简介 - 中英双语版》:神经网络中的激活函数 ReLU vs Sigmoid

算法复习:最短路Dijkstra - Ford - Floyd

处理负时间跨度

神经网络可以处理冗余输入吗?

有啥技巧可以在 C++ 中处理非常大的输入吗?