神经网络可以处理负输入和零输入吗?

机器算法验证 神经网络 雷路 激活函数
2022-03-02 05:35:56

正如标题所示,我有几个值为 -1、0 或 1 的特征。如果我将这些数据输入到神经网络中,ReLu用作隐藏层的激活函数,负值和 0 值是否会构成NN的问题?

我听说过死亡神经元,其中使用ReLuwhich 是一个逐步函数,导致任何小于或等于 0 的输入神经元停止学习并变得死亡。所以很自然,如果一个具有激活函数的 NNReLu输入 0 或负输入,这些神经元就会死亡。

现在我的数据包含几个具有 0 和负值的特征。在这种情况下该怎么办?我应该使用LeakyReLu还是其他一些变体ReLu或者我应该转换我的数据以便只保留正值吗?

编辑 1:如果负输入和 0 输入不会导致神经元死亡,那么是什么导致神经元死亡?那么为什么我们有像LeakyReLu,之类的激活函数PReLuELU如果ReLu单独可以处理死神经元呢?

4个回答

传递给激活函数(在您的情况下为 ReLu)的不是您的输入,您的输入首先使用线性(仿射)变换进行变换,然后将这些变换后的值传递给激活函数。所以负值不是问题,完全有可能将负值转换为正值。

LeakyRelu 是修复死亡神经元的好选择,所以使用起来是合理的。但是,负输入不会导致这种情况,因为您的权重初始化也可能具有负权重,并且在相乘时将正输入变为负。这几乎不是问题。通常首选您的输入具有零均值,因此也很自然地有负输入。

  • (其他答案已经说过)当输入的线性组合小于0时,ReLu激活函数的梯度等于0(因此它停止学习),而不是当输入本身为0时
  • (其他答案也已经说过)NN的输入通常在0左右归一化,因此某些值为0是完全正常的,每个神经元的权重通常(随机)初始化为0左右,这意味着当它是时候计算线性组合了,一些随机输入值会切换符号,这是意料之中的
  • ReLu 函数实际上旨在为低于 0 的值产生一个空梯度,不要强调这一点,当该神经元的所有输入导致一个空梯度时,就会出现死神经元的问题。讨论这不是一个微不足道的问题,所以我将讨论它,但这与简单地在输入中包含一些负值无关。正如 HitLuca 在他的评论中指出的那样,在学习过程中让神经元参数变为零会导致神经元死亡。
  • 当然,其他永远不会导致零梯度的激活函数(如leaky ReLu)将完全避免死神经元。

ReLu 神经元确实可以有效地忽略一些输入值。这是一件好事神经元通过训练的权重与输入耦合,因此一些输入被一些神经元忽略,而其他输入被其他神经元忽略。它允许后续层中的权重专注于输入空间的有趣子集