2048游戏的政策网络

时间:2018-05-04 18:52:28

标签: neural-network artificial-intelligence pytorch reinforcement-learning game-ai

根据Karpathy的RL tutorial,我试图为游戏2048实施政策网络代理。我知道算法需要玩一些游戏,记住所采取的输入和动作,规范化并且意味着中心结束分数。但是,我陷入了损失函数的设计。如何正确地鼓励能够带来更好的最终得分的行动,并阻止那些导致更差分数的行为?

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

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

其中action是一种热门格式。然而,这种损失似乎没有多大作用,网络也没有学到。我在PyTorch中的完整代码(没有游戏环境)是here

1 个答案:

答案 0 :(得分:0)

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

loss = -(log(action_probability) * reward)

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

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

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

值得注意的是,PyTorch的{​​{1}}功能在数值上并不稳定,您可能最好在网络的最后一层使用log。< / p>