神经网络 – 多个输出节点具有相同值

我在使用神经网络进行强化学习。我的神经网络有4个输出节点,每个输出节点对应一个不同的动作。隐藏层和输出层使用了Sigmoid激活函数。

我遇到的问题是,在某些输入下,几个输出节点的值相同(例如,它们的输出值为1)。我不知道在这种情况下该怎么做。有没有办法可以解决这个问题,让没有两个输出节点具有相同的值?或者只是在最高值的输出节点对应的动作之间随机选择一个?


回答:

考虑到您的设置(即每个动作对应一个输出),某些平局是不可避免的。尽管如此,您可以采取一些措施来缓解这个问题。

  1. 您可以通过选择一个不会像Sigmoid那样饱和的激活函数来减少平局的几率。例如,您可以尝试使用整流线性激活函数(https://en.wikipedia.org/wiki/Rectifier_(neural_networks))。

  2. 您可以通过将Sigmoid的输入乘以一个小于1的常数来使其斜率变得更缓。

  3. 您可以尝试在输出层应用Softmax函数(https://en.wikipedia.org/wiki/Softmax_function)。请注意,如果您选择这样做,您不应在输出层应用Sigmoid激活函数,因为Softmax函数只会放大现有的差异。

  4. 当确实出现平局时,您可以随机选择一个动作(如您自己建议的),或者您可以简单地选择列表中的第一个动作。最后这个选项会使您的学习算法偏向于尝试第一个动作,但如果您的学习算法足够有效,它最终应该能够学会在哪些情况下这是错误的动作,从而减少对这些动作的重视程度。

或者,您可以尝试完全不同的方式来处理您的输出(这取决于您的问题领域)。例如,如果您的四个动作是“向北移动”、“向东移动”、“向南移动”和“向西移动”,您可以给网络两个输出,一个决定是水平移动还是垂直移动(从而将动作分为“向北或向南移动”和“向东或向西移动”),第二个输出提供剩余选项之间的决胜因素。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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