2

我正在尝试根据 Karpathy 的RL 教程为游戏 2048 实施策略网络代理。我知道算法需要玩一些游戏,记住输入和采取的行动,标准化和平均中心结束分数。但是,我陷入了损失函数的设计。如何正确地鼓励那些导致更好的最终分数的行为并阻止那些导致更差分数的行为?

在输出层使用 softmax 时,我设计了一些东西:

loss = sum((action - net_output) * reward)

其中动作是一种热门格式。但是,这种损失似乎没有多大作用,网络没有学习。我在 PyTorch 中的完整代码(没有游戏环境)在这里

4

1 回答 1

0

对于您代码中的策略网络,我认为您想要这样的东西:

loss = -(log(action_probability) * reward)

其中 action_probability 是您的网络在该时间步中执行的操作的输出。

例如,如果您的网络输出了 10% 的执行该操作的机会,但它提供了 10 的奖励,那么您的损失将是:-(log(0.1) * 10)等于 10。

但是,如果您的网络已经认为这是一个好的举动,并且输出了 90% 的机会采取该行动,那么您将有-log(0.9) * 10)大约等于 0.45,对网络的影响较小。

值得注意的是,PyTorch 的log函数在数值上不稳定,最好logsoftmax在网络的最后一层使用。

于 2018-05-24T04:54:39.840 回答