3

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

回答

6

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

编辑

当你用很简单的数据(两个输入尺寸和两个输出类)工作似乎真正放弃的神经网络和数据可视化启动一个最好的选择。 2d数据可以简单地绘制在飞机上(不同类别的颜色不同)。一旦你做到了,你可以研究将一个课程与另一个课程分开有多难。如果数据以这种方式定位,那么您可以简单地将它们分开 - 线性支持向量机将是更好的选择(因为它将保证一个全局最优)。如果数据似乎非常复杂,并且决策边界必须是曲线(甚至是曲线集合),那么我会建议采用RBF SVM,或者至少是正则化的神经网络形式(因此它的训练至少是可重复的)。如果您决定使用神经网络 - 情况非常相似 - 如果数据只是在平面上分离 - 您可以使用简单(线性/阈值)激活函数。如果它不是线性可分的 - 使用sigmoid或双曲正切,这将确保决策边界的非线性。

UPDATE

很多事情经过近两年改变。尤其是(正如评论@Ulysee所建议的),对“几乎无处不在”的功能越来越感兴趣,如ReLU。这些函数在其大部分域中都有有效的导数,因此我们在这些点上需要推导的概率为零。因此,如果我们需要计算ReLU'(0),我们仍然可以使用经典方法,并为了完整性而放置一个零导数。还有ReLU的完全可微近似,例如softplus函数

+0

嗯,我实际上并没有建立网络,只是在研究它的任务。输入将是通过使用听觉模型和自适应振荡器(部分跟踪)预处理输入信号而获得的频率和幅度。 时间延迟神经网络,多层前馈网络似乎是带有监督学习的一个隐藏层的最佳选择。 – user2482542

+0

另外,因为我使用了一个阈值,那么我的输出范围在0到1之间。我发现了sigmoid函数的这个定义“这个函数对于在反向传播训练的神经网络中使用是特别有利的,因为它很容易区分,因此可以显着减少训练的计算负担,它适用于所需输出值介于0和1之间。“ – user2482542

+0

我想我现在有个想法。谢谢。 – user2482542

0

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

en.wikipedia.org/wiki/Sigmoid_function。

继Occam的Razor之后,使用一个输出节点的简单模型对于二元分类来说是一个很好的起点,其中一个类标签在激活时映射到输出节点,另一个类标签用于输出节点未激活时。