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

Neural Network - Multiple output nodes have same value

我正在使用神经网络进行强化学习。我有一个带有 4 个输出节点的神经网络,我将每个输出节点映射到不同的动作。隐藏节点和输出节点使用 sigmoid 激活函数。

我面临的一个问题是,在某些输入上,很少有输出节点具有相同的值(即它们的输出值为 1)。我不知道在这种情况下该怎么做。有什么方法可以解决这个问题,所以没有两个输出节点具有相同的值吗?或者只是随机选择分配给具有最高值的输出节点的动作?

鉴于您的设置(即每个操作一个输出),有些联系将不可避免。也就是说,您可以采取一些措施来缓解这个问题。

  1. 您可以通过为您的输出节点选择一个不像 sigmoid 那样饱和的激活函数来减少联系的机会。例如,您可以尝试 Rectified Linear 激活函数 (https://en.wikipedia.org/wiki/Rectifier_(neural_networks))。

  2. 您可以通过将 sigmoid 的输入乘以小于 1 的常数来降低 sigmoid 的陡度。

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

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

或者,您可以尝试一种完全不同的方式来处理您的输出(但这取决于您的问题域)。例如,如果您的四个动作是 "move north"、"move east"、"move south" 和 "move west",您可以改为为网络提供两个输出,一个决定是水平移动还是垂直移动(因此将操作分成 "move north or south" 和 "move east or west"),第二个输出提供剩余备选方案之间的决胜局。