神经网络由多个激活函数组成

时间:2016-06-21 14:43:00

标签: python neural-network scikits activation-function

我正在使用sknn包来构建神经网络。为了优化我正在使用的数据集的神经网络的参数,我正在使用进化算法。由于包允许我构建一个神经网络,其中每一层都有不同的激活功能,我想知道这是否是一个实际的选择,或者我是否应该只为每个网络使用一个激活功能?在神经网络中有多个激活函数会对神经网络造成伤害或损害吗?

每层我应该拥有的最大神经元数量是多少,我应该拥有每个网络的最大层数?

2 个答案:

答案 0 :(得分:2)

神经网络只是一个(大)数学函数。您甚至可以为同一层中的不同神经元使用不同的激活函数。不同的激活功能允许不同的非线性,这可能更好地解决特定功能。使用sigmoid而不是tanh只会产生边际差异。更重要的是激活有一个很好的衍生物。通常使用tanh和sigmoid的原因是,对于接近0的值,它们就像线性函数,而对于大的绝对值,它们更像是符号函数((-1或0)或1),并且它们具有很好的导数。一个相对较新的引入的是ReLU(max(x,0)),它有一个非常简单的导数(除了x = 0),是非线性的,但重要的是计算速度快,对于高训练的深度网络来说非常好次。

归根结底,对于全球性能而言,选择并不是非常重要,非线性和上限范围很重要。要挤出最后一个百分点,这个选择会很重要,但主要取决于您的具体数据。这个选择就像隐藏层的数量和这些层内神经元的数量必须通过交叉验证来找到,尽管你可以调整你的遗传算子来包含这些。

答案 1 :(得分:1)

  

我想知道[在每一层上有不同​​的激活功能]是否是一个实际的选择,或者我是否应该每网使用一个激活功能?

简短回答:这取决于

更长的答案:我试图想一想你 希望拥有多个激活功能的原因。你在问题中没有说,所以我会在更理论的层面上回答。

一般建议/指导

神经网络只是数学函数的近似值,正确的设计将基于回答以下问题/答案

  • 近似值有多接近,您可以训练网络接近函数的接近程度?
  • 网络对未经过培训的数据集的概括程度如何?它的整合程度有多好?

这是我认为与您的问题相关的额外内容

  • 网络需要多快才能执行?您选择的激活功能如何影响性能?

如果您回答这些问题,您将对自己的具体案例有更好的了解。

我的意见

构建具有多个激活功能的神经网络实际上是混乱的水域,使系统变得比它需要的更复杂。当我想到构建好的软件时,我想到的第一件事就是凝聚力设计。换句话说,系统整体上是否有意义还是做得太多了?

专业提示:不要构建软件Rube Goldburg Machines

如果您想在同一网络中使用多个激活功能,我认为这不具备凝聚力。如果您的问题由于某种原因确实需要这个问题,那么重新考虑问题并且可能设计一个具有多个独立神经网络的系统,并且这些网络将各自用于各自的架构(包括激活功能的选择)。