我正在使用神经网络进行强化学习。我有一个带有4个输出节点的神经网络,我将每个输出节点映射到不同的动作。隐藏和输出节点使用sigmoid激活功能。
我面临的一个问题是,在某些输入上,很少有输出节点具有相同的值(即它们的输出值为1)。我不知道在这种情况下该怎么做。有没有办法解决这个问题,所以没有两个输出节点具有相同的值?或者只是随机选择分配给具有最高值的输出节点的动作?
答案 0 :(得分:0)
鉴于你的设置(即每个动作一个输出),一些关系将是不可避免的。也就是说,您可以采取一些措施来缓解这个问题。
您可以通过选择不像sigmoid那样饱和的输出节点的激活函数来减少连接的几率。例如,您可以尝试整流线性激活功能(https://en.wikipedia.org/wiki/Rectifier_(neural_networks))。
通过将sigmoid的输入乘以小于1的常数,可以使sigmoid不那么陡峭。
您可以尝试将softmax函数应用于输出图层(https://en.wikipedia.org/wiki/Softmax_function)。请注意,如果您选择这样做,则不应将sigmoid激活应用于输出层,因为softmax函数只会夸大现有差异。
当你有平局时,你可以随机选择一个动作(如你自己建议的那样),或者你只需选择列表中的第一个动作即可。最后一个选项确实偏向于你尝试第一个动作的任何学习算法,但如果你的学习算法足够有效,它应该最终知道在哪些情况下这是错误的行动,因此学会减少对这些动作的重视
或者,您可以尝试以完全不同的方式处理输出(这取决于您的问题域)。例如,如果您的四个动作是“向北移动”,“向东移动”,“向南移动”和“向西移动”,您可以为网络提供两个输出,一个确定是水平移动还是垂直移动(从而分裂“向北或向南移动”和“向东移动”或“向西移动”的行动,第二项输出提供剩余替代方案之间的决胜局。