Machine learning 神经元的不同权函数

Machine learning 神经元的不同权函数,machine-learning,tensorflow,neural-network,keras,activation-function,Machine Learning,Tensorflow,Neural Network,Keras,Activation Function,我一直在TensorFlow中玩,制作了一个通用的全连接模型 在我申请的每一层 sigmoid(WX + B) 大家都知道,这很有效 然后,我开始处理应用于每一层的函数,发现 sigmoid(U(X^2) + WX + B) 当它们被优化时,也能正常工作 改变这种内在功能能实现什么?是否存在一种功能性应用,其中更改内部函数将改进模型的学习,或者任何组合输入和某些权重的函数是否具有相同的学习能力,无论学习的是什么数据 我知道许多其他的神经网络模型(如卷积网络、递归网络、残差网络等),所以我不是

我一直在
TensorFlow
中玩,制作了一个通用的全连接模型

在我申请的每一层

sigmoid(WX + B)
大家都知道,这很有效

然后,我开始处理应用于每一层的函数,发现

sigmoid(U(X^2) + WX + B)
当它们被优化时,也能正常工作

改变这种内在功能能实现什么?是否存在一种功能性应用,其中更改内部函数将改进模型的学习,或者任何组合输入和某些权重的函数是否具有相同的学习能力,无论学习的是什么数据


我知道许多其他的神经网络模型(如卷积网络、递归网络、残差网络等),所以我不是在寻找不同类型网络的解释(当然,除非某种类型的网络直接适用于我所说的)。最感兴趣的是一个简单的完全连接的场景。

理论上,两种方法具有完全相同的潜力,并且可以达到任何连续的目标函数,只要有足够的层次和训练时间/数据。使用
sigmoid(U(X^2)+WX+B)
可以使每一层更智能,但也更难学习(尤其是在没有过度拟合的情况下),因此如果使用它,你应该在网络中放置较少的层,以避免过度拟合

总的来说,在第一种方法和第二种层次较少的方法之间做出选择主要是基于经验:在你的问题上,一种方法可能比另一种更好,但在理论上不可能知道是哪种方法。如果目标函数几乎是多项式,则第二种解决方案可能更好。在其他情况下,如果您不想使用不同的网络大小训练两个版本,我会选择第一个解决方案,原因如下:

  • 有更多的线性函数参与,这使得更容易计算梯度,所以它可能更快
  • 最近几年的研究似乎表明,在实践中,深层网络往往比具有更大层次的浅层网络更好(尽管并非在所有情况下)
  • 这是惯例

就总运行时间而言,我不知道哪一个更好(考虑到您在第二个选项中使用的层更少)。

因此,考虑到您的问题,基本上有三个重要因素:

  • 计算复杂性和稳定性:计算函数(理论上)需要更多的时间,因为至少还需要两个以上的操作。我认为在这种情况下,这不是一个问题,但例如,比较需要同时计算exp和除法的
    sigmoid
    比计算
    relu
    要昂贵得多-是什么原因使
    relu
    变得如此流行。此外,由于平方函数的发散速度非常快,
    sigmoid
    的饱和是一个众所周知的问题,因此,梯度消失和计算上/下溢的影响可能更为严重
  • 参数数量:在第二次进近中,每个机组都有一个附加的设置参数。如果你的模型很小——这不是一个大问题——但只要神经网络用于真正的记忆和耗时任务——这可能是第二次激活的一个巨大缺点。这也是为什么真正简单的函数更适合用于深度学习的部分原因
  • 表达能力-这是您的第二个功能真正可以提供帮助的地方。不仅因为
    正方形
    使函数更加复杂。这也是因为实际上你的函数是渐近钟形的,这可以更好地捕捉局部依赖性。这可能是
    sigmoid
    relu
    的一个巨大缺点,因为这两个函数都会使每个单元对您的预测产生全局影响,而钟形函数倾向于更倾向于局部依赖,而不会影响位于感兴趣区域之外的数据点。在实践中,通常通过应用一个真正深入和广泛的拓扑来解决这个问题——在一个巨大的数据集的情况下——通常是平衡单个单元的影响 有趣的:。有很多不同的激活功能。