神经网络的激活函数

时间:2013-08-18 04:26:35

标签: machine-learning signal-processing neural-network classification

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

2 个答案:

答案 0 :(得分:7)

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

修改

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

<强>更新

过去两年发生了很多变化。特别是(正如评论中所建议的那样,@ Ulysee)对于“几乎无处不在”的各种功能越来越感兴趣,例如ReLU。这些函数在其大部分领域都有有效的导数,因此我们在这一点上需要推导的概率为零。因此,我们仍然可以使用经典方法,并且为了完整性,如果我们需要计算ReLU'(0),则将零导数放在一起。 ReLU也有完全可微分的近似值,例如softplus函数

答案 1 :(得分:0)

维基百科文章有一些有用的&#34; soft&#34;连续阈值函数 - 参见图Gjl-t(x).svg。

en.wikipedia.org/wiki/Sigmoid_function。

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