3

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

4

2 回答 2

7

为了充分发挥其功能,神经网络需要连续的、可区分的激活函数。阈值不是多层神经网络的好选择。Sigmoid 是一个非常通用的函数,可以在大多数情况下应用。当您进行二元分类(0/1值)时,最常见的方法是定义一个输出神经元,并简单地选择一个类 1,如果其输出大于阈值(通常为 0.5)。

编辑

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

更新

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

于 2013-08-18T04:43:02.623 回答
0

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

en.wikipedia.org/wiki/Sigmoid_function。

遵循奥卡姆剃刀法则,使用一个输出节点的更简单模型是二元分类的良好起点,其中一个类标签在激活时映射到输出节点,而另一个类标签在输出节点未激活时映射。

于 2013-08-18T19:53:03.207 回答