神经网络的激活函数

use*_*542 3 signal-processing classification machine-learning neural-network

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

lej*_*lot 7

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

编辑

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

UPDATE

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