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



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

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

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

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

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

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

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

或者,您可以尝试完全不同的方式来处理输出(这取决于您的问题域)。例如,如果您的四个操作是"向北移动"、"向东移动"、"向南移动"和"向西移动",则可以改为为网络提供两个输出,一个确定是水平移动还是垂直移动(从而将操作拆分为"向北或向南移动"和"向东或向西移动"),第二个输出提供其余备选方案之间的决胜规则。

最新更新