最近,我尝试将朴素的策略梯度方法应用于我的问题。然而,我发现神经网络最后一层的不同输出之间的差异是巨大的,这意味着应用softmax层后,只有一个动作会被标记为1,而其他动作将被标记为0。例如,最后一层的输出如下所示:
[ 242.9629, -115.6593, 63.3984, 226.1815, 131.5903, -316.6087,
-205.9341, 98.7216, 136.7644, 266.8708, 19.2289, 47.7531]
应用softmax函数后,很明显只会选择一个动作。
[4.1395e-11, 0.0000e+00, 0.0000e+00, 2.1323e-18, 0.0000e+00, 0.0000e+00,
0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00, 0.0000e+00, 0.0000e+00]
这个问题严重影响了最终的性能,因为神经网络只会在几步之后尝试不断的动作。那么,有没有办法解决这个问题呢?
(顺便说一句,即使我尝试给神经网络一些负奖励,它选择的动作仍然没有改变。)
事实上,没有确定的方法来解决这个问题,因为这是优化领域中一个古老的问题,称为“探索-利用困境”。具体来说,在强化学习中,有两种简单的方法可以解决这个问题:
这两种方法都在我的任务中得到了验证,并且都有效缓解了早熟问题。然而,它们都有一个需要手动调整的参数,这增加了我算法的复杂性。
顺便说一下,与Q-Learning类似,我们也可以使用epsilon-greedy机制来鼓励agent探索更多的动作。然而,这不是解决这个问题的优雅方法,因为很难确定 epsilon 值。