Machine learning 神经网络的激活函数

Machine learning 神经网络的激活函数,machine-learning,signal-processing,neural-network,classification,Machine Learning,Signal Processing,Neural Network,Classification,我需要帮助找出一个合适的激活函数。我正在训练我的神经网络来检测钢琴音符。所以在这种情况下,我只能有一个输出。注释存在(1)或不存在(0)。 假设我引入了一个阈值0.5,如果输出大于0.5,则存在所需的音符;如果输出小于0.5,则不存在音符,则可以使用什么类型的激活函数。我认为这应该是硬限制,但我想知道是否也可以使用sigmoid。为了充分利用它们的能力,神经网络需要连续的、可差分的激活函数。阈值不是多层神经网络的一个好选择。Sigmoid是一种非常通用的函数,可以应用于大多数情况。当您进行二进制

我需要帮助找出一个合适的激活函数。我正在训练我的神经网络来检测钢琴音符。所以在这种情况下,我只能有一个输出。注释存在(1)或不存在(0)。
假设我引入了一个阈值0.5,如果输出大于0.5,则存在所需的音符;如果输出小于0.5,则不存在音符,则可以使用什么类型的激活函数。我认为这应该是硬限制,但我想知道是否也可以使用sigmoid。

为了充分利用它们的能力,神经网络需要连续的、可差分的激活函数。阈值不是多层神经网络的一个好选择。Sigmoid是一种非常通用的函数,可以应用于大多数情况。当您进行二进制分类(
0/1
值)时,最常用的方法是定义一个输出神经元,并在其输出大于阈值(通常为0.5)时选择一个类别1

编辑

当您处理非常简单的数据(两个输入维度和两个输出类)时,实际上放弃神经网络并从数据可视化开始似乎是一个最佳选择。二维数据可以简单地绘制在平面上(不同类别使用不同的颜色)。一旦你这样做了,你就可以研究区分一个类和另一个类有多困难。如果数据位于中间,你可以简单地用一条线把它们分开——线性支持向量机将是更好的选择(因为它将保证一个全局最优)。如果数据看起来非常复杂,并且决策边界必须是一些曲线(甚至是一组曲线),我建议使用RBF SVM,或者至少是神经网络的正则化形式(因此它的训练至少是可重复的)。如果你决定使用神经网络——情况非常相似——如果数据只是在平面上分离——你可以使用简单的(线性/阈值)激活函数。如果它不是线性可分的-使用S形或双曲正切,这将确保决策边界的非线性

更新


在过去的两年里,许多事情发生了变化。特别是(正如评论中所暗示的,@Ulysee)人们对“几乎无处不在”的不同功能越来越感兴趣,例如。这些函数在它的大部分区域都有有效的导数,所以我们在这一点上求导的概率为零。因此,如果我们需要计算
ReLU'(0)
,我们仍然可以使用经典方法,并且为了完整性,可以使用零导数。ReLU也有完全可微的近似值,例如softplus函数

维基百科文章中有一些有用的“软”连续阈值函数-参见图Gjl-t(x).svg

en.wikipedia.org/wiki/Sigmoid_函数


遵循Occam的Razor,使用一个输出节点的简单模型是二进制分类的良好起点,其中一个类标签在激活时映射到输出节点,另一个类标签在输出节点未激活时映射到输出节点

我不是在建立网络,只是在为一项任务做研究。输入将是通过使用听觉模型和自适应振荡器(部分跟踪)延时神经网络预处理输入信号而获得的频率和振幅,多层前馈网络似乎是最好的选择,具有一个隐藏层和监督学习。此外,由于我使用阈值,那么我的输出在0到1之间。我发现了sigmoid函数的定义“该函数特别适合于使用反向传播训练的神经网络,因为它易于区分,因此可以显著减少训练的计算负担。它适用于期望输出值介于0和1之间的应用。”我想我现在有主意了。谢谢。如果你在做二进制分类,你应该有一个输出神经元,因为该神经元的响应足以对类进行编码。还有一点需要澄清,但神经网络只有在使用非线性激活函数并包含隐藏层时才是非线性的。在这样一个简单的问题上,我会首先尝试逻辑回归,它相当于一个单一的输出节点,两层的神经网络,通过sigmoid激活训练来最小化交叉熵损失。这是一个古老的答案,但请注意1)可微激活函数是不必要的。事实上,分段线性的RELU单元非常强大,收敛速度更快;2)S形单元非常糟糕。至少,使用tanh单位,但任何类型的饱和单位(大区域中的零梯度)都需要仔细调整输入和权重初始化,这与问题高度相关且耗时。