【问题标题】:Why shouldn't we use multiple activation functions in the same layer?为什么我们不应该在同一层使用多个激活函数?
【发布时间】:2020-07-28 01:28:55
【问题描述】:

我是 ML 和神经网络方面的新手,主要通过 coursera 视频和一些 kaggle/github 在线学习。我看到的所有应用神经网络的示例或案例都有一个共同点——它们在与特定层相关的所有节点中使用特定类型的激活函数。

据我了解,每个节点都使用非线性激活函数来了解数据中的特定模式。如果是这样,为什么不使用多种类型的激活函数?

我确实找到了一个link,它基本上说如果我们每层只使用一个激活函数,管理网络会更容易。还有其他好处吗?

【问题讨论】:

  • 我不会说激活函数学习“特定模式”。我认为整个网络学会以最小的损失完成任务,虽然有时特定的激活函数很重要,特别是对于输出层,但很多时候不同的激活函数具有相似的性能,所以我怀疑在单个中使用多个激活函数层只是没有值得花时间编写代码的好处,但我还没有读到任何人尝试这样做。
  • @Joe 不是激活函数,而是节点本身不是从模式中学到东西吗?
  • 视情况而定。我认为,如果你建立一个像自动编码器这样的网络,带有瓶颈层,那么你可以让瓶颈层中的每个节点代表某个潜在空间中的一个独立组件,就像一个主组件,但非线性。然而,总的来说,我认为神经网络通常是黑盒模型——不是很容易解释,但它们很有效。
  • 有时我们想要一个特定的激活函数,比如当我们想要对概率分布建模时,我们使用 softmax 作为输出,输出中的每个节点都是特定类的概率。然而,通用逼近定理表明,几乎所有 Lebesgue 可积函数都可以通过仅使用 ReLU 激活函数的足够深的网络进行任意逼近。

标签: machine-learning neural-network


【解决方案1】:

激活函数的目的是将非线性引入神经网络。请参阅此answer,了解为什么我们的深度神经网络在没有非线性的情况下实际上不会deep

激活函数通过控制神经元的输出来完成它们的工作。有时它们会像 ReLU 一样提供一个简单的阈值,可以这样编码:

if input > 0:
    return input
else:
    return 0

有时它们会以更复杂的方式表现,例如tanh(x)sigmoid(x)。有关不同类型激活的更多信息,请参阅此answer

我还想补充一点,我同意@Joe,激活函数不会学习特定模式,它会影响神经网络学习多种模式的方式。每个激活函数对输出都有自己的影响。

因此,在单层中不使用多个激活函数的一个好处是可以预测它们的效果。例如,我们知道 ReLUSigmoid卷积滤波器的输出 做了什么。但是我们现在的效果是它们的级联使用吗?顺便说一句,ReLU 是先出现的,还是我们先使用 Sigmoid 更好?有关系吗?

如果我们想从激活函数的组合中受益,所有这些问题(可能还有更多问题)都需要用科学证据来回答。应该进行繁琐的实验和评估以获得一些有意义的结果。只有这样我们才能知道将它们一起使用意味着什么,然后,也许会出现一种新型的激活函数,并且会有一个新的名称。

【讨论】:

  • 非常感谢您的回答!您谈到层内的激活顺序,该顺序如何在全连接网络中产生影响?另外,这些激活在网络中出现的顺序有什么建议吗?就像在 ReLU 层后面应该跟着一个 Sigmoid,或者可能是相反的方式?如果不是,找出可能的最佳排列的最佳方法是什么(除了蛮力)?
  • 不客气。最正确的答案是I do not know。但这里需要考虑一件事:函数fg 通勤如果f o g = g o f f(g(x)) = g(f(x))。那么问题的答案是“所有的激活函数是否相互交换?”可能是一个很好的起点。更多信息请参阅answer
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 2019-12-17
  • 2020-10-19
  • 2019-02-19
  • 2019-01-14
  • 2018-06-02
  • 2019-11-11
  • 2019-01-30
相关资源
最近更新 更多