神经网络的激活函数

我需要帮助来确定一个合适的激活函数。我正在训练我的神经网络来检测钢琴音符。在这种情况下,我只能有一个输出。音符存在时输出为1,不存在时输出为0。假设我设定一个0.5的阈值,如果输出大于0.5,则认为所需的音符存在;如果小于0.5,则认为音符不存在。在这种情况下,我可以使用哪种类型的激活函数?我认为应该是硬限制,但我在想是否也可以使用Sigmoid函数。


回答:

为了充分发挥神经网络的威力,需要使用连续且可微的激活函数。阈值处理对于多层神经网络来说不是一个好的选择。Sigmoid函数是一种相当通用的函数,可以适用于大多数情况。当你进行二元分类(0/1值)时,最常见的方法是定义一个输出神经元,并简单地选择类别1当且仅当其输出大于阈值(通常为0.5)时。

编辑

由于你处理的是相当简单的数据(两个输入维度和两个输出类别),似乎最好的选择是放弃神经网络,转而进行数据可视化。2D数据可以简单地在平面上绘制(用不同的颜色表示不同的类别)。一旦你这样做了,你可以研究将一个类别与另一个类别分开的难度。如果数据的分布方式允许你简单地用一条线将它们分开,那么线性支持向量机将是一个更好的选择(因为它能保证一个全局最优解)。如果数据看起来非常复杂,决策边界必须是一条曲线(甚至是一组曲线),我建议使用RBF SVM,或者至少是正则化的神经网络形式(这样它的训练至少是相当可重复的)。如果你决定使用神经网络——情况是相似的——如果数据在平面上很容易分开,你可以使用简单的(线性/阈值)激活函数。如果数据不是线性可分的——使用Sigmoid或双曲正切函数,这将确保决策边界的非线性。

更新

在过去的两年里,很多事情发生了变化。特别是(正如评论中@Ulysee所建议的),对“几乎处处可微”的函数(如ReLU)的兴趣日益增长。这些函数在其定义域内的大部分点上具有有效的导数,因此我们几乎不需要在这些点上进行求导的概率为零。因此,我们仍然可以使用经典方法,并且为了完整性,如果需要计算ReLU'(0),可以将导数设为零。还有ReLU的完全可微近似,如softplus函数。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注